Changeset 5912
- Timestamp:
- Dec 4, 2025, 3:16:33 PM (111 minutes ago)
- Location:
- LMDZ6/trunk/libf
- Files:
-
- 5 edited
-
phylmd/lmdz_blowing_snow_ini.f90 (modified) (2 diffs)
-
phylmd/lmdz_blowing_snow_sublim_sedim.f90 (modified) (11 diffs)
-
phylmd/lmdz_call_blowing_snow.f90 (modified) (3 diffs)
-
phylmd/physiq_mod.F90 (modified) (1 diff)
-
phylmdiso/physiq_mod.F90 (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lmdz_blowing_snow_ini.f90
r5612 r5912 70 70 CALL getin_p('fallv_bs',fallv_bs) 71 71 72 coef_sub_bs = 0. 172 coef_sub_bs = 0.01 73 73 CALL getin_p('coef_sub_bs',coef_sub_bs) 74 74 … … 79 79 CALL getin_p('iflag_sedim_bs',iflag_sedim_bs) 80 80 81 r_bs= 150.0e-681 r_bs=50.0e-6 82 82 CALL getin_p('r_bs',r_bs) 83 83 -
LMDZ6/trunk/libf/phylmd/lmdz_blowing_snow_sublim_sedim.f90
r5268 r5912 2 2 3 3 contains 4 subroutine blowing_snow_sublim_sedim(ngrid,nlay,dtime,temp,qv,qb,pplay,paprs,dtemp_bs,dqv_bs,dqb_bs,bsfl,precip_bs) 4 5 !============================================================================== 6 subroutine blowing_snow_sublim_sedim(ngrid,nlay,dtime,ustar,temp,qv,qb,pplay,paprs,dtemp_bs,dqv_bs,dqb_bs,bsfl,precip_bs) 5 7 6 8 !============================================================================== 7 ! Routine that calculates the evaporation and sedimentation of blowing snow 8 ! inspired by what is done in lscp_mod 9 ! Routine that calculates the sublimation, melting and sedimentation 10 ! of blowing snow 11 ! Reference: Vignon et al 2025, GMD, https://doi.org/10.5194/egusphere-2025-2871 12 ! 9 13 ! Etienne Vignon, October 2022 10 14 !============================================================================== … … 12 16 13 17 use lmdz_blowing_snow_ini, only : iflag_sublim_bs, iflag_sedim_bs, coef_sub_bs,RTT,RD,RG,fallv_bs 14 use lmdz_blowing_snow_ini, only : qbmin, RCPD, RLSTT, RLMLT, RLVTT, RVTMP2, RV, RPI, tbsmelt, taumeltbs0, rhobs, r_bs 18 use lmdz_blowing_snow_ini, only : qbmin, RCPD, RLSTT, RLMLT, RLVTT, RVTMP2, RV, RPI 19 use lmdz_blowing_snow_ini, only : tbsmelt, taumeltbs0, rhobs, r_bs 15 20 USE lmdz_lscp_tools, only : calc_qsat_ecmwf 16 21 … … 25 30 !===== 26 31 27 integer, intent(in) :: ngrid,nlay 28 real, intent(in) :: dtime 29 real, intent(in), dimension(ngrid,nlay) :: temp 30 real, intent(in), dimension(ngrid,nlay) :: qv 31 real, intent(in), dimension(ngrid,nlay) :: qb 32 real, intent(in), dimension(ngrid,nlay) :: pplay 33 real, intent(in), dimension(ngrid,nlay+1) :: paprs 32 integer, intent(in) :: ngrid ! number of horizontal grid points 33 integer, intent(in) :: nlay ! number of vertical layers 34 real, intent(in) :: dtime ! physics time step [s] 35 real, intent(in), dimension(ngrid) :: ustar ! surface friction velocity [m/s] 36 real, intent(in), dimension(ngrid,nlay) :: temp ! temperature of the air [K] 37 real, intent(in), dimension(ngrid,nlay) :: qv ! specific content of water [kg/kg] 38 real, intent(in), dimension(ngrid,nlay) :: qb ! specific content of blowing snow [kg/kg] 39 real, intent(in), dimension(ngrid,nlay) :: pplay ! pressure at the middle of layers [Pa] 40 real, intent(in), dimension(ngrid,nlay+1) :: paprs ! pressure at the layer bottom interface [Pa] 34 41 35 42 … … 39 46 40 47 41 real, intent(out), dimension(ngrid,nlay) :: dtemp_bs 42 real, intent(out), dimension(ngrid,nlay) :: dqv_bs 43 real, intent(out), dimension(ngrid,nlay) :: dqb_bs 44 real, intent(out), dimension(ngrid,nlay+1) :: bsfl 45 real, intent(out), dimension(ngrid) :: precip_bs 46 48 real, intent(out), dimension(ngrid,nlay) :: dtemp_bs ! temperature tendency [K/s] 49 real, intent(out), dimension(ngrid,nlay) :: dqv_bs ! water vapor tendency [kg/kg/s] 50 real, intent(out), dimension(ngrid,nlay) :: dqb_bs ! blowing snow mass tendancy [kg/kg/s] 51 real, intent(out), dimension(ngrid,nlay+1) :: bsfl ! vertical profile of blowing snow vertical flux [kg/m2/s] 52 real, intent(out), dimension(ngrid) :: precip_bs ! surface sedimentation flux of blowing snow [kg/s/m2] 47 53 48 54 ! LOCAL … … 55 61 real :: maxdqvmelt, rhoair, dz, dqbsedim 56 62 real :: delta_p, b_p, a_p, c_p, c_sub, qvsub 57 real :: p0, T0, Dv, Aprime, Bprime, Ka 63 real :: p0, T0, Dv, Aprime, Bprime, Ka, radius0, radius 58 64 real, dimension(ngrid) :: ztemp,zqv,zqb,zpres,qsi,dqsi,qsl,dqsl,qzero,sedim 59 65 real, dimension(ngrid) :: zpaprsup, zpaprsdn, ztemp_up, zqb_up, zvelo 60 real, dimension(ngrid,nlay) :: temp_seri, qb_seri, qv_seri 66 real, dimension(ngrid,nlay) :: temp_seri, qb_seri, qv_seri, zz 61 67 62 68 !++++++++++++++++++++++++++++++++++++++++++++++++++ … … 72 78 precip_bs(:)=0. 73 79 bsfl(:,:)=0. 80 zz(:,:)=0. 74 81 75 82 … … 82 89 qv_seri(i,k)=qv(i,k) 83 90 qb_seri(i,k)=qb(i,k) 91 zz(i,k)=zz(i,k)+(paprs(i,k)-paprs(i,k+1)) / (pplay(i,k)/RD/temp(i,k)*RG) 84 92 ENDDO 85 93 ENDDO … … 175 183 zpaprsup(i)=paprs(i,k+1) 176 184 zpaprsdn(i)=paprs(i,k) 185 186 ! computation of blowing snow mean radius. Either constant value = r_bs if >0 187 ! or use of the height-dependent formulation from Sauter et al. 2013 and Saigger et al. 2024 188 IF (r_bs .GT. 0.) THEN 189 radius=r_bs 190 ELSE 191 radius0=0.5*(ustar(i)*(7.8e-6)/0.036+31.e-6) 192 radius=radius0*zz(i,k)**(-0.258) 193 ENDIF 194 177 195 ENDDO 178 196 … … 213 231 ! Sublimation formulation for ice crystals from Pruppacher & Klett, Rutledge & Hobbs 1983 214 232 ! assuming monodispered crystal distrib 215 ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*nc*8*r _bs/(Aprime+Bprime)216 ! assuming Mi=rhobs*4/3*pi*r _bs**3217 ! rhoair qb=nc*Mi -> nc=rhoairqb/Mi218 ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*6* rhoair*qb/(rhobs*pi*r_bs**2)/(Aprime+Bprime)233 ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*nc*8*radius/(Aprime+Bprime) 234 ! assuming Mi=rhobs*4/3*pi*radius**3 235 ! qb=nc*Mi -> nc=qb/Mi 236 ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*6*qb/(rhobs*pi*radius**2)/(Aprime+Bprime) 219 237 ! dqb/dt_sub=-c_sub(1-qv/qsi)*qb 220 ! c_sub=coef_sub_bs*6 *rhoair/(rhobs*pi*r_bs**2)/(Aprime+Bprime)238 ! c_sub=coef_sub_bs*6/(rhobs*pi*radius**2)/(Aprime+Bprime) 221 239 ! 222 240 ! Note the strong coupling between specific contents of water vapor and blowing snow during sublimation … … 228 246 IF (zqv(i) .LT. qsi(i)) THEN 229 247 rhoair=zpres(i)/ztemp(i)/RD 230 Dv=0.0001*0.211*(p0/zpres(i))*((ztemp(i)/RTT)**1.94) ! water vapor diffusivity in air, SI248 Dv=0.0001*0.211*(p0/zpres(i))*((ztemp(i)/RTT)**1.94) ! water vapor diffusivity in air, SI 231 249 Ka=(5.69+0.017*(ztemp(i)-RTT))*1.e-5*100.*4.184 ! thermal conductivity of the air, SI 232 250 Aprime=RLSTT/Ka/ztemp(i)*(RLSTT/RV/ztemp(i) -1.) 233 251 Bprime=1./(rhoair*Dv*qsi(i)) 234 c_sub=coef_sub_bs* 6.*rhoair/(rhobs*RPI*r_bs**2)/(Aprime+Bprime)252 c_sub=coef_sub_bs*3./(rhobs*radius**2)/(Aprime+Bprime) 235 253 c_p=-zqb(i) 236 254 b_p=1.+c_sub*dtime-c_sub*dtime/qsi(i)*zqb(i)-c_sub*dtime/qsi(i)*zqv(i) … … 293 311 294 312 end subroutine blowing_snow_sublim_sedim 313 !============================================================================== 314 315 316 295 317 end module lmdz_blowing_snow_sublim_sedim -
LMDZ6/trunk/libf/phylmd/lmdz_call_blowing_snow.f90
r5841 r5912 4 4 contains 5 5 6 subroutine call_blowing_snow_sublim_sedim(ngrid,nlay,dtime, temp,q,qbs,pplay,paprs, &6 subroutine call_blowing_snow_sublim_sedim(ngrid,nlay,dtime,ustar,temp,q,qbs,pplay,paprs, & 7 7 dtemp_bs,dq_bs,dqbs_bs,bsfl,precip_bs) 8 8 … … 15 15 integer, intent(in) :: ngrid,nlay 16 16 real, intent(in) :: dtime 17 real, intent(in), dimension(ngrid) :: ustar 17 18 real, intent(in), dimension(ngrid,nlay) :: temp 18 19 real, intent(in), dimension(ngrid,nlay) :: q … … 35 36 36 37 37 call blowing_snow_sublim_sedim(ngrid,nlay,dtime, temp,q,qbs,pplay,paprs, &38 call blowing_snow_sublim_sedim(ngrid,nlay,dtime,ustar,temp,q,qbs,pplay,paprs, & 38 39 dtemp_bs,dq_bs,dqbs_bs,bsfl,precip_bs) 39 40 -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r5906 r5912 3106 3106 IF (ok_bs) THEN 3107 3107 3108 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep, t_seri,q_seri,qbs_seri,pplay,paprs, &3108 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,zustar,t_seri,q_seri,qbs_seri,pplay,paprs, & 3109 3109 d_t_bsss,d_q_bsss,d_qbs_bsss,bsfl,bs_fall) 3110 3110 -
LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
r5894 r5912 3619 3619 IF (ok_bs) THEN 3620 3620 3621 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep, t_seri,q_seri,qbs_seri,pplay,paprs, &3622 d_t_bsss,d_q_bsss,d_qbs_bsss,bsfl,bs_fall)3621 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,zustar,t_seri,q_seri,qbs_seri,pplay,paprs, & 3622 d_t_bsss,d_q_bsss,d_qbs_bsss,bsfl,bs_fall) 3623 3623 3624 3624 CALL add_phys_tend &
Note: See TracChangeset
for help on using the changeset viewer.
