Index: LMDZ6/trunk/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.F90
===================================================================
--- LMDZ6/trunk/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.F90	(revision 3988)
+++ LMDZ6/trunk/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.F90	(revision 3989)
@@ -119,4 +119,5 @@
   INTEGER :: flag_aerosol
   INTEGER :: flag_aerosol_strat
+  INTEGER :: flag_volc_surfstrat
   LOGICAL :: flag_aer_feedback
   LOGICAL :: flag_bc_internal_mixture
@@ -138,9 +139,7 @@
                    iflag_cldcon,                                        &
                    iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs,            &
-                   ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan,          &
-                   aerosol_couple,                                      &
-                   chemistry_couple, flag_aerosol, flag_aerosol_strat,  & 
-                   flag_aer_feedback,                                   &
-                   flag_bc_internal_mixture, bl95_b0, bl95_b1, &
+                   ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat,     &
+                   aerosol_couple, chemistry_couple, flag_aerosol, flag_aerosol_strat,  & 
+                   flag_aer_feedback, flag_bc_internal_mixture, bl95_b0, bl95_b1,       &
                    read_climoz, alp_offset)
   CALL phys_state_var_init(read_climoz)
Index: LMDZ6/trunk/libf/phylmd/conf_phys_m.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/conf_phys_m.F90	(revision 3988)
+++ LMDZ6/trunk/libf/phylmd/conf_phys_m.F90	(revision 3989)
@@ -17,6 +17,6 @@
        iflag_cld_th, &
        iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
-       ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, aerosol_couple, chemistry_couple, &
-       flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
+       ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat, aerosol_couple, & 
+       chemistry_couple, flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
        flag_bc_internal_mixture, bl95_b0, bl95_b1,&
        read_climoz, &
@@ -67,4 +67,5 @@
     ! bl95_b*: parameters in the formula to link CDNC to aerosol mass conc 
     ! ok_volcan: activate volcanic diags (SW heat & LW cool rate, SW & LW flux)
+    ! flag_volc_surfstrat: VolMIP flag, activate forcing surface cooling rate (=1), strato heating rate (=2) or nothing (=0, default)
     !
 
@@ -79,4 +80,5 @@
     INTEGER              :: flag_aerosol
     INTEGER              :: flag_aerosol_strat
+    INTEGER              :: flag_volc_surfstrat
     LOGICAL              :: flag_aer_feedback
     LOGICAL              :: flag_bc_internal_mixture
@@ -107,4 +109,5 @@
     INTEGER, SAVE       :: flag_aerosol_omp
     INTEGER, SAVE       :: flag_aerosol_strat_omp
+    INTEGER, SAVE       :: flag_volc_surfstrat_omp
     LOGICAL, SAVE       :: flag_aer_feedback_omp
     LOGICAL, SAVE       :: flag_bc_internal_mixture_omp
@@ -553,4 +556,14 @@
 
     !
+    !Config Key  = flag_volc_surfstrat
+    !Config Desc = impose cooling rate at the surface (=1),
+    !              heating rate in the strato (=2), or nothing (=0)
+    !Config Def  = 0
+    !Config Help = Used in radlwsw_m.F
+    !
+    flag_volc_surfstrat_omp = 0 ! NL: SURFSTRAT
+    CALL getin('flag_volc_surfstrat', flag_volc_surfstrat_omp) 
+
+    !
     !Config Key  = aerosol_couple
     !Config Desc = read aerosol in file or calcul by inca
@@ -2494,9 +2507,10 @@
     ok_cdnc = ok_cdnc_omp
     ok_volcan = ok_volcan_omp
+    flag_volc_surfstrat = flag_volc_surfstrat_omp
     aerosol_couple = aerosol_couple_omp
     chemistry_couple = chemistry_couple_omp
