Changeset 4529 for LMDZ6/trunk
- Timestamp:
- May 11, 2023, 10:53:52 AM (19 months ago)
- Location:
- LMDZ6/trunk/libf
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/blowing_snow_ini_mod.F90
r4523 r4529 8 8 real coef_eva_bs, expo_eva_bs, fallv_bs, zeta_bs 9 9 real prt_bs, pbst_bs, qbst_bs 10 integer :: niter_bs 10 integer :: niter_bs, iflag_saltation_bs 11 11 12 12 !$OMP THREADPRIVATE(prt_level, lunout) … … 14 14 !$OMP THREADPRIVATE(coef_eva_bs, expo_eva_bs, fallv_bs, zeta_bs) 15 15 !$OMP THREADPRIVATE(pbst_bs, prt_bs, qbst_bs) 16 !$OMP THREADPRIVATE(niter_bs )16 !$OMP THREADPRIVATE(niter_bs, iflag_saltation_bs) 17 17 18 18 contains … … 67 67 CALL getin_p('niter_bs',niter_bs) 68 68 69 iflag_saltation_bs=0 70 CALL getin_p('iflag_saltation_bs',iflag_saltation_bs) 71 69 72 70 73 end subroutine blowing_snow_ini -
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
r4523 r4529 2147 2147 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2148 2148 AcoefU, AcoefV, BcoefU, BcoefV, & 2149 AcoefQBS, BcoefQBS, & 2149 2150 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2150 2151 ysnow, yqsurf, yqsol,yqbs1, yagesno, & -
LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90
r4526 r4529 15 15 AcoefH, AcoefQ, BcoefH, BcoefQ, & 16 16 AcoefU, AcoefV, BcoefU, BcoefV, & 17 AcoefQBS, BcoefQBS, & 17 18 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 19 snow, qsurf, qsol, qbs1, agesno, & … … 34 35 !FC 35 36 USE ioipsl_getin_p_mod, ONLY : getin_p 36 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs 37 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs 37 38 38 39 #ifdef CPP_INLANDSIS … … 62 63 REAL, DIMENSION(klon), INTENT(IN) :: BcoefH, BcoefQ 63 64 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 65 REAL, DIMENSION(klon), INTENT(IN) :: AcoefQBS, BcoefQBS 64 66 REAL, DIMENSION(klon), INTENT(IN) :: ps 65 67 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 … … 138 140 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 139 141 REAL, DIMENSION (klon,6) :: alb6 140 REAL :: rho0, rhoice, ustart0, hsalt, esalt, qsalt 142 REAL :: rho0, rhoice, ustart0, hsalt, esalt, rhod 143 REAL :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc 141 144 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 142 REAL, DIMENSION(klon) :: ws1, rhos, ustart 145 REAL, DIMENSION(klon) :: ws1, rhos, ustart, qsalt 143 146 ! End definition 144 147 !**************************************************************************************** … … 366 369 tau_dens0=86400.0*10. ! 10 days by default, in s 367 370 tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory 371 372 ! computation of threshold friction velocity 373 ! which depends on surface snow density 368 374 do i = 1, knon 369 375 ! estimation of snow density … … 378 384 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 379 385 ! rhohard<450) 380 esalt=1./(3.25*max(ustar(i),0.001)) 381 hsalt=0.08436*ustar(i)**1.27 382 qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 383 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 384 !Pay attention that this is an explicit formulation for the surface flux 385 !Formulation fully consistent with the implicit resolution of the turbulent 386 !mixing scheme remains to be coded 387 fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt) 386 enddo 387 388 ! computation of qbs at the top of the saltation layer 389 ! two formulations possible 390 ! pay attention that qbs is a mixing ratio and has to be converted 391 ! to specific content 392 393 if (iflag_saltation_bs .eq. 1) then 394 ! expression from CRYOWRF (Sharma et al. 2022) 395 aa=2.6 396 bb=2.5 397 cc=2.0 398 lambdasalt=0.45 399 do i =1, knon 400 rhod=p1lay(i)/RD/temp_air(i) 401 nunu=max(ustar(i)/ustart(i),1.e-3) 402 fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * & 403 (aa+bb*nunu**(-2)+cc*nunu**(-1)) 404 csalt=fluxsalt/(2.8*ustart(i)) 405 hsalt=0.08436*ustar(i)**1.27 406 qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) & 407 * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6)) 408 qsalt(i)=max(qsalt(i),0.) 409 enddo 410 411 412 else 413 ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001) 414 do i=1, knon 415 esalt=1./(3.25*max(ustar(i),0.001)) 416 hsalt=0.08436*ustar(i)**1.27 417 qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 418 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 419 enddo 420 endif 421 422 ! calculation of erosion (emission flux towards the first atmospheric level) 423 ! consistent with implicit resolution of turbulent mixing equation 424 do i=1, knon 425 rhod=p1lay(i)/RD/temp_air(i) 426 fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) & 427 / (1.-rhod*ws1(i)*zeta_bs*BcoefQBS(i)*dtime) 428 !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i)) 388 429 enddo 389 430 -
LMDZ6/trunk/libf/phylmdiso/pbl_surface_mod.F90
r4523 r4529 2474 2474 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2475 2475 AcoefU, AcoefV, BcoefU, BcoefV, & 2476 AcoefQBS, BcoefQBS, & 2476 2477 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2477 2478 ysnow, yqsurf, yqsol,yqbs1, yagesno, & -
LMDZ6/trunk/libf/phylmdiso/surf_landice_mod.F90
r4528 r4529 15 15 AcoefH, AcoefQ, BcoefH, BcoefQ, & 16 16 AcoefU, AcoefV, BcoefU, BcoefV, & 17 AcoefQBS, BcoefQBS, & 17 18 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 19 snow, qsurf, qsol, qbs1, agesno, & … … 49 50 !FC 50 51 USE ioipsl_getin_p_mod, ONLY : getin_p 51 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs 52 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs 52 53 53 54 #ifdef CPP_INLANDSIS … … 78 79 REAL, DIMENSION(klon), INTENT(IN) :: BcoefH, BcoefQ 79 80 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 81 REAL, DIMENSION(klon), INTENT(IN) :: AcoefQBS, BcoefQBS 80 82 REAL, DIMENSION(klon), INTENT(IN) :: ps 81 83 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 … … 183 185 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 184 186 REAL, DIMENSION (klon,6) :: alb6 185 REAL :: rho0, rhoice, ustart0, hsalt, esalt, qsalt 187 REAL :: rho0, rhoice, ustart0, hsalt, esalt, rhod 188 REAL :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc 186 189 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 187 REAL, DIMENSION(klon) :: ws1, rhos, ustart 190 REAL, DIMENSION(klon) :: ws1, rhos, ustart, qsalt 188 191 ! End definition 189 192 !**************************************************************************************** … … 455 458 tau_dens0=86400.0*10. ! 10 days by default, in s 456 459 tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory 460 461 ! computation of threshold friction velocity 462 ! which depends on surface snow density 457 463 do i = 1, knon 458 464 ! estimation of snow density … … 467 473 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 468 474 ! rhohard<450) 469 esalt=1./(3.25*max(ustar(i),0.001)) 470 hsalt=0.08436*ustar(i)**1.27 471 qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 472 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 473 fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt) 475 enddo 476 477 ! computation of qbs at the top of the saltation layer 478 ! two formulations possible 479 ! pay attention that qbs is a mixing ratio and has to be converted 480 ! to specific content 481 482 if (iflag_saltation_bs .eq. 1) then 483 ! expression from CRYOWRF (Sharma et al. 2022) 484 aa=2.6 485 bb=2.5 486 cc=2.0 487 lambdasalt=0.45 488 do i =1, knon 489 rhod=p1lay(i)/RD/temp_air(i) 490 nunu=max(ustar(i)/ustart(i),1.e-3) 491 fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * & 492 (aa+bb*nunu**(-2)+cc*nunu**(-1)) 493 csalt=fluxsalt/(2.8*ustart(i)) 494 hsalt=0.08436*ustar(i)**1.27 495 qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) & 496 * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6)) 497 qsalt(i)=max(qsalt(i),0.) 498 enddo 499 500 501 else 502 ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001) 503 do i=1, knon 504 esalt=1./(3.25*max(ustar(i),0.001)) 505 hsalt=0.08436*ustar(i)**1.27 506 qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 507 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 508 enddo 509 endif 510 511 ! calculation of erosion (emission flux towards the first atmospheric level) 512 ! consistent with implicit resolution of turbulent mixing equation 513 do i=1, knon 514 rhod=p1lay(i)/RD/temp_air(i) 515 fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) & 516 / (1.-rhod*ws1(i)*zeta_bs*BcoefQBS(i)*dtime) 517 !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i)) 474 518 enddo 475 519
Note: See TracChangeset
for help on using the changeset viewer.