wiki:model/IPSLCM6.0.14

Test IPSLCM6.0.14 RRTM with CMIP6 volcanic forcings

Model installation

  1. Start to import modIPSL: svn co http://forge.ipsl.jussieu.fr/igcmg/svn/modipsl/trunk modipsl
  2. Install the model: cd modipsl/util ; ./model IPSLCM6.0.14-LR
  3. Add in code some diagnostics: procedure is describded here.
  4. Compile: cd modipsl/config/LMDZOR ; gmake IPSLCM6-LR

NOTE: file_def_XXX.xml are taken from the model and not in PARAM subdir in default config. Change directory in lmdz.card.

CODE ADD

In phylmd/phys_output_ctrlout_mod.F90:

  TYPE(ctrl_out), SAVE :: o_tausumaero_lw = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), &
    'od_10um_STRAT', 'Stratospheric Aerosol Optical depth at 10 um ', '1', (/ ('', i=1, 10) /))
!
!NL
  TYPE(ctrl_out), SAVE :: o_tau_aer_stratoo = ctrl_out((/ 2, 6, 10, 10, 10, 10,11, 11, 11, 11 /), &
    'TAU_AER_STRAT', 'Stratospheric Aerosol', '1', (/ ('', i=1, 10) /))
!NL
  TYPE(ctrl_out), SAVE :: o_od443aer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), &
    'od443aer', 'Total aerosol optical depth at 440nm', '-', (/ ('', i=1, 10) /))

In phylmd/phys_local_var_mod.F90:

##l.140
      REAL, SAVE, ALLOCATABLE :: stratomask(:,:)
      !$OMP THREADPRIVATE(stratomask)
!NL
      REAL, SAVE, ALLOCATABLE, dimension(:,:) :: tau_aer_stratoo
      !$OMP THREADPRIVATE(tau_aer_stratoo)
!NL
      REAL, SAVE, ALLOCATABLE :: tausum_aero(:,:,:)

#l.560
      ALLOCATE(stratomask(klon,klev))
!NL
      allocate(tau_aer_stratoo(klon,klev))
!NL
      ALLOCATE(tausum_aero(klon,nwave,naero_tot))

#l.823
      DEALLOCATE(stratomask)
!NL
      deallocate(tau_aer_stratoo)
!NL
      DEALLOCATE(tausum_aero)

In phylmd/phys_output_write_mod.F90:

#l.112
         o_loaddust, o_loadno3, o_tausumaero, &
!NL
         o_drytausumaero, o_tausumaero_lw, o_tau_aer_stratoo, &
!         o_drytausumaero, o_tausumaero_lw, &
!NL
         o_topswad, o_topswad0, o_solswad, o_solswad0, &

#l.255
         concoa, concbc, concss, concdust, loadso4, &
!NL
         loadoa, loadbc, loadss, loaddust, loadno3, tausum_aero, drytausum_aero, tau_aer_stratoo, &
!         loadoa, loadbc, loadss, loaddust, loadno3, tausum_aero, drytausum_aero, &
!NL
         topswad_aero, topswad0_aero, solswad_aero, &

#l.1201
          IF (flag_aerosol_strat.GT.0) THEN
             CALL histwrite_phy(o_tausumaero_lw,tausum_aero(:,6,id_STRAT_phy))
!NL
             print *,'phys_output_write_mod: tau_aer_stratoo((klon-10):klon,(klev-10):klev)=', tau_aer_stratoo((klon-10):klon,(klev-10):klev)
             CALL histwrite_phy(o_tau_aer_stratoo, tau_aer_stratoo(:,:) )
!NL
          ENDIF
       ENDIF

In phylmd/rrtm/aeropt_6bands_rrtm.F90:

#l.793
                                (tau_allaer(i,k,2,inu)*piz_allaer(i,k,2,inu))
          cg_allaer(i,k,2,inu)=MIN(MAX(cg_allaer(i,k,2,inu),0.0),1.0)

! NL VOLC
!--natural aerosol
! (same as upper but no volc aer in strat)
         tau_allaer(i,k,1,inu)=tau_ae(i,k,id_ASSO4M_phy,inu)+tau_ae(i,k,id_CSSO4M_phy,inu)+ &
                               tau_ae(i,k,id_ASBCM_phy,inu)+tau_ae(i,k,id_AIBCM_phy,inu)+   &
                               tau_ae(i,k,id_ASPOMM_phy,inu)+tau_ae(i,k,id_AIPOMM_phy,inu)+ &
                               tau_ae(i,k,id_ASSSM_phy,inu)+tau_ae(i,k,id_CSSSM_phy,inu)+   &
                               tau_ae(i,k,id_SSSSM_phy,inu)+tau_ae(i,k,id_CIDUSTM_phy,inu)
          tau_allaer(i,k,1,inu)=MAX(tau_allaer(i,k,1,inu),tau_min)

         piz_allaer(i,k,1,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+   &
                                tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+   &
                                tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)+     &
                                tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+     &
                                tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+   &
                                tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+   &
                                tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+     &
                                tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+     &
                                tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+     &
                                tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) &
                                 /tau_allaer(i,k,1,inu)
          piz_allaer(i,k,1,inu)=MIN(MAX(piz_allaer(i,k,1,inu),0.01),1.0)
          IF (tau_allaer(i,k,1,inu).LE.tau_min) piz_allaer(i,k,1,inu)=1.0

         cg_allaer(i,k,1,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+ &
                               tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+ &
                               tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)*cg_ae(i,k,id_ASBCM_phy,inu)+    &
                               tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+    &
                               tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+ &
                               tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+ &
                               tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+    &
                               tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+    &
                               tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+    &
                               tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*cg_ae(i,k,id_CIDUSTM_phy,inu))/ &
                                (tau_allaer(i,k,1,inu)*piz_allaer(i,k,1,inu))
          cg_allaer(i,k,1,inu)=MIN(MAX(cg_allaer(i,k,1,inu),0.0),1.0)