-    flag_aerosol=flag_aerosol_omp
-    flag_aerosol_strat=flag_aerosol_strat_omp
-    flag_aer_feedback=flag_aer_feedback_omp
+    flag_aerosol = flag_aerosol_omp
+    flag_aerosol_strat = flag_aerosol_strat_omp
+    flag_aer_feedback = flag_aer_feedback_omp
     flag_bc_internal_mixture=flag_bc_internal_mixture_omp
     aer_type = aer_type_omp
@@ -2723,4 +2737,12 @@
        CALL abort_physic('conf_phys', 'flag_bc_internal_mixture can only be activated with flag_aerosol=6',1)
     ENDIF
+
+    ! test sur flag_volc_surfstrat
+    IF (flag_volc_surfstrat.LT.0.OR.flag_volc_surfstrat.GT.2) THEN
+       CALL abort_physic('conf_phys', 'flag_volc_surfstrat can only be 0 1 or 2',1)
+    ENDIF 
+    IF ((.NOT.ok_volcan.OR..NOT.ok_ade.OR..NOT.ok_aie).AND.flag_volc_surfstrat.GT.0) THEN
+       CALL abort_physic('conf_phys', 'ok_ade, ok_aie, ok_volcan need to be activated if flag_volc_surfstrat is 1 or 2',1)
+    ENDIF 
 
     ! Test on carbon cycle
@@ -2845,4 +2867,5 @@
     WRITE(lunout,*) ' ok_ade = ',ok_ade
     WRITE(lunout,*) ' ok_volcan = ',ok_volcan
+    WRITE(lunout,*) ' flag_volc_surfstrat = ',flag_volc_surfstrat
     WRITE(lunout,*) ' ok_aie = ',ok_aie
     WRITE(lunout,*) ' ok_alw = ',ok_alw
Index: LMDZ6/trunk/libf/phylmd/physiq_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3988)
+++ LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3989)
@@ -355,4 +355,6 @@
     LOGICAL, SAVE :: ok_volcan ! pour activer les diagnostics volcaniques
     !$OMP THREADPRIVATE(ok_volcan)
+    INTEGER, SAVE :: flag_volc_surfstrat ! pour imposer le cool/heat rate à la surf ou dans la strato 
+    !$OMP THREADPRIVATE(flag_volc_surfstrat)
     LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
     PARAMETER (ok_cvl=.TRUE.)
@@ -1259,7 +1261,6 @@
             fact_cldcon, facttemps,ok_newmicro,iflag_radia, &
             iflag_cld_th,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
-            ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, aerosol_couple, &
-            chemistry_couple, &
-            flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
+            ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat, aerosol_couple, &
+            chemistry_couple, flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
             flag_bc_internal_mixture, bl95_b0, bl95_b1, &
                                 ! nv flags pour la convection et les
@@ -1794,6 +1795,5 @@
 
        WRITE(lunout,*)"Clef pour la convection, iflag_con=", iflag_con
-       WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", &
-            ok_cvl
+       WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", ok_cvl
        !
        !KE43
@@ -1963,5 +1963,4 @@
        CALL bcast(dryaod_diag)
        CALL bcast(ok_4xCO2atm)
-       WRITE (lunout,*)'ok_4xCO2atm= ',swaero_diag, swaerofree_diag, dryaod_diag, ok_4xCO2atm
 #endif 
        !
@@ -4191,7 +4190,6 @@
                t_seri,q_seri,wo, &
                cldfrarad, cldemirad, cldtaurad, &
-               ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
-               flag_aerosol, &
-               flag_aerosol_strat, flag_aer_feedback, &
+               ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
+               flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
                tau_aero, piz_aero, cg_aero, &
                tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, & 
@@ -4266,7 +4264,6 @@
                      t_seri,q_seri,wo, &
                      cldfrarad, cldemirad, cldtaurad, &
-                     ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
-                     flag_aerosol, &
-                     flag_aerosol_strat, flag_aer_feedback, &
+                     ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
+                     flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
                      tau_aero, piz_aero, cg_aero, &
                      tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, &
