Changeset 4293 for LMDZ6/trunk/libf
- Timestamp:
- Oct 4, 2022, 9:42:41 PM (2 years ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/StratAer/calcaerosolstrato_rrtm.F90
r3677 r4293 16 16 INCLUDE "clesphys.h" 17 17 INCLUDE "paramet.h" 18 INCLUDE "thermcell.h"19 18 INCLUDE "iniprint.h" 20 19 -
LMDZ6/trunk/libf/phylmd/StratAer/micphy_tstep.F90
r3677 r4293 7 7 USE dimphy, ONLY : klon,klev 8 8 USE aerophys 9 USE infotrac_phy 9 USE infotrac_phy, ONLY : nbtr_bin, nbtr_sulgas, nbtr, id_H2SO4_strat 10 10 USE phys_local_var_mod, ONLY: mdw, budg_3D_nucl, budg_3D_cond_evap, budg_h2so4_to_part, R2SO4, DENSO4, f_r_wet 11 11 USE nucleation_tstep_mod … … 47 47 REAL ASO4(nbtr_bin) 48 48 REAL DNDR(nbtr_bin) 49 REAL H2SO4_sat (nbtr_bin)49 REAL H2SO4_sat 50 50 51 51 DO it=1,nbtr_bin … … 107 107 & ACTSO4(ilon,ilev),R2SO4(ilon,ilev),DENSO4(ilon,ilev),f_r_wet(ilon,ilev), & 108 108 & RRSI,Vbin,FL,ASO4,DNDR) 109 ! Compute H2SO4 saturate vapor for big particules 110 H2SO4_sat = DNDR(nbtr_bin)/(pplay(ilon,ilev)/t_seri(ilon,ilev)/RD/1.E6/mH2SO4mol) 109 111 ! consider only condensation (positive FL) 110 112 DO it=1,nbtr_bin … … 117 119 ENDDO 118 120 ! determine appropriate time step 119 dt=(H2SO4_init-H2SO4_sat (nbtr_bin))/float(nbtstep)/MAX(1.e-30, nucl_rate+cond_evap_rate) !cond_evap_rate pos. for cond. and neg. for evap.121 dt=(H2SO4_init-H2SO4_sat)/float(nbtstep)/MAX(1.e-30, nucl_rate+cond_evap_rate) !cond_evap_rate pos. for cond. and neg. for evap. 120 122 IF (dt.LT.0.0) THEN 121 123 dt=PDT -
LMDZ6/trunk/libf/phylmd/StratAer/nucleation_tstep_mod.F90
r3690 r4293 604 604 na_n=x_n*ntot_n 605 605 IF (na_n .LT. 1.) THEN 606 print *, 'Warning: number of acid molecules < 1 in nucleation regime, setting na_n=1'606 ! print *, 'Warning: number of acid molecules < 1 in nucleation regime, setting na_n=1' 607 607 na_n=1.0 608 608 ENDIF -
LMDZ6/trunk/libf/phylmd/StratAer/strataer_mod.F90
r3930 r4293 79 79 !Config Help = Used in physiq.F 80 80 ! 81 flag_sulf_emit = 0 81 flag_sulf_emit = 0 ! Background (default) 82 flag_sulf_emit_distrib = 0 ! Gaussian (default) 82 83 nErupt = 0 ! eruption number 83 84 injdur = 0 ! init injection duration … … 87 88 CALL getin_p('nErupt',nErupt) 88 89 CALL getin_p('injdur',injdur) 90 CALL getin_p('flag_sulf_emit_distrib',flag_sulf_emit_distrib) 91 92 year_emit_vol=0 ; mth_emit_vol=0 ; day_emit_vol=0 93 m_aer_emiss_vol=0. ; altemiss_vol=0. ; sigma_alt_vol=0. 94 xlon_min_vol=0. ; xlon_max_vol=0. 95 xlat_min_vol=0. ; xlat_max_vol=0. 96 97 IF (nErupt.GT.0) THEN 98 ALLOCATE(year_emit_vol(nErupt),mth_emit_vol(nErupt),day_emit_vol(nErupt)) 99 ALLOCATE(m_aer_emiss_vol(nErupt),altemiss_vol(nErupt),sigma_alt_vol(nErupt)) 100 ALLOCATE(xlat_min_vol(nErupt),xlon_min_vol(nErupt)) 101 ALLOCATE(xlat_max_vol(nErupt),xlon_max_vol(nErupt)) 102 ELSE 103 WRITE(lunout,*) 'ERROR : Using flag_sulf_emit=1 (ie Volcanic eruption) but nErupt (',nErupt,') <=0 !' 104 CALL abort_physic('strataer_mod','No eruption define in physiq_def (nErupt=0). Add one or use background condition.',1) 105 ENDIF 106 107 CALL getin_p('year_emit_vol',year_emit_vol) 108 CALL getin_p('mth_emit_vol',mth_emit_vol) 109 CALL getin_p('day_emit_vol',day_emit_vol) 110 CALL getin_p('m_aer_emiss_vol',m_aer_emiss_vol) 111 CALL getin_p('altemiss_vol',altemiss_vol) 112 CALL getin_p('sigma_alt_vol',sigma_alt_vol) 113 CALL getin_p('xlon_min_vol',xlon_min_vol) 114 CALL getin_p('xlon_max_vol',xlon_max_vol) 115 CALL getin_p('xlat_min_vol',xlat_min_vol) 116 CALL getin_p('xlat_max_vol',xlat_max_vol) 89 117 ELSEIF (flag_sulf_emit == 2) THEN ! SAI 90 118 CALL getin_p('m_aer_emiss_sai',m_aer_emiss_sai) … … 93 121 CALL getin_p('xlat_sai',xlat_sai) 94 122 CALL getin_p('xlon_sai',xlon_sai) 95 CALL getin_p('flag_sulf_emit_distrib',flag_sulf_emit_distrib)96 123 ELSEIF (flag_sulf_emit == 3) THEN ! SAI between latitudes 97 124 CALL getin_p('m_aer_emiss_sai',m_aer_emiss_sai) … … 101 128 CALL getin_p('xlat_max_sai',xlat_max_sai) 102 129 CALL getin_p('xlat_min_sai',xlat_min_sai) 103 CALL getin_p('flag_sulf_emit_distrib',flag_sulf_emit_distrib)104 130 ENDIF 105 131 106 ALLOCATE(year_emit_vol(nErupt),mth_emit_vol(nErupt),day_emit_vol(nErupt))107 ALLOCATE(m_aer_emiss_vol(nErupt),altemiss_vol(nErupt),sigma_alt_vol(nErupt))108 ALLOCATE(xlat_min_vol(nErupt),xlon_min_vol(nErupt))109 ALLOCATE(xlat_max_vol(nErupt),xlon_max_vol(nErupt))110 111 IF (nErupt.GT.0) THEN112 year_emit_vol=0 ; mth_emit_vol=0 ; day_emit_vol=0113 m_aer_emiss_vol=0. ; altemiss_vol=0. ; sigma_alt_vol=0.114 xlon_min_vol=0. ; xlon_max_vol=0.115 xlat_min_vol=0. ; xlat_max_vol=0.116 ENDIF117 118 CALL getin_p('year_emit_vol',year_emit_vol)119 CALL getin_p('mth_emit_vol',mth_emit_vol)120 CALL getin_p('day_emit_vol',day_emit_vol)121 CALL getin_p('m_aer_emiss_vol',m_aer_emiss_vol)122 CALL getin_p('altemiss_vol',altemiss_vol)123 CALL getin_p('sigma_alt_vol',sigma_alt_vol)124 CALL getin_p('xlon_min_vol',xlon_min_vol)125 CALL getin_p('xlon_max_vol',xlon_max_vol)126 CALL getin_p('xlat_min_vol',xlat_min_vol)127 CALL getin_p('xlat_max_vol',xlat_max_vol)128 132 !Config Key = flag_nuc_rate_box 129 133 !Config Desc = define or not a box for nucleation rate … … 136 140 ! 137 141 flag_nuc_rate_box = .FALSE. 142 nuclat_min=0 ; nuclat_max=0 143 nucpres_min=0 ; nucpres_max=0 144 138 145 CALL getin_p('flag_nuc_rate_box',flag_nuc_rate_box) 139 146 CALL getin_p('nuclat_min',nuclat_min) … … 153 160 WRITE(lunout,*) 'IN STRATAER : altemiss_vol',altemiss_vol 154 161 WRITE(lunout,*) 'IN STRATAER : sigma_alt_vol',sigma_alt_vol 155 WRITE(lunout,*) 'IN STRATAER : ponde_lonlat_vol',ponde_lonlat_vol156 162 WRITE(lunout,*) 'IN STRATAER : xlat_min_vol',xlat_min_vol 157 163 WRITE(lunout,*) 'IN STRATAER : xlat_max_vol',xlat_max_vol … … 164 170 WRITE(lunout,*) 'IN STRATAER : xlat_sai',xlat_sai 165 171 WRITE(lunout,*) 'IN STRATAER : xlon_sai',xlon_sai 166 WRITE(lunout,*) 'flag_sulf_emit_distrib = ',flag_sulf_emit_distrib167 172 ELSEIF (flag_sulf_emit == 3) THEN 168 173 WRITE(lunout,*) 'IN STRATAER : m_aer_emiss_sai',m_aer_emiss_sai … … 172 177 WRITE(lunout,*) 'IN STRATAER : xlat_max_sai',xlat_max_sai 173 178 WRITE(lunout,*) 'IN STRATAER : xlon_sai',xlon_sai 174 WRITE(lunout,*) 'flag_sulf_emit_distrib = ',flag_sulf_emit_distrib175 179 ENDIF 180 WRITE(lunout,*) 'flag_sulf_emit_distrib = ',flag_sulf_emit_distrib 176 181 WRITE(lunout,*) 'IN STRATAER : flag_nuc_rate_box = ',flag_nuc_rate_box 177 182 IF (flag_nuc_rate_box) THEN … … 181 186 !ENDIF 182 187 183 CALL strataer_ponde_init 184 WRITE(lunout,*) 'IN STRATAER INT2 END' 188 IF (flag_sulf_emit == 1) THEN 189 CALL strataer_ponde_init 190 WRITE(lunout,*) 'IN STRATAER INT2 END' 191 END IF 192 WRITE(lunout,*) 'IN STRATAER END' 185 193 186 194 END SUBROUTINE strataer_init -
LMDZ6/trunk/libf/phylmd/StratAer/traccoag_mod.F90
r3677 r4293 17 17 18 18 USE dimphy 19 USE infotrac_phy 19 USE infotrac_phy, ONLY : nbtr_bin, nbtr_sulgas, nbtr, id_SO2_strat 20 20 USE aerophys 21 21 USE geometry_mod, ONLY : cell_area, boundslat … … 23 23 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 24 24 USE mod_phys_lmdz_para, only: gather, scatter 25 USE phys_cal_mod 25 USE phys_cal_mod, ONLY : year_len, year_cur,mth_cur, day_cur, hour 26 26 USE sulfate_aer_mod 27 27 USE phys_local_var_mod, ONLY: stratomask … … 29 29 USE print_control_mod, ONLY: lunout 30 30 USE strataer_mod 31 USE phys_cal_mod, ONLY : year_len32 31 33 32 IMPLICIT NONE -
LMDZ6/trunk/libf/phylmd/infotrac_phy.F90
r4232 r4293 16 16 PUBLIC :: nqtot, nbtr, nqo, nqCO2, nqtottr !--- Main dimensions 17 17 PUBLIC :: conv_flg, pbl_flg !--- Convection & boundary layer activation keys 18 #ifdef CPP_StratAer 19 PUBLIC :: nbtr_bin, nbtr_sulgas !--- Number of aerosols bins and sulfur gases for StratAer model 20 PUBLIC :: id_OCS_strat, id_SO2_strat, id_H2SO4_strat, id_BIN01_strat, id_TEST_strat 21 #endif 18 22 19 23 !=== FOR ISOTOPES: General -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r4263 r4293 481 481 #ifdef CPP_StratAer 482 482 LOGICAL, PARAMETER :: debug_strataer=.FALSE. 483 CHARACTER(LEN=maxlen) :: unt 483 484 #endif 484 485 REAL,DIMENSION(klon,klev) :: z, dz -
LMDZ6/trunk/libf/phylmd/phytrac_mod.F90
r4170 r4293 707 707 !--with the full array tr_seri even if only item it is processed 708 708 709 print*,'CV SCAV ',it,ccntrAA(it),ccntrENV(it)710 711 709 CALL cvltr_scav(pdtphys, da, phi,phi2,d1a,dam, mp,ep, & 712 710 sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm, &
Note: See TracChangeset
for help on using the changeset viewer.