Changeset 4916
- Timestamp:
- Apr 22, 2024, 9:06:52 PM (7 months ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lmdz_blowing_snow_sublim_sedim.F90
r4835 r4916 74 74 75 75 76 Ka=2.4e-2 ! thermal conductivity of the air, SI77 76 p0=101325.0 ! ref pressure 78 77 … … 229 228 IF (zqv(i) .LT. qsi(i)) THEN 230 229 rhoair=zpres(i)/ztemp(i)/RD 231 !diffusivity of water vapor232 230 Dv=0.0001*0.211*(p0/zpres(i))*((ztemp(i)/RTT)**1.94) ! water vapor diffusivity in air, SI 233 231 Ka=(5.69+0.017*(ztemp(i)-RTT))*1.e-5*100.*4.184 ! thermal conductivity of the air, SI … … 241 239 dqbsub=(-b_p+sqrt(delta_p))/(2.*a_p) - zqb(i) 242 240 dqbsub = MIN(0.0,MAX(dqbsub,-zqb(i))) 243 244 241 ! Sublimation limit: we ensure that the whole mesh does not exceed saturation wrt ice 245 242 maxdqbsub = MAX(0.0, qsi(i)-zqv(i)) -
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
r4881 r4916 1915 1915 ! For blowing snow: 1916 1916 IF (ok_bs) THEN 1917 ! following Bintanja et al 2000, part II 1917 ! following Bintanja et al 2000, part II and Vionnet V PhD thesis 1918 1918 ! we assume that the eddy diffsivity coefficient for 1919 ! suspended particles is larger than Km by a factor zeta_bs 1920 ! which is equal to 3 by default 1919 ! suspended particles is a fraction of Kh 1921 1920 do k=1,klev 1922 1921 do j=1,knon 1923 ycoefqbs(j,k)=ycoef m(j,k)*zeta_bs1922 ycoefqbs(j,k)=ycoefh(j,k)*zeta_bs 1924 1923 enddo 1925 1924 enddo -
LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90
r4835 r4916 142 142 REAL :: esalt 143 143 REAL :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc 144 REAL :: tau_dens, maxerosion , fluxbs_2144 REAL :: tau_dens, maxerosion 145 145 REAL, DIMENSION(klon) :: ws1, rhod, rhos, ustart0, ustart, qsalt, hsalt 146 REAL, DIMENSION(klon) :: fluxbs_1, fluxbs_2, bsweight_fresh 147 LOGICAL, DIMENSION(klon) :: ok_remaining_freshsnow 146 148 147 149 ! End definition … … 373 375 ! 1st step: erosion of fresh snow accumulated during the time step 374 376 do j=1, knon 375 377 if (precip_snow(j) .GT. 0.) then 376 378 rhos(j)=rhofresh_bs 377 379 ! blowing snow flux formula used in MAR … … 392 394 maxerosion=min(precip_snow(j),hsalt(j)*qsalt(j)*rhod(j)/tau_eqsalt_bs) 393 395 394 fluxbs(j)=rhod(j)*ws1(j)*cdragm(j)*(AcoefQBS(j)-qsalt(j)) & 395 / (1.-rhod(j)*ws1(j)*cdragm(j)*BcoefQBS(j)*dtime) 396 !fluxbs(j)= rhod*ws1(j)*cdragm(j)*(qbs1(j)-qsalt(j)) 397 fluxbs(j)=max(-maxerosion,fluxbs(j)) 396 fluxbs_1(j)=rhod(j)*ws1(j)*cdragh(j)*zeta_bs*(AcoefQBS(j)-qsalt(j)) & 397 / (1.-rhod(j)*ws1(j)*cdragh(j)*zeta_bs*BcoefQBS(j)*dtime) 398 fluxbs_1(j)=max(-maxerosion,fluxbs_1(j)) 399 400 if (precip_snow(j) .gt. abs(fluxbs_1(j))) then 401 ok_remaining_freshsnow(j)=.true. 402 bsweight_fresh(j)=1. 403 else 404 ok_remaining_freshsnow(j)=.false. 405 bsweight_fresh(j)=exp(-(abs(fluxbs_1(j))-precip_snow(j))/precip_snow(j)) 406 endif 407 else 408 ok_remaining_freshsnow(j)=.false. 409 fluxbs_1(j)=0. 410 bsweight_fresh(j)=0. 411 endif 398 412 enddo 399 413 … … 401 415 ! we now compute the snow age of the overlying layer (snow surface after erosion of the fresh snow accumulated during the time step) 402 416 ! this is done through the routine albsno 403 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)+fluxbs (:))417 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)+fluxbs_1(:)) 404 418 405 419 ! 2nd step: … … 407 421 ! which depends on surface snow density 408 422 do j = 1, knon 423 if (ok_remaining_freshsnow(j)) then 424 fluxbs_2(j)=0. 425 else 426 ! we start eroding the underlying layer 409 427 ! estimation of snow density 410 428 ! snow density increases with snow age and … … 418 436 ! computation of qbs at the top of the saltation layer 419 437 ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001) 420 esalt= c_esalt_bs*ustar(j)438 esalt=1./(c_esalt_bs*max(1.e-6,ustar(j))) 421 439 hsalt(j)=0.08436*(max(1.e-6,ustar(j))**1.27) 422 440 qsalt(j)=(max(ustar(j)**2-ustart(j)**2,0.))/(RG*hsalt(j))*esalt … … 428 446 ! (rho*qsalt*hsalt) 429 447 maxerosion=hsalt(j)*qsalt(j)*rhod(j)/tau_eqsalt_bs 430 fluxbs_2=rhod(j)*ws1(j)*cdragm(j)*(AcoefQBS(j)-qsalt(j)) & 431 / (1.-rhod(j)*ws1(j)*cdragm(j)*BcoefQBS(j)*dtime) 432 !fluxbs_2= rhod*ws1(j)*cdragm(j)*(qbs1(j)-qsalt(j)) 433 fluxbs_2=max(-maxerosion,fluxbs_2) 434 fluxbs(j)=fluxbs(j)+fluxbs_2 448 fluxbs_2(j)=rhod(j)*ws1(j)*cdragh(j)*zeta_bs*(AcoefQBS(j)-qsalt(j)) & 449 / (1.-rhod(j)*ws1(j)*cdragh(j)*zeta_bs*BcoefQBS(j)*dtime) 450 fluxbs_2(j)=max(-maxerosion,fluxbs_2(j)) 451 endif 435 452 enddo 436 453 437 ! for outputs 454 455 456 457 ! final flux and outputs 438 458 do j=1, knon 459 ! total flux is the erosion of fresh snow + 460 ! a fraction of the underlying snow (if all the fresh snow has been eroded) 461 ! the calculation of the fraction is quite delicate since we do not know 462 ! how much time was needed to erode the fresh snow. We assume that this time 463 ! is dt*exp(-(abs(fluxbs1)-precipsnow)/precipsnow)=dt*bsweight_fresh 464 465 fluxbs(j)=fluxbs_1(j)+fluxbs_2(j)*(1.-bsweight_fresh(j)) 439 466 i = knindex(j) 440 467 zxustartlic(i) = ustart(j) … … 444 471 445 472 446 else 473 else ! not ok_bs 447 474 ! those lines are useful to calculate the snow age 448 475 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:))
Note: See TracChangeset
for help on using the changeset viewer.