Test IPSLCM6.0.14 RRTM with CMIP6 volcanic forcings
Model installation
- Start to import modIPSL: svn co http://forge.ipsl.jussieu.fr/igcmg/svn/modipsl/trunk modipsl
- Install the model: cd modipsl/util ; ./model IPSLCM6.0.14-LR
- Add in code some diagnostics: procedure is describded here.
- 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_aer | PerLen? | PackFq? | Physic | Restart | RRTM | Out | Volc forcing | Results | Comment |
CM6010.TOPSW.pdCTL* | 1049 | 2 | 1M | 5Y | NPv6.0.10 | CM6010.SnwCnd?-LR-pdctrl-04 | Yes | DEVT | CMIP6 histAVE | - | |
CM6010.TOPSW* | 1049 | 2 | 1M | 1Y | NPv6.0.10 | CM6010.SnwCnd?-LR-pdctrl-04 | Yes | TEST | CMIP6 | - |
Members restart infos
Member nb | restart 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 |