!--ASBCM aerosols take _pi value because of internal mixture option
!         tau_allaer(i,k,1,inu)=tau_ae_pi(i,k,id_ASSO4M_phy,inu)+tau_ae_pi(i,k,id_CSSO4M_phy,inu)+ &
!                               tau_ae_pi(i,k,id_ASBCM_phy,inu)+tau_ae_pi(i,k,id_AIBCM_phy,inu)+   &
!                               tau_ae_pi(i,k,id_ASPOMM_phy,inu)+tau_ae_pi(i,k,id_AIPOMM_phy,inu)+ &
!                               tau_ae_pi(i,k,id_ASSSM_phy,inu)+tau_ae_pi(i,k,id_CSSSM_phy,inu)+   &
!                               tau_ae_pi(i,k,id_SSSSM_phy,inu)+tau_ae_pi(i,k,id_CIDUSTM_phy,inu)
!         tau_allaer(i,k,1,inu)=MAX(tau_allaer(i,k,1,inu),tau_min)

!         piz_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+   &
!                                tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+   &
!                                tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae_pi(i,k,id_ASBCM_phy,inu)+  &
!                                tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+     &
!                                tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+   &
!                                tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+   &
!                                tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+     &
!                                tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+     &
!                                tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+     &
!                                tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) &
!                                /tau_allaer(i,k,1,inu)
!         piz_allaer(i,k,1,inu)=MIN(MAX(piz_allaer(i,k,1,inu),0.01),1.0)
!         IF (tau_allaer(i,k,1,inu).LE.tau_min) piz_allaer(i,k,1,inu)=1.0

!         cg_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+    &
!                               tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+    &
!                               tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae_pi(i,k,id_ASBCM_phy,inu)*cg_ae_pi(i,k,id_ASBCM_phy,inu)+ &
!                               tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+       &
!                               tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+    &
!                               tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+    &
!                               tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+       &
!                               tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+       &
!                               tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+       &
!                               tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*cg_ae(i,k,id_CIDUSTM_phy,inu))/ &
!                               (tau_allaer(i,k,1,inu)*piz_allaer(i,k,1,inu))
!         cg_allaer(i,k,1,inu)=MIN(MAX(cg_allaer(i,k,1,inu),0.0),1.0)
! NL VOLC END

         ENDDO
       ENDDO
     ENDDO

In phylmd/rrtm/readaerosolstrato2_rrtm.F90:

#l.285
         DO wave=1, nwave_sw
           tausum_aero(i,wave,id_STRAT_phy)=tausum_aero(i,wave,id_STRAT_phy)+tau_aer_strat(i,k,band)
         ENDDO
      ENDIF
     ENDDO
     ENDDO

!MK
    DO i=1, klon
       DO k=1, klev
          IF (stratomask(i,k).LT.0.999999) THEN !comment
             tau_aer_strat(i,k,band)=1.e-15 !comment
          ENDIF !comment
          tau_aer_stratoo(i,k)=tau_aer_strat(i,k,band)
       ENDDO
    ENDDO
    print *,'readaerosolstrato2_rrtm: tau_aer_stratoo(',klon,',',klev,')=', tau_aer_stratoo(klon,klev)

!    tau_aer_stratoo(:,:,:) = tau_aer_strat(:,:,:)
!MK

 !--weighted average for cg, piz and tau, adding strat aerosols on top of tropospheric ones
     DO band=1, NSW
       WHERE (stratomask.GT.0.999999)

#l.312
                                     MAX( tau_aero_sw_rrtm(:,:,2,band) + tau_aer_strat(:,:,band), 1.e-15 )
         tau_aero_sw_rrtm(:,:,2,band)  = tau_aero_sw_rrtm(:,:,2,band) + tau_aer_strat(:,:,band)
 !--natural aerosols bands 1 to NSW
