Changeset 2417 for trunk/LMDZ.MARS/libf
- Timestamp:
- Oct 16, 2020, 9:40:05 AM (5 years ago)
- Location:
- trunk/LMDZ.MARS/libf/phymars
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/phymars/aeropacity_mod.F
r2415 r2417 10 10 11 11 SUBROUTINE aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls, 12 & pq,tauscaling, tau_pref_scenario,tau_pref_gcm,12 & pq,tauscaling,dust_rad_adjust,tau_pref_scenario,tau_pref_gcm, 13 13 & tau,taucloudtes,aerosol,dsodust,reffrad, 14 14 & QREFvis3d,QREFir3d,omegaREFir3d, … … 36 36 & iaer_topdust_doubleq 37 37 use dust_param_mod, only: odpref, freedust 38 use dust_scaling_mod, only: compute_ tauscaling38 use dust_scaling_mod, only: compute_dustscaling 39 39 IMPLICIT NONE 40 40 c======================================================================= … … 105 105 ! topdust, false to compute RT in the topdust 106 106 REAL, INTENT(IN) :: alpha_hmons(ngrid) 107 REAL, INTENT(OUT) :: tauscaling(ngrid) ! Scaling factor for qdust and Ndust 107 REAL,INTENT(OUT) :: tauscaling(ngrid) ! Scaling factor for qdust and Ndust 108 REAL,INTENT(OUT) :: dust_rad_adjust(ngrid) ! Radiative adjustment 109 ! factor for dust 108 110 REAL,INTENT(IN) :: totcloudfrac(ngrid) ! total water ice cloud fraction 109 111 LOGICAL,INTENT(IN) :: clearsky ! true to compute RT without water ice clouds … … 720 722 721 723 ! 722 ! 3.1. Compute "tauscaling", the dust rescaling coefficient and adjust 723 ! aerosol() dust opacities accordingly 724 call compute_tauscaling(ngrid,nlayer,naerkind,naerdust,zday,pplev, 725 & tau_pref_scenario,tauscaling,aerosol) 724 ! 3.1. Compute "tauscaling" and "dust_rad_adjust", the dust rescaling 725 ! coefficients and adjust aerosol() dust opacities accordingly 726 call compute_dustscaling(ngrid,nlayer,naerkind,naerdust,zday,pplev 727 & ,tau_pref_scenario,tauscaling, 728 & dust_rad_adjust,aerosol) 726 729 727 730 ! 3.2. Recompute tau_pref_gcm, the reference dust opacity, based on dust tracer -
trunk/LMDZ.MARS/libf/phymars/callradite_mod.F
r2415 r2417 9 9 $ dtlw,dtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw, 10 10 $ fluxtop_sw,tau_pref_scenario,tau_pref_gcm, 11 & tau,aerosol,dsodust,tauscaling, 11 & tau,aerosol,dsodust,tauscaling,dust_rad_adjust, 12 12 $ taucloudtes,rdust,rice,nuice,co2ice,rstormdust,rtopdust, 13 13 $ totstormfract,clearatm,dsords,dsotop,alpha_hmons,nohmons, … … 177 177 REAL,INTENT(INOUT) :: tauscaling(ngrid) ! Conversion factor for 178 178 ! qdust and Ndust 179 REAL,INTENT(OUT) :: dust_rad_adjust(ngrid) ! Radiative adjustment 180 ! factor for dust 179 181 REAL,INTENT(IN) :: albedo(ngrid,2),emis(ngrid) 180 182 REAL,INTENT(IN) :: ls,zday … … 426 428 c Computing aerosol optical depth in each layer: 427 429 CALL aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls, 428 & pq,tauscaling, tau_pref_scenario,tau_pref_gcm,430 & pq,tauscaling,dust_rad_adjust,tau_pref_scenario,tau_pref_gcm, 429 431 & tau,taucloudtes,aerosol,dsodust,reffrad, 430 432 & QREFvis3d,QREFir3d,omegaREFir3d, -
trunk/LMDZ.MARS/libf/phymars/compute_dtau_mod.F90
r2415 r2417 5 5 REAL,SAVE :: ti_injection_sol ! time of beginning injection 6 6 REAL,SAVE :: tf_injection_sol ! time of end injection 7 REAL,PARAMETER :: t_scenario_sol=14/24. ! time of day at which8 ! tau_pref_scenario is deemed exact9 7 10 8 REAL,SAVE,ALLOCATABLE :: dtau(:) ! Dust opacity difference (at 610Pa) … … 22 20 USE tracer_mod, only: alpha_lift,igcm_dust_mass,igcm_dust_number 23 21 USE dimradmars_mod, only: tauvis 24 USE dust_param_mod, only: odpref 22 USE dust_param_mod, only: odpref, t_scenario_sol 25 23 26 24 IMPLICIT NONE -
trunk/LMDZ.MARS/libf/phymars/conf_phys.F
r2413 r2417 47 47 use dust_param_mod, only: dustbin, doubleq, submicron, active, 48 48 & lifting, freedust, callddevil, 49 & tauscaling_mode49 & dustscaling_mode 50 50 use aeropacity_mod, only: iddist, topdustref 51 51 IMPLICIT NONE … … 432 432 ! dust rescaling mode (if any) 433 433 if (freedust) then 434 tauscaling_mode=0434 dustscaling_mode=0 435 435 else 436 tauscaling_mode=1 ! GCMv5.3 style437 endif 438 call getin_p(" tauscaling_mode",tauscaling_mode)439 write(*,*) " tauscaling_mode=",tauscaling_mode436 dustscaling_mode=1 ! GCMv5.3 style 437 endif 438 call getin_p("dustscaling_mode",dustscaling_mode) 439 write(*,*) "dustscaling_mode=",dustscaling_mode 440 440 441 441 #ifndef MESOSCALE -
trunk/LMDZ.MARS/libf/phymars/dust_param_mod.F90
r2415 r2417 15 15 16 16 REAL,SAVE,ALLOCATABLE :: tauscaling(:) ! Convertion factor for qdust and Ndust 17 INTEGER,SAVE :: tauscaling_mode ! =0, no rescaling (freedust) 18 ! =1, prescribed scaling GCM5.3 style 17 INTEGER,SAVE :: dustscaling_mode ! dust scaling modes 18 ! =0, no rescaling (freedust) 19 ! =1, prescribed scaling GCM5.3 style (using tauscaling) 20 ! =2, only radiative scaling (using dust_rad_adjust) 21 REAL,SAVE,ALLOCATABLE :: dust_rad_adjust(:) ! radiative scaling for dust 22 REAL,PARAMETER :: t_scenario_sol=14/24. ! time of day (sol) at which 23 ! tau_pref_scenario is deemed exact 19 24 20 25 contains … … 25 30 26 31 allocate(tauscaling(ngrid)) 32 allocate(dust_rad_adjust(ngrid)) 27 33 28 34 end subroutine ini_dust_param_mod … … 32 38 33 39 if (allocated(tauscaling)) deallocate(tauscaling) 40 if (allocated(dust_rad_adjust)) deallocate(dust_rad_adjust) 34 41 35 42 end subroutine end_dust_param_mod -
trunk/LMDZ.MARS/libf/phymars/dust_scaling_mod.F90
r2415 r2417 5 5 contains 6 6 7 subroutine compute_tauscaling(ngrid,nlayer,naerkind,naerdust, & 8 zday,pplev, & 9 tau_pref_scenario,tauscaling,aerosol) 7 subroutine compute_dustscaling(ngrid,nlayer,naerkind,naerdust, & 8 zday,pplev, & 9 tau_pref_scenario,tauscaling, & 10 dust_rad_adjust,aerosol) 10 11 11 use dust_param_mod, only: tauscaling_mode, odpref 12 use dust_param_mod, only: dustscaling_mode, odpref 13 use dust_rad_adjust_mod, only: compute_dust_rad_adjust 12 14 use dimradmars_mod, only: iaerdust ! dust aerosol indexes 13 15 … … 23 25 ! opacity column at odpref reference pressure 24 26 real,intent(out) :: tauscaling(ngrid) ! dust scaling factor 27 real,intent(out) :: dust_rad_adjust(ngrid) ! Radiative adjustment 28 ! factor for dust 25 29 real,intent(inout) :: aerosol(ngrid,nlayer,naerkind) ! opacities 26 30 27 31 integer :: ig, l , iaer 28 32 real :: taudust(ngrid) 29 33 30 34 ! 1. compute/set tauscaling 31 35 32 if ( tauscaling_mode == 0) then33 ! simple "freedust" case, no rescaling, ever36 if (dustscaling_mode /= 1) then 37 ! simple "freedust" case, no effective rescaling using tauscaling, ever 34 38 tauscaling(:) = 1 35 39 endif 36 40 37 if (tauscaling_mode == 1) then 38 ! GCM v5.3 style: tauscaling is computed so that 39 ! aerosol() opacities correspond to the prescribed tau_pref_scenario() 40 41 ! 1. compute dust column opacity using aerosol() dusts 41 if (dustscaling_mode == 1) then 42 ! Compute dust column opacity using aerosol() dusts 42 43 taudust(:) = 0 43 44 do iaer=1,naerdust ! loop on all dust aerosols … … 48 49 enddo 49 50 enddo 50 51 ! 2. compute the scaling factor 52 tauscaling(:)=tau_pref_scenario(:)*pplev(:,1)/odpref/taudust(:) 53 endif ! of if (tauscaling_mode == 1) 54 55 ! 2. dust opacities rescaling 56 do iaer=1,naerdust 51 52 elseif (dustscaling_mode == 2) then 53 ! Compute dust column opacity using only background dust 54 taudust(:) = 0 57 55 do l=1,nlayer 58 56 do ig=1,ngrid 57 taudust(ig)=taudust(ig)+aerosol(ig,l,iaerdust(1)) 58 enddo 59 enddo 60 61 endif ! of if (dustscaling_mode == 1) elseif (dustscaling_mode == 2) 62 63 ! 2. compute the scaling factors (tauscaling or dust_rad_adjust) 64 if (dustscaling_mode==1) then 65 ! GCM v5.3 style: tauscaling is computed so that 66 ! aerosol() opacities correspond to the prescribed tau_pref_scenario() 67 tauscaling(:)=tau_pref_scenario(:)*pplev(:,1)/odpref/taudust(:) 68 elseif (dustscaling_mode==2) then 69 ! GCM v6 style, compute dust_rad_adjust 70 call compute_dust_rad_adjust(ngrid,nlayer,zday,pplev, & 71 taudust,dust_rad_adjust) 72 endif 73 74 ! 3. Apply dust aerosol opacities rescaling 75 if (dustscaling_mode <=1) then 76 do iaer=1,naerdust 77 do l=1,nlayer 78 do ig=1,ngrid 59 79 aerosol(ig,l,iaerdust(iaer)) = max(1E-20, & 60 80 aerosol(ig,l,iaerdust(iaer))* tauscaling(ig)) 81 enddo 61 82 enddo 62 83 enddo 63 enddo 64 65 end subroutine compute_tauscaling 84 else ! duscaling_mode==2, use dust_rad_adjust 85 do iaer=1,naerdust 86 do l=1,nlayer 87 do ig=1,ngrid 88 aerosol(ig,l,iaerdust(iaer)) = max(1E-20, & 89 aerosol(ig,l,iaerdust(iaer))*dust_rad_adjust(ig)) 90 enddo 91 enddo 92 enddo 93 endif 94 end subroutine compute_dustscaling 66 95 67 96 end module dust_scaling_mod -
trunk/LMDZ.MARS/libf/phymars/phyetat0_mod.F90
r2378 r2417 18 18 use nonoro_gwd_ran_mod, only: du_nonoro_gwd, dv_nonoro_gwd 19 19 use compute_dtau_mod, only: dtau 20 20 use dust_rad_adjust_mod, only: dust_rad_adjust_prev,dust_rad_adjust_next 21 use dust_param_mod, only: dustscaling_mode 21 22 USE ioipsl_getin_p_mod, ONLY : getin_p 22 23 … … 411 412 minval(tauscaling), maxval(tauscaling) 412 413 414 ! dust_rad_adjust_* for radiative rescaling of dust 415 if (dustscaling_mode==2) then 416 if (startphy_file) then 417 call get_field("dust_rad_adjust_prev",dust_rad_adjust_prev,found,indextime) 418 if (.not.found) then 419 write(*,*) "phyetat0: <dust_rad_adjust_prev> not in file; set to 1" 420 dust_rad_adjust_prev(:) = 1 421 endif 422 call get_field("dust_rad_adjust_next",dust_rad_adjust_next,found,indextime) 423 if (.not.found) then 424 write(*,*) "phyetat0: <dust_rad_adjust_next> not in file; set to 1" 425 dust_rad_adjust_next(:) = 1 426 endif 427 else 428 dust_rad_adjust_prev(:)= 0 429 dust_rad_adjust_next(:)= 0 430 endif ! if (startphy_file) 431 write(*,*) "phyetat0: radiative scaling coeff <dust_rad_adjust_prev> range:", & 432 minval(dust_rad_adjust_prev), maxval(dust_rad_adjust_prev) 433 write(*,*) "phyetat0: radiative scaling coeff <dust_rad_adjust_next> range:", & 434 minval(dust_rad_adjust_next), maxval(dust_rad_adjust_next) 435 endif ! of if (dustscaling_mode==2) 413 436 414 437 ! dtau: opacity difference between GCM and dust scenario -
trunk/LMDZ.MARS/libf/phymars/phyredem.F90
r2312 r2417 157 157 use nonoro_gwd_ran_mod, only: du_nonoro_gwd, dv_nonoro_gwd 158 158 use compute_dtau_mod, only: dtau 159 use dust_rad_adjust_mod, only: dust_rad_adjust_prev,dust_rad_adjust_next 160 use dust_param_mod, only: dustscaling_mode 159 161 160 162 implicit none … … 229 231 call put_field("tauscaling","dust conversion factor",tauscaling,time) 230 232 233 ! Radiative scaling coefficients 234 if (dustscaling_mode==2) then 235 call put_field("dust_rad_adjust_prev", & 236 "radiative dust adjustement factor prev. sol", & 237 dust_rad_adjust_prev,time) 238 call put_field("dust_rad_adjust_next", & 239 "radiative dust adjustement factor next sol", & 240 dust_rad_adjust_next,time) 241 endif 242 231 243 if (dustinjection.gt.0) then 232 244 call put_field("dtau","dust opacity difference between GCM and scenario",& -
trunk/LMDZ.MARS/libf/phymars/phys_state_var_init_mod.F90
r2409 r2417 62 62 use dust_param_mod, only: ini_dust_param_mod, & 63 63 end_dust_param_mod 64 64 use dust_rad_adjust_mod, only: ini_dust_rad_adjust_mod, & 65 end_dust_rad_adjust_mod 65 66 IMPLICIT NONE 66 67 … … 161 162 call end_dust_param_mod 162 163 call ini_dust_param_mod(ngrid) 164 165 ! allocate arrays in "dust_rad_adjust_mod" 166 call end_dust_rad_adjust_mod 167 call ini_dust_rad_adjust_mod(ngrid) 163 168 164 169 END SUBROUTINE phys_state_var_init -
trunk/LMDZ.MARS/libf/phymars/physiq_mod.F
r2415 r2417 59 59 & iaer_stormdust_doubleq 60 60 use dust_param_mod, only: doubleq, lifting, callddevil, 61 & tauscaling, odpref, dustbin 61 & tauscaling, odpref, dustbin, 62 & dustscaling_mode, dust_rad_adjust 62 63 use turb_mod, only: q2, wstar, ustar, sensibFlux, 63 64 & zmax_th, hfmax_th, turb_resolved … … 931 932 & zdtlw,zdtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw, 932 933 & fluxtop_sw,tau_pref_scenario,tau_pref_gcm, 933 & tau,aerosol,dsodust,tauscaling, 934 & tau,aerosol,dsodust,tauscaling,dust_rad_adjust, 934 935 & taucloudtes,rdust,rice,nuice,co2ice,rstormdust,rtopdust, 935 936 & totstormfract,clearatm,dsords,dsotop,alpha_hmons,nohmons, … … 948 949 & fluxsurf_swclf,fluxtop_lwclf,fluxtop_swclf, 949 950 & tau_pref_scenario,tau_pref_gcm, 950 & tau,aerosol,dsodust,tauscaling,taucloudtesclf,rdust, 951 & tau,aerosol,dsodust,tauscaling,dust_rad_adjust, 952 & taucloudtesclf,rdust, 951 953 & rice,nuice,co2ice,rstormdust,rtopdust,totstormfract, 952 954 & clearatm,dsords,dsotop,alpha_hmons,nohmons, … … 1137 1139 & clearatm,icount,zday,zls, 1138 1140 & tsurf,igout,totstormfract, 1139 & tauscaling, 1141 & tauscaling,dust_rad_adjust, 1140 1142 c input sub-grid scale cloud 1141 1143 & clearsky,totcloudfrac, … … 1204 1206 & zzlay,zdtsw,zdtlw, 1205 1207 & icount,zday,zls,tsurf,igout,aerosol, 1206 & tauscaling,totstormfract,clearatm, 1208 & tauscaling,dust_rad_adjust, 1209 & totstormfract,clearatm, 1207 1210 & clearsky,totcloudfrac, 1208 1211 & nohmons,hsummit, … … 2853 2856 call WRITEDIAGFI(ngrid,'lw_htrt','lw heat. rate', 2854 2857 & 'w.m-2',3,zdtlw) 2855 2858 call writediagfi(ngrid,"local_time","Local time", 2859 & 'sol',2,local_time) 2856 2860 if (.not.activice) then 2857 2861 CALL WRITEDIAGFI(ngrid,'tauTESap', … … 3232 3236 end select 3233 3237 endif ! (slpwind) 3238 3239 if (dustscaling_mode==2) then 3240 call writediagfi(ngrid,"dust_rad_adjust", 3241 & "radiative adjustment coefficient for dust", 3242 & "",2,dust_rad_adjust) 3243 endif 3234 3244 3235 3245 if (scavenging) then -
trunk/LMDZ.MARS/libf/phymars/rocketduststorm_mod.F90
r2415 r2417 24 24 clearatm,icount,zday,zls, & 25 25 tsurf,igout,totstormfract, & 26 tauscaling, 26 tauscaling,dust_rad_adjust, & 27 27 ! input sub-grid scale cloud 28 28 clearsky,totcloudfrac, & … … 77 77 REAL, INTENT(IN) :: totstormfract(ngrid) 78 78 REAL, INTENT(INOUT) :: tauscaling(ngrid) 79 REAL,INTENT(OUT) :: dust_rad_adjust(ngrid) 79 80 80 81 ! sbgrid scale water ice clouds … … 249 250 zdtlw1,zdtsw1,fluxsurf_lw1,fluxsurf_sw1,fluxtop_lw1, & 250 251 fluxtop_sw1,tau_pref_scenario,tau_pref_gcm, & 251 tau,aerosol,dsodust,tauscaling, &252 tau,aerosol,dsodust,tauscaling,dust_rad_adjust, & 252 253 taucloudtes,rdust,rice,nuice,co2ice,rstormdust,rtopdust, & 253 254 totstormfract,clearatm,dsords,dsotop,alpha_hmons,nohmons,& -
trunk/LMDZ.MARS/libf/phymars/topmons_mod.F90
r2415 r2417 24 24 ! input for radiative transfer 25 25 icount,zday,zls,tsurf,igout,aerosol, & 26 tauscaling, 26 tauscaling,dust_rad_adjust, & 27 27 ! input sub-grid scale rocket dust storm 28 28 totstormfract,clearatm, & … … 76 76 INTEGER, INTENT(IN) :: igout 77 77 REAL, INTENT(INOUT) :: tauscaling(ngrid) 78 REAL,INTENT(OUT) :: dust_rad_adjust(ngrid) 78 79 ! input sub-grid scale rocket dust storm 79 80 LOGICAL, INTENT(IN) :: clearatm … … 275 276 zdtlw1,zdtsw1,fluxsurf_lw1,fluxsurf_sw1,fluxtop_lw1, & 276 277 fluxtop_sw1,tau_pref_scenario,tau_pref_gcm, & 277 tau,aerosol,dsodust,tauscaling, &278 tau,aerosol,dsodust,tauscaling,dust_rad_adjust, & 278 279 taucloudtes,rdust,rice,nuice,co2ice,rstormdust,rtopdust, & 279 280 totstormfract,clearatm,dsords,dsotop,alpha_hmons,nohmons,&
Note: See TracChangeset
for help on using the changeset viewer.