Index: LMDZ6/trunk/libf/phylmd/radlwsw_m.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/radlwsw_m.F90	(revision 3988)
+++ LMDZ6/trunk/libf/phylmd/radlwsw_m.F90	(revision 3989)
@@ -16,5 +16,5 @@
    t,q,wo,&
    cldfra, cldemi, cldtaupd,&
-   ok_ade, ok_aie, ok_volcan, flag_aerosol,&
+   ok_ade, ok_aie, ok_volcan, flag_volc_surfstrat, flag_aerosol,&
    flag_aerosol_strat, flag_aer_feedback, &
    tau_aero, piz_aero, cg_aero,&
@@ -107,4 +107,5 @@
   ! ok_aie--- input-L- apply the Aerosol Indirect Effect or not?
   ! ok_volcan input-L- activate volcanic diags (SW heat & LW cool rate, SW & LW flux)
+  ! flag_volc_surfstrat input-I- activate volcanic surf cooling or strato heating (or nothing)
   ! flag_aerosol input-I- aerosol flag from 0 to 6
   ! flag_aerosol_strat input-I- use stratospheric aerosols flag (0, 1, 2)
@@ -210,4 +211,5 @@
   LOGICAL, INTENT(in)  :: ok_ade, ok_aie                                 ! switches whether to use aerosol direct (indirect) effects or not
   LOGICAL, INTENT(in)  :: ok_volcan                                      ! produce volcanic diags (SW/LW heat flux and rate)
+  INTEGER, INTENT(in)  :: flag_volc_surfstrat                            ! allow to impose volcanic cooling rate at surf or heating in strato
   LOGICAL              :: lldebug=.false.
   INTEGER, INTENT(in)  :: flag_aerosol                                   ! takes value 0 (no aerosol) or 1 to 6 (aerosols)
@@ -365,6 +367,7 @@
   REAL(KIND=8) ztopswaiaero(kdlon), zsolswaiaero(kdlon)     ! dito, indirect
 !--NL
-  REAL(KIND=8) zswadaero(kdlon,kflev+1)                       ! SW Aerosol direct forcing
-  REAL(KIND=8) zlwadaero(kdlon,kflev+1)                       ! LW Aerosol direct forcing
+  REAL(KIND=8) zswadaero(kdlon,kflev+1)                     ! SW Aerosol direct forcing
+  REAL(KIND=8) zlwadaero(kdlon,kflev+1)                     ! LW Aerosol direct forcing
+  REAL(KIND=8) volmip_solsw(kdlon)                          ! SW clear sky in the case of VOLMIP
 !-LW by CK
   REAL(KIND=8) ztoplwadaero(kdlon), zsollwadaero(kdlon)     ! LW Aerosol direct forcing at TOAand surface
@@ -948,4 +951,5 @@
          ZTOPLWAIAERO,ZSOLLWAIAERO, &
          ZLWADAERO, & !--NL
+         volmip_solsw, flag_volc_surfstrat, & !--VOLMIP
          ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat, flag_aer_feedback) ! flags aerosols
 
@@ -1094,4 +1098,11 @@
       ENDDO
 !     print*,'OK2'
+
+!--add VOLMIP (surf cool or strat heat activate)
+      IF (flag_volc_surfstrat > 0) THEN
+         DO i = 1, kdlon
+            zsolsw(i)    = volmip_solsw(i)*fract(i)
+         ENDDO
+      ENDIF
 
 ! extrait de SW_AR4
Index: LMDZ6/trunk/libf/phylmd/rrtm/recmwf_aero.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/rrtm/recmwf_aero.F90	(revision 3988)
+++ LMDZ6/trunk/libf/phylmd/rrtm/recmwf_aero.F90	(revision 3989)
@@ -36,4 +36,6 @@
  & PTOPLWAIAERO,PSOLLWAIAERO,&
  & PLWADAERO,& !--NL
+!--ajout volmip 
+ & volmip_solsw, flag_volc_surfstrat,&
 !..end
  & ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat,&