! NL VOLC
!        cg_aero_sw_rrtm(:,:,1,band)  = ( cg_aero_sw_rrtm(:,:,1,band)*piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) + &
!                                         cg_aer_strat(:,:,band)*piz_aer_strat(:,:,band)*tau_aer_strat(:,:,band) ) /              &
!                                    MAX( piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) +                             &
!                                         piz_aer_strat(:,:,band)*tau_aer_strat(:,:,band), 1.e-15 )
!        piz_aero_sw_rrtm(:,:,1,band) = ( piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) +                             &
!                                         piz_aer_strat(:,:,band)*tau_aer_strat(:,:,band) ) /                                     &
!                                    MAX( tau_aero_sw_rrtm(:,:,1,band) + tau_aer_strat(:,:,band), 1.e-15 )
!        tau_aero_sw_rrtm(:,:,1,band)  = tau_aero_sw_rrtm(:,:,1,band) + tau_aer_strat(:,:,band)
 !--no stratospheric aerosol in index 1 for these tests
        cg_aero_sw_rrtm(:,:,1,band)  =  cg_aero_sw_rrtm(:,:,1,band)
        piz_aero_sw_rrtm(:,:,1,band)  = piz_aero_sw_rrtm(:,:,1,band)
        tau_aero_sw_rrtm(:,:,1,band)  = tau_aero_sw_rrtm(:,:,1,band)
! END NL VOLC
     ENDWHERE
     ENDDO

In DefLists/file_def_histmth_lmdz.xml:

<!-- l.455 -->
             <!-- VARS 3D -->
             <field_group operation="average" freq_op="1ts" axis_ref="presnivs">
<!--NL-->
               <field field_ref="stratomask" level="2" />
               <field field_ref="TAU_AER_STRAT" level="2" />
<!--NL-->
                 <field field_ref="cldtau" level="10" />
                 <field field_ref="cldemi" level="10" />
                 <field field_ref="tke_max" level="4" operation="maximum" />

In DefLists/field_def_lmdz.xml:

<!-- l.687 -->
        <field id="rsdcs4co2"    long_name="Downwelling CS SW 4xCO2 atmosphere"    unit="W/m2" />
        <field id="rldcs4co2"    long_name="Downwelling CS LW 4xCO2 atmosphere"    unit="W/m2" />
        <field id="stratomask"    long_name="Stratospheric fraction"    unit="-" />
<!--NL-->
        <field id="TAU_AER_STRAT"    long_name="Stratospheric Aerosol"    unit="-" />
<!--NL-->
     </field_group>

TESTS

All outputs were made with IPSLCM6.0.14, physic=NPv6.0.14. All simulations are with actuel type of atmosphere and restart is from 1989-12-31 of the reference pdControl simulation CM6010.SnwCnd?-LR-pdctrl-04. Anomalies are performed by substracting control run values (ie CM6014.TOPSW.pdCTL) in 1991-1992 period.

Name of simulations and Nomenclature:

  • CM6014.TOPSW*: CMIP6 forcing and double call to physic to get only volcanic contribution (topswad).
  • CM6010.TOPSW.pdCTL*: corresponds to CM6014.TOPSW with CMIP6 volcanic forcing historical average (tau*wstrat.2D.ave.nc).



Name #CPU flag_aerPerLen?PackFq?Physic Restart RRTMOut Volc forcing Results Comment
CM6010.TOPSW.pdCTL* 10492 1M 5YNPv6.0.10CM6010.SnwCnd?-LR-pdctrl-04Yes DEVTCMIP6 histAVE -
CM6010.TOPSW* 10492 1M 1YNPv6.0.10CM6010.SnwCnd?-LR-pdctrl-04Yes TESTCMIP6 -

Members restart infos

Member nbrestart simulation restart year
CM6010.SnwCnd?-LR-pdctrl-04 1989-12-31
2 CM6010.SnwCnd?-LR-pdctrl-04 1994-12-31
3 CM6010.SnwCnd?-LR-pdctrl-04 1999-12-31
4 CM6010.SnwCnd?-LR-pdctrl-04 2004-12-31
5 CM6010.SnwCnd?-LR-pdctrl-04 2009-12-31

CM6014.TOPSW

https://pagesperso.locean-ipsl.upmc.fr/nillod/img/IPSLCM6.0.14/Fig_topswad_CM6010.TOPSW3_vs_pdCTL_19910101_19951231.gif

https://pagesperso.locean-ipsl.upmc.fr/nillod/img/IPSLCM6.0.14/CM6010.TOPSW3_Tops0_zonAveAnomPair.gif

https://pagesperso.locean-ipsl.upmc.fr/nillod/img/IPSLCM6.0.14/Bil_rad_TOPSW3_vs-pdCTL.gif

https://pagesperso.locean-ipsl.upmc.fr/nillod/img/IPSLCM6.0.14/Fig_tsol_CM6010.TOPSW3_vspdCTL_19910101_19951231.gif

https://pagesperso.locean-ipsl.upmc.fr/nillod/img/IPSLCM6.0.14/TEMP_50mb_PinaTOPSW3_vs-CTL.gif

Last modified 6 years ago Last modified on 01/09/18 10:55:00