- Timestamp:
- Sep 4, 2023, 10:17:16 AM (15 months ago)
- Location:
- LMDZ6/branches/LMDZ_cdrag_LSCE
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_cdrag_LSCE
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_landice_mod.F90
r4414 r4669 12 12 rmu0, lwdownm, albedo, pphi1, & 13 13 swnet, lwnet, tsurf, p1lay, & 14 cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &14 cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, & 15 15 AcoefH, AcoefQ, BcoefH, BcoefQ, & 16 16 AcoefU, AcoefV, BcoefU, BcoefV, & 17 AcoefQBS, BcoefQBS, & 17 18 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 snow, qsurf, qsol, agesno, &19 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &19 snow, qsurf, qsol, qbs1, agesno, & 20 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, & 20 21 tsurf_new, dflux_s, dflux_l, & 21 22 alt, slope, cloudf, & … … 30 31 USE cpl_mod, ONLY : cpl_send_landice_fields 31 32 USE calcul_fluxs_mod 33 USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic 32 34 USE phys_output_var_mod, ONLY : snow_o,zfra_o 33 35 !FC 34 36 USE ioipsl_getin_p_mod, ONLY : getin_p 35 37 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs 36 38 37 39 #ifdef CPP_INLANDSIS … … 56 58 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 57 59 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 58 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 60 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 59 61 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 60 62 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ 61 63 REAL, DIMENSION(klon), INTENT(IN) :: BcoefH, BcoefQ 62 64 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 65 REAL, DIMENSION(klon), INTENT(IN) :: AcoefQBS, BcoefQBS 63 66 REAL, DIMENSION(klon), INTENT(IN) :: ps 64 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 67 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 65 68 REAL, DIMENSION(klon), INTENT(IN) :: rugoro 66 69 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf … … 94 97 !albedo SB <<< 95 98 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 99 REAL, DIMENSION(klon), INTENT(OUT) :: fluxbs 96 100 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 97 101 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l … … 134 138 135 139 REAL,DIMENSION(klon) :: alb1,alb2 140 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 136 141 REAL, DIMENSION (klon,6) :: alb6 142 REAL :: rho0, rhoice, ustart0, hsalt, esalt, rhod 143 REAL :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc 144 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 145 REAL, DIMENSION(klon) :: ws1, rhos, ustart, qsalt 137 146 ! End definition 138 147 !**************************************************************************************** … … 165 174 alb2(:) = 999999. 166 175 alb1(:) = 999999. 167 176 fluxbs(:)=0. 168 177 runoff(:) = 0. 169 178 !**************************************************************************************** … … 173 182 radsol(:) = 0.0 174 183 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 184 185 !**************************************************************************************** 175 186 176 187 !**************************************************************************************** … … 264 275 265 276 266 267 277 ELSE 268 278 … … 314 324 flux_u1, flux_v1) 315 325 316 !****************************************************************************************317 ! Calculate snow height, age, run-off,..318 !319 !****************************************************************************************320 CALL fonte_neige(knon, is_lic, knindex, dtime, &321 tsurf, precip_rain, precip_snow, &322 snow, qsol, tsurf_new, evap)323 324 326 325 327 !**************************************************************************************** … … 327 329 ! 328 330 !**************************************************************************************** 331 329 332 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 330 333 331 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 332 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 333 alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 334 0.6 * (1.0-zfra(1:knon)) 334 335 ! EV: following lines are obsolete since we set alb1 and alb2 to constant values 336 ! I therefore comment them 337 ! alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 338 ! 0.6 * (1.0-zfra(1:knon)) 335 339 ! 336 340 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" … … 354 358 !z0m = SQRT(z0m**2+rugoro**2) 355 359 360 361 362 ! Simple blowing snow param 363 if (ok_bs) then 364 ustart0 = 0.211 365 rhoice = 920.0 366 rho0 = 200.0 367 rhomax=450.0 368 rhohard=400.0 369 tau_dens0=86400.0*10. ! 10 days by default, in s 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 374 do i = 1, knon 375 ! estimation of snow density 376 ! snow density increases with snow age and 377 ! increases even faster in case of sedimentation of blowing snow 378 tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs)) 379 rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens)) 380 ! blowing snow flux formula used in MAR 381 ws1(i)=(u1(i)**2+v1(i)**2)**0.5 382 ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5 383 ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax)) 384 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 385 ! rhohard<450) 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*cdragm(i)*BcoefQBS(i)*dtime) 428 !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i)) 429 enddo 430 431 ! for outputs 432 do j = 1, knon 433 i = knindex(j) 434 zxustartlic(i) = ustart(j) 435 zxrhoslic(i) = rhos(j) 436 enddo 437 438 endif 439 440 441 442 !**************************************************************************************** 443 ! Calculate surface snow amount 444 ! 445 !**************************************************************************************** 446 IF (ok_bs) THEN 447 precip_totsnow(:)=precip_snow(:)+precip_bs(:) 448 evap_totsnow(:)=evap(:)-fluxbs(:) ! flux bs is positive towards the surface (snow erosion) 449 ELSE 450 precip_totsnow(:)=precip_snow(:) 451 evap_totsnow(:)=evap(:) 452 ENDIF 453 454 CALL fonte_neige(knon, is_lic, knindex, dtime, & 455 tsurf, precip_rain, precip_totsnow, & 456 snow, qsol, tsurf_new, evap_totsnow) 457 458 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 459 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 356 460 357 461 … … 378 482 runoff(1:knon)=run_off_lic(1:knon)/dtime 379 483 380 381 !****************************************************************************************382 484 snow_o=0. 383 485 zfra_o = 0. … … 420 522 !albedo SB <<< 421 523 422 423 424 524 425 525 END SUBROUTINE surf_landice
Note: See TracChangeset
for help on using the changeset viewer.