@@ -259,4 +261,7 @@
 REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFLCCDN(KPROMA,KLEV+1) ! LW clear sky clean (no aerosol) flux down
 REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFLCCUP(KPROMA,KLEV+1) ! LW clear sky clean (no aerosol) flux up
+!--ajout VOLMIP
+REAL(KIND=JPRB)   ,INTENT(OUT)   :: volmip_solsw(KPROMA) ! SW clear sky in the case of VOLMIP
+INTEGER, INTENT(IN)              :: flag_volc_surfstrat !--VOlMIP Modif
 
 !     ==== COMPUTED IN RADITE ===
@@ -795,4 +800,25 @@
 ENDIF
 
+!--VolMIP Strat/Surf
+!--only ok_ade + ok_aie case treated
+IF (ok_ade.AND.ok_aie.AND.ok_volcan) THEN
+   !--in this case the fluxes used for the heating rates come from case 4 but SW surface radiation is kept from case 2
+   IF (flag_volc_surfstrat.EQ.2) THEN ! STRAT HEATING
+      volmip_solsw(:)= ZFSDN_AERO(:,1,2)-ZFSUP_AERO(:,1,2)
+   ELSEIF (flag_volc_surfstrat.EQ.1) THEN ! SURF COOLING
+      !--in this case the fluxes used for the heating rates come from case 2 but SW surface radiation is kept from case 4
+      PFSUP(:,:) =    ZFSUP_AERO(:,:,2)
+      PFSDN(:,:) =    ZFSDN_AERO(:,:,2)
+      PFSCUP(:,:) =   ZFSUP0_AERO(:,:,2)
+      PFSCDN(:,:) =   ZFSDN0_AERO(:,:,2)
+      PFLUX(:,1,:) =  LWUP_AERO(:,:,2)
+      PFLUX(:,2,:) =  LWDN_AERO(:,:,2)
+      PFLUC(:,1,:) =  LWDN0_AERO(:,:,2) 
+      PFLUC(:,2,:) =  LWDN0_AERO(:,:,2)
+      volmip_solsw(:)= ZFSDN_AERO(:,1,4)-ZFSUP_AERO(:,1,4)
+   ENDIF
+ENDIF
+!--End VolMIP Strat/Surf
+
 IF (swaerofree_diag) THEN
 ! copy shortwave clear-sky clean (no aerosol) case
Index: LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90	(revision 3988)
+++ LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90	(revision 3989)
@@ -426,4 +426,6 @@
     LOGICAL, SAVE :: ok_volcan ! pour activer les diagnostics volcaniques
     !$OMP THREADPRIVATE(ok_volcan)
+    INTEGER, SAVE :: flag_volc_surfstrat ! pour imposer le cool/heat rate à la surf/strato
+    !$OMP THREADPRIVATE(flag_volc_surfstrat)
     LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
     PARAMETER (ok_cvl=.TRUE.)
@@ -1361,7 +1363,6 @@
             fact_cldcon, facttemps,ok_newmicro,iflag_radia, &
             iflag_cld_th,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
-            ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, aerosol_couple, &
-            chemistry_couple, &
-            flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
+            ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat, aerosol_couple, &
+            chemistry_couple, flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
             flag_bc_internal_mixture, bl95_b0, bl95_b1, &
                                 ! nv flags pour la convection et les
@@ -5454,7 +5455,6 @@
                t_seri,q_seri,wo, &
                cldfrarad, cldemirad, cldtaurad, &
-               ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
-               flag_aerosol, &
-               flag_aerosol_strat, flag_aer_feedback, &
+               ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
+               flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
                tau_aero, piz_aero, cg_aero, &
                tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, & 
@@ -5541,7 +5541,6 @@
                      t_seri,q_seri,wo, &
                      cldfrarad, cldemirad, cldtaurad, &
-                     ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
-                     flag_aerosol, &
-                     flag_aerosol_strat, flag_aer_feedback, &
+                     ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
+                     flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
                      tau_aero, piz_aero, cg_aero, &
                      tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, &
