6 SUBROUTINE snow3l(HSNOWRES, TPTIME, OMEB, HIMPLICIT_WIND, &
7 PPEW_A_COEF, PPEW_B_COEF, &
8 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, &
9 PSNOWSWE,PSNOWRHO,PSNOWHEAT,PSNOWALB, &
10 PSNOWGRAN1,PSNOWGRAN2,PSNOWHIST,PSNOWAGE, &
11 PTSTEP,PPS,PSR,PRR,PPSN3L, &
12 PTA,PTG,PSW_RAD,PQA,PVMOD,PLW_RAD, PRHOA, &
13 PUREF,PEXNS,PEXNA,PDIRCOSZW, &
14 PZREF,PZ0,PZ0EFF,PZ0H,PALB, &
15 PSOILCOND,PD_G,PLVTT,PLSTT, &
16 PSNOWLIQ,PSNOWTEMP,PSNOWDZ, &
17 PTHRUFAL,PGRNDFLUX,PEVAPCOR,PSOILCOR, &
18 PGFLXCOR,PSNOWSFCH, PDELHEATN, PDELHEATN_SFC, &
19 PSWNETSNOW,PSWNETSNOWS,PLWNETSNOW,PSNOWFLUX, &
20 PRNSNOW,PHSNOW,PGFLUXSNOW, &
21 PHPSNOW,PLES3L,PLEL3L,PEVAP,PSNDRIFT,PRI, &
22 PEMISNOW,PCDSNOW,PUSTAR,PCHSNOW,PSNOWHMASS,PQS, &
23 PPERMSNOWFRAC,PFORESTFRAC,PZENITH,PXLAT,PXLON, &
24 OSNOWDRIFT,OSNOWDRIFT_SUBLIM )
104 USE modd_snow_par
, ONLY : xsnowdmin, nspec_band_snow
119 REAL,
INTENT(IN) :: PTSTEP
123 CHARACTER(LEN=*),
INTENT(IN) :: HSNOWRES
129 LOGICAL,
INTENT(IN) :: OMEB
134 CHARACTER(LEN=*),
INTENT(IN) :: HIMPLICIT_WIND
138 REAL,
DIMENSION(:),
INTENT(IN) :: PPS, PTA, PSW_RAD, PQA,
150 REAL,
DIMENSION(:),
INTENT(IN) :: PSOILCOND, PD_G, PPSN3L
156 REAL,
DIMENSION(:),
INTENT(IN) :: PZREF, PUREF, PEXNS, PEXNA, PDIRCOSZW
173 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_A_COEF, PPEW_B_COEF,
183 REAL,
DIMENSION(:),
INTENT(IN) :: PTG
186 REAL,
DIMENSION(:),
INTENT(IN) :: PLVTT, PLSTT
187 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSNOWALB
192 REAL,
DIMENSION(:,:),
INTENT(INOUT):: PSNOWHEAT, PSNOWRHO, PSNOWSWE
197 REAL,
DIMENSION(:,:),
INTENT(INOUT):: PSNOWGRAN1, PSNOWGRAN2, PSNOWHIST
203 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWAGE
205 REAL,
DIMENSION(:),
INTENT(INOUT) :: PRNSNOW, PHSNOW, PLES3L, PLEL3L, &
206 PHPSNOW, PEVAP, PGRNDFLUX, PEMISNOW
216 REAL,
DIMENSION(:),
INTENT(OUT) :: PGFLUXSNOW
219 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSWNETSNOW, PLWNETSNOW, PSWNETSNOWS
228 REAL,
DIMENSION(:),
INTENT(INOUT) :: PUSTAR, PCDSNOW, PCHSNOW, PRI
234 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWTEMP
235 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWLIQ, PSNOWDZ
240 REAL,
DIMENSION(:),
INTENT(OUT) :: PTHRUFAL, PEVAPCOR, PSOILCOR, PGFLXCOR
264 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNDRIFT
267 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWHMASS
272 REAL,
DIMENSION(:),
INTENT(OUT) :: PQS
275 REAL,
DIMENSION(:),
INTENT(IN) :: PZENITH
276 REAL,
DIMENSION(:),
INTENT(IN) :: PXLAT,PXLON
278 LOGICAL,
INTENT(IN) :: OSNOWDRIFT, OSNOWDRIFT_SUBLIM
287 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZSNOWTEMP, ZSCAP, ZSNOWDZN
296 REAL,
DIMENSION(SIZE(PTA)) :: ZSNOW, ZSFCFRZ, ZTSTERM1, ZTSTERM2
306 LOGICAL,
DIMENSION(SIZE(PTA)) :: GSFCMELT
310 REAL,
DIMENSION(SIZE(PTA)) :: ZRSRA, ZDQSAT, ZQSAT, ZRADXS, ZMELTXS
332 REAL,
DIMENSION(SIZE(PTA)) :: ZUSTAR2_IC, ZTA_IC, ZQA_IC, ZWORK
342 REAL,
DIMENSION(SIZE(PSNOWRHO,1),NSPEC_BAND_SNOW) :: ZSPECTRALALBEDO, ZSPECTRALWORK
345 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZSNOWHEAT0
347 REAL(KIND=JPRB) :: ZHOOK_HANDLE
359 psnowdz(:,:) = psnowswe(:,:)/psnowrho(:,:)
361 ini =
SIZE(psnowswe(:,:),1)
362 inlvls =
SIZE(psnowswe(:,:),2)
369 zgrndflux = pgrndflux
371 zsnowheat0(:,:) = psnowheat(:,:)
373 zsnowtempo(:,:) = psnowtemp(:,:)
381 zsnow(ji) = zsnow(ji) + psnowdz(ji,jj)
389 zwork2(:)=psnowalb(:)
391 CALL snow3lalb(zwork2,zspectralalbedo,psnowrho(:,1),psnowage(:,1),ppermsnowfrac
393 DO jj=1,
SIZE(zspectralalbedo,2)
395 zspectralalbedo(ji,jj)=zspectralalbedo(ji,jj)*zwork3(ji)
405 CALL snow3lfall(ptstep,psr,pta,pvmod,zsnow,psnowrho,psnowdz, &
406 psnowheat,psnowhmass,psnowage,ppermsnowfrac )
410 CALL snow3lalb(zwork2,zspectralwork,psnowrho(:,1),psnowage(:,1),ppermsnowfrac
412 DO jj=1,
SIZE(zspectralalbedo,2)
414 IF(zwork(ji)==0.0.AND.psr(ji)>0.0)
THEN 415 zspectralalbedo(ji,jj) = zspectralwork(ji,jj)
419 WHERE(zwork(:)==0.0.AND.psr(:)>0.0)
420 psnowalb(:) = zwork2(:)
427 CALL snow3lgrid(zsnowdzn,zsnow,psnowdz_old=psnowdz)
431 CALL snow3ltransf(zsnow,psnowdz,zsnowdzn,psnowrho,psnowheat,psnowage)
442 zsnowtemp(:,:) =
xtt + ( ((psnowheat(:,:)/psnowdz(:,:))
445 psnowliq(:,:) = max(0.0,zsnowtemp(:,:)-
xtt)*zscap(:,:)*
448 zsnowtemp(:,:) = min(
xtt,zsnowtemp(:,:))
462 CALL snow3ldrift(ptstep,pforestfrac,pvmod,pta,pqa,pps,prhoa,&
463 psnowrho,psnowdz,zsnow,osnowdrift_sublim,psndrift)
469 psnowheat(:,:) = psnowdz(:,:)*( zscap(:,:)*(zsnowtemp(:,:)-
xtt) &
480 zspectralalbedo,psnowdz,psnowrho,palb, &
481 ppermsnowfrac,pzenith,pswnetsnow, &
482 pswnetsnows,zradsink,zradxs,psnowage)
489 CALL snow3lthrm(psnowrho,zscond,zsnowtemp,pps)
522 zpsn3l(:) = ppsn3l(:)
544 zsnowtempo1(:) = zsnowtemp(:,1)
546 zgrndfluxi(:) = zgrndflux(:)
562 CALL snow3lflux(zsnowtemp(:,1),psnowdz(:,1),pexns,pexna, &
564 ptstep,psnowalb,psw_rad, &
565 pemisnow,zlwupsnow,plw_rad,plwnetsnow, &
566 zta_ic,zsfcfrz,zqa_ic,phpsnow, &
567 zsnowtempo1,psnowflux,zct,zradsink(:,1), &
568 zqsat,zdqsat,zrsra, &
569 prnsnow,phsnow,pgfluxsnow,ples3l,plel3l,pevap, &
580 CALL snow3lgone(ptstep,plel3l,ples3l,psnowrho,
587 CALL snow3lmelt(ptstep,zscap,zsnowtemp,psnowdz,psnowrho,psnowliq,zmeltxs
595 CALL snow3lrefrz(ptstep,prr,psnowrho,zsnowtemp,psnowdz,psnowliq,pthrufal
598 psnowheat(:,:) = psnowdz(:,:)*( zscap(:,:)*(zsnowtemp(:,:)-
xtt)
605 CALL snow3levapn(zpsn3l,ples3l,plel3l,ptstep,zsnowtemp(:,1),psnowrho(:,
614 zwork2d(:,:) = min(1.0, psnowdz(:,:)/xsnowdmin)
615 zsnowtemp(:,:) =
xtt + zwork2d(:,:)*( ((psnowheat(:,:)/max(xsnowdmin,psnowdz
624 CALL snow3levapgone(psnowheat,psnowdz,psnowrho,zsnowtemp,psnowliq)
631 CALL snow3lalb(psnowalb,zspectralalbedo,psnowrho(:,1),psnowage(:,1),ppermsnowfrac
644 zliqheatxs(ji) = max(0.0,psnowliq(ji,jj)*
xrholw-psnowdz(ji,jj)*psnowrho
650 psnowtemp(:,:) = zsnowtemp(:,:)
654 psnowheat(:,:) = psnowdz(:,:)*( zscap(:,:)*(psnowtemp(:,:)-
xtt)
663 pgrndflux(:) = zgrndfluxo(:)+zradxs(:)
668 pgflxcor(:) = (zgrndflux(:)-zgrndfluxo(:))+zmeltxs(:)+zliqheatxs(:)
674 psnowswe(:,:) = psnowdz(:,:)*psnowrho(:,:)
676 WHERE (psnowswe(:,:)>0)
677 psnowage(:,:)=psnowage(:,:)+(ptstep/
xday)
687 pqs(:) =
qsati(psnowtemp(:,1),pps)
711 zwork(ji) = zwork(ji) + psnowheat(ji,jj)
714 zwork2(:) = min(0.0, zwork(:) + pgrndflux(:) - zgrndfluxi
717 WHERE(zwork(:) > -1.e-10)
720 zwork(:) = zwork2(:)/zwork(:)
725 psnowheat(ji,jj) = psnowheat(ji,jj)*zwork(ji)
731 zwork2d(:,:) = min(1.0, psnowdz(:,:)/xsnowdmin)/max(xsnowdmin,psnowdz
756 pdelheatn(ji) = pdelheatn(ji) + (psnowheat(ji,jj)-zsnowheat0(ji,jj
759 pdelheatn(:) = pdelheatn(:) /ptstep
760 pdelheatn_sfc(:) = (psnowheat(:,1)-zsnowheat0(:,1))/ptstep
767 psnowsfch(:) = pdelheatn_sfc(:) - (pswnetsnows(:) +plwnetsnow(:) - phsnow
780 SUBROUTINE snow3ldrift(PTSTEP,PFORESTFRAC,PVMOD,PTA,PQA,PPS,PRHOA,&
781 PSNOWRHO,PSNOWDZ,PSNOW,OSNOWDRIFT_SUBLIM,PSNDRIFT)
785 USE modd_snow_par
, ONLY : xvtime, xvromax, xvromin, xvmob1, &
786 xvdrift1, xvdrift2, xvdrift3, &
787 xcoef_ff, xcoef_effect, xqs_ref
818 REAL,
INTENT(IN) :: PTSTEP
820 REAL,
DIMENSION(:),
INTENT(IN) :: PFORESTFRAC
821 REAL,
DIMENSION(:),
INTENT(IN) :: PVMOD
822 REAL,
DIMENSION(:),
INTENT(IN) :: PTA
823 REAL,
DIMENSION(:),
INTENT(IN) :: PQA
824 REAL,
DIMENSION(:),
INTENT(IN) :: PPS
825 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
827 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWRHO, PSNOWDZ
829 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOW
831 LOGICAL,
INTENT(IN) :: OSNOWDRIFT_SUBLIM
832 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNDRIFT
836 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZSNOWRHO2
837 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZRMOB
838 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZRDRIFT
839 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZRT
840 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZDRO
841 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZQS_EFFECT
842 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZDRIFT_EFFECT
843 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZPROFEQU
844 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZWIND
845 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZQSATI
846 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZVT
847 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZQS
848 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZW
849 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZT
850 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZSNOWDZ1
851 REAL,
DIMENSION(SIZE(PSNOWRHO,1) ) :: ZFOREST_EFFECT
853 LOGICAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: GDRIFT
860 REAL(KIND=JPRB) :: ZHOOK_HANDLE
869 ini =
SIZE(psnowdz(:,:),1)
870 inlvls =
SIZE(psnowdz(:,:),2)
872 zsnowrho2(:,:) = psnowrho(:,:)
876 zqs_effect(:,:) = 0.0
877 zdrift_effect(:,:) = 0.0
878 gdrift(:,:) = .false.
882 zsnowdz1(:) = psnowdz(:,1)
888 zforest_effect(:) = 1.0 - 0.85 * pforestfrac(:)
890 zwind(:) = xcoef_ff * zforest_effect(:) * pvmod(:)
896 zrmob(ji,jj)= 1.25-1.25e-3*(max(psnowrho(ji,jj),xvromin)-xvromin)
899 zrdrift(ji,jj) = zrmob(ji,jj)-(xvdrift1*exp(-xvdrift2*zwind(ji))-
906 gdrift(:,:) = (zrdrift(:,:)>0.0)
909 IF(.NOT.gdrift(ji,jj))
THEN 910 gdrift(ji,jj:inlvls)=.false.
919 IF(osnowdrift_sublim)
THEN 921 zqsati(:)=
qsati(pta(:),pps(:))
925 zw(:)=max(-0.99,zrmob(:,1))
926 zvt(:)=log(xvdrift1/(1.0+zw(:)))/xvdrift2
929 zw(:)=log(zwind(:)/zvt(:))
938 zt(:)=0.0018*(zt(:)**4)
940 zqs(:)=zt(:)*zvt(:)*prhoa(:)*zqsati(:)*(1.-pqa(:)/zqsati(:))*zw(:)
944 psnowdz(:,1)=max(0.5*psnowdz(:,1),psnowdz(:,1)-max(0.,zqs(:))*ptstep/(xcoef_ff
946 psndrift(:) = (zsnowdz1(:)-psnowdz(:,1))*psnowrho(:,1)/ptstep
948 zqs_effect(:,1)=min(3.,max(0.,zqs(:))/xqs_ref)
959 zprofequ(ji) = zprofequ(ji) + 0.5 * psnowdz(ji,jj) * 0.1 * (xvdrift3
961 IF(gdrift(ji,jj).AND.psnowrho(ji,jj)<xvromax)
THEN 964 zrt(ji,jj) = max(0.0,zrdrift(ji,jj)*exp(-zprofequ(ji)*100.0))
966 zdrift_effect(ji,jj) = (zqs_effect(ji,jj)+xcoef_effect)*zrt(ji,jj
969 zdro(ji,jj) = (xvromax - psnowrho(ji,jj)) * zdrift_effect(ji,jj)
972 zsnowrho2(ji,jj) = min(xvromax,psnowrho(ji,jj)+zdro(ji,jj))
975 psnowdz(ji,jj) = psnowdz(ji,jj)*(psnowrho(ji,jj)/zsnowrho2(ji,jj
980 zprofequ(ji) = zprofequ(ji) + 0.5 * psnowdz(ji,jj) * 0.1 * (xvdrift3
993 psnow(ji) = psnow(ji) + psnowdz(ji,jj)
999 psnowrho(:,:) = zsnowrho2(:,:)
1009 SUBROUTINE snow3lrad(OMEB, PSNOWDZMIN, PSW_RAD, PSNOWALB, &
1010 PSPECTRALALBEDO, PSNOWDZ, PSNOWRHO, PALB, &
1011 PPERMSNOWFRAC, PZENITH, PSWNETSNOW, &
1012 PSWNETSNOWS, PRADSINK, PRADXS, PSNOWAGE )
1030 LOGICAL,
INTENT(IN) :: OMEB
1033 REAL,
INTENT(IN) :: PSNOWDZMIN
1035 REAL,
DIMENSION(:),
INTENT(IN) :: PSW_RAD
1036 REAL,
DIMENSION(:),
INTENT(IN) :: PSNOWALB
1037 REAL,
DIMENSION(:),
INTENT(IN) :: PALB
1038 REAL,
DIMENSION(:),
INTENT(IN) :: PPERMSNOWFRAC
1039 REAL,
DIMENSION(:),
INTENT(IN) :: PZENITH
1041 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWRHO, PSNOWDZ, PSNOWAGE
1042 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSPECTRALALBEDO
1044 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSWNETSNOW, PSWNETSNOWS
1046 REAL,
DIMENSION(:),
INTENT(OUT) :: PRADXS
1048 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PRADSINK
1058 REAL,
DIMENSION(SIZE(PSNOWRHO,1)) :: ZRADTOT
1060 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZDSGRAIN, ZCOEF, ZSNOWDZ
1061 REAL,
DIMENSION(SIZE(PSPECTRALALBEDO,1),SIZE(PSPECTRALALBEDO,2)) :: ZSPECTRALALBEDO
1063 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1071 ini =
SIZE(psnowdz(:,:),1)
1072 inlvls =
SIZE(psnowdz(:,:),2)
1074 zspectralalbedo(:,:) =
xundef 1084 zsnowdz(:,:) = max(psnowdzmin, psnowdz(:,:))
1098 zage(ji,jj) = (1.0-ppermsnowfrac(ji))*psnowage(ji,jj)
1113 zspectralalbedo(:,1) = pspectralalbedo(:,1)
1114 zspectralalbedo(:,2) = (psnowalb(:) -
xsw_wght_vis*zspectralalbedo(:,
1120 zcoef(:,1) = 1.0 - pswnetsnows(:)/max(1.e-4,pswnetsnow(:))
1140 pradsink(ji,jj) = -psw_rad(ji)*zcoef(ji,jj)
1149 pradsink(:,inlvls) = pradsink(:,inlvls)*(1.0-palb(:))
1154 zradtot(:) = pradsink(:,1) + (1.-psnowalb(:))*psw_rad(:)
1157 zradtot(ji) = zradtot(ji) + pradsink(ji,jj)-pradsink(ji,jj-1)
1161 pradxs(:) = (1.-psnowalb(:))*psw_rad(:) - zradtot(:)
1171 SUBROUTINE snow3lebud(HSNOWRES, HIMPLICIT_WIND, &
1172 PPEW_A_COEF, PPEW_B_COEF, &
1173 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, &
1175 PZREF,PTS,PSNOWRHO,PSNOWLIQ,PSCAP,PSCOND1,PSCOND2, &
1176 PUREF,PEXNS,PEXNA,PDIRCOSZW,PVMOD, &
1177 PLW_RAD,PSW_RAD,PTA,PQA,PPS,PTSTEP, &
1178 PSNOWDZ1,PSNOWDZ2,PALBT,PZ0,PZ0EFF,PZ0H, &
1179 PSFCFRZ,PRADSINK,PHPSNOW, &
1180 PCT,PEMIST,PRHOA,PTSTERM1,PTSTERM2,PRA,PCDSNOW,PCHSNOW, &
1181 PQSAT,PDQSAT,PRSRA,PUSTAR2_IC,PRI, &
1182 PPET_A_COEF_T,PPEQ_A_COEF_T,PPET_B_COEF_T,PPEQ_B_COEF_T )
1191 USE modd_snow_par
, ONLY : x_ri_max, xemissn
1196 USE modi_surface_aero_cond
1204 REAL,
INTENT(IN) :: PTSTEP, PSNOWDZMIN
1206 CHARACTER(LEN=*),
INTENT(IN) :: HSNOWRES
1211 CHARACTER(LEN=*),
INTENT(IN) :: HIMPLICIT_WIND
1215 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_A_COEF, PPEW_B_COEF,
1225 REAL,
DIMENSION(:),
INTENT(IN) :: PZREF, PTS, PSNOWDZ1, PSNOWDZ2,
1231 REAL,
DIMENSION(:),
INTENT(IN) :: PSW_RAD, PLW_RAD, PTA, PQA, PPS, PRHOA
1233 REAL,
DIMENSION(:),
INTENT(IN) :: PUREF, PEXNS, PEXNA, PDIRCOSZW, PVMOD
1235 REAL,
DIMENSION(:),
INTENT(OUT) :: PTSTERM1, PTSTERM2, PEMIST, PRA,
1239 REAL,
DIMENSION(:),
INTENT(OUT) :: PUSTAR2_IC, &
1240 PPET_A_COEF_T, PPEQ_A_COEF_T, &
1241 PPET_B_COEF_T, PPEQ_B_COEF_T
1243 REAL,
DIMENSION(:),
INTENT(OUT) :: PRI
1247 REAL,
DIMENSION(SIZE(PTS)) :: ZAC, ZRI, ZCOND1, ZCOND2, &
1248 ZSCONDA, ZA, ZB, ZC, &
1249 ZCDN, ZSNOWDZM1, ZSNOWDZM2, &
1250 ZVMOD, ZUSTAR2, ZTS3, ZLVT, &
1252 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1263 pqsat(:) =
qsati(pts(:),pps(:))
1264 pdqsat(:) =
dqsati(pts(:),pps(:),pqsat(:))
1278 CALL surface_ri(pts, pqsat, pexns, pexna, pta, pqa, &
1279 pzref, puref, pdircoszw, pvmod, zri )
1286 IF(hsnowres==
'RIL')
THEN 1288 zri(jj) = min(x_ri_max,zri(jj))
1300 CALL surface_cd(zri, pzref, puref, pz0eff, pz0h, pcdsnow, zcdn)
1302 prsra(:) = prhoa(:) / pra(:)
1308 IF(himplicit_wind==
'OLD')
THEN 1310 zustar2(:) = ( pcdsnow(:)*pvmod(:)*ppew_b_coef(:)) / &
1311 (1.0-prhoa(:)*pcdsnow(:)*pvmod(:)*ppew_a_coef(:))
1314 zustar2(:) = (pcdsnow(:)*pvmod(:)*(2.*ppew_b_coef(:)-pvmod(:))) &
1315 / (1.0-2.0*prhoa(:)*pcdsnow(:)*pvmod(:)*ppew_a_coef(:))
1318 zvmod(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
1319 zvmod(:) = max(zvmod(:),0.)
1321 WHERE(ppew_a_coef(:)/= 0.)
1322 zustar2(:) = max( ( zvmod(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef
1326 zustar2(:) = max(zustar2(:),0.)
1328 pustar2_ic(:) = zustar2(:)
1336 zsnowdzm1(:) = max(psnowdz1(:), psnowdzmin)
1337 zsnowdzm2(:) = max(psnowdz2(:), psnowdzmin)
1341 pct(:) = 1.0/(pscap(:)*zsnowdzm1(:))
1352 zcond1(:) = zsnowdzm1(:)/((zsnowdzm1(:)+zsnowdzm2(:))*pscond1(:))
1353 zcond2(:) = zsnowdzm2(:)/((zsnowdzm1(:)+zsnowdzm2(:))*pscond2(:))
1355 zsconda(:) = 1.0/(zcond1(:)+zcond2(:))
1362 z_ccoef(:) = 1.0 - ppeq_a_coef(:)*prsra(:)
1364 ppeq_a_coef_t(:) = - ppeq_a_coef(:)*prsra(:)*pdqsat(:)/z_ccoef(:)
1366 ppeq_b_coef_t(:) = ( ppeq_b_coef(:) - ppeq_a_coef(:)*prsra(:)*(pqsat(:)
1372 z_ccoef(:) = (1.0 - ppet_a_coef(:)*prsra(:))/pexna(:)
1374 ppet_a_coef_t(:) = - ppet_a_coef(:)*prsra(:)/(pexns(:)*z_ccoef(:))
1376 ppet_b_coef_t(:) = ppet_b_coef(:)/z_ccoef(:)
1381 zts3(:) = pemist(:) *
xstefan * pts(:)**3
1382 zlvt(:) = (1.-psfcfrz(:))*
xlvtt + psfcfrz(:)*
xlstt 1384 za(:) = 1. / ptstep + pct(:) * (4. * zts3(:) +
1389 zb(:) = 1. / ptstep + pct(:) * (3. * zts3(:) +
1392 zc(:) = pct(:) * (prsra(:) *
xcpd * ppet_b_coef_t(:)/pexna(:) + psw_rad
1401 ptsterm2(:) = 2.*zsconda(:)*pct(:)/(za(:)*(zsnowdzm2(:)+zsnowdzm1(:)))
1403 ptsterm1(:) = (pts(:)*zb(:) + zc(:))/za(:)
1413 PSNOWDZ,PSCOND,PSCAP,PTG, &
1415 PRADSINK,PCT,PTERM1,PTERM2, &
1416 PPET_A_COEF_T,PPEQ_A_COEF_T, &
1417 PPET_B_COEF_T,PPEQ_B_COEF_T, &
1419 PGRNDFLUX,PGRNDFLUXO,PSNOWTEMP, &
1444 USE modi_tridiag_ground
1450 LOGICAL,
INTENT(IN) :: OMEB
1452 REAL,
INTENT(IN) :: PTSTEP, PSNOWDZMIN
1454 REAL,
DIMENSION(:),
INTENT(IN) :: PTG, PSOILCOND, PD_G, &
1458 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWDZ, PSCOND, PSCAP, &
1461 REAL,
DIMENSION(:),
INTENT(IN) :: PPET_A_COEF_T, PPEQ_A_COEF_T, &
1462 PPET_B_COEF_T, PPEQ_B_COEF_T
1464 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWTEMP
1466 REAL,
DIMENSION(:),
INTENT(OUT) :: PGRNDFLUX, PGRNDFLUXO, PSNOWFLUX,
1478 REAL,
DIMENSION(SIZE(PTG)) :: ZSNOWTEMP_DELTA
1480 REAL,
DIMENSION(SIZE(PSNOWDZ,1),SIZE(PSNOWDZ,2)) :: ZSNOWTEMP, ZDTERM, ZCTERM
1484 REAL,
DIMENSION(SIZE(PSNOWDZ,1),SIZE(PSNOWDZ,2)) :: ZWORK1, ZWORK2, ZDZDIF
1487 REAL,
DIMENSION(SIZE(PSNOWDZ,1),SIZE(PSNOWDZ,2)-1) :: ZSNOWTEMP_M,
1490 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1497 zsnowtemp(:,:) = psnowtemp(:,:)
1498 ini =
SIZE(psnowdz(:,:),1)
1499 inlvls =
SIZE(psnowdz(:,:),2)
1508 zsnowdzm(:,:) = max(psnowdz(:,:), psnowdzmin)
1512 zdzdif(ji,jj) = 0.5*(zsnowdzm(ji,jj)+zsnowdzm(ji,jj+1))
1513 zwork1(ji,jj) = zsnowdzm(ji,jj )/(2.0*zdzdif(ji,jj)*pscond(ji,jj
1518 zdzdif(:,inlvls) = 0.5*(zsnowdzm(:,inlvls)+pd_g(:))
1519 zwork1(:,inlvls) = zsnowdzm(:,inlvls)/(2.0*zdzdif(:,inlvls)*pscond(:,inlvls
1522 zdterm(:,:) = 1.0/(zdzdif(:,:)*(zwork1(:,:)+zwork2(:,:)))
1524 zcterm(:,:) = pscap(:,:)*zsnowdzm(:,:)/ptstep
1532 zbmtrx(:,1) = 1./(pct(:)*ptstep)
1533 zcmtrx(:,1) = -pterm2(:)*zbmtrx(:,1)
1534 zfrcv(:,1) = pterm1(:)*zbmtrx(:,1)
1541 zamtrx(ji,jj) = -zdterm(ji,jj-1)
1542 zbmtrx(ji,jj) = zcterm(ji,jj) + zdterm(ji,jj-1) + zdterm(ji,jj)
1543 zcmtrx(ji,jj) = -zdterm(ji,jj)
1544 zfrcv(ji,jj) = zcterm(ji,jj)*psnowtemp(ji,jj) - (pradsink(ji,jj-
1550 zamtrx(:,inlvls) = -zdterm(:,inlvls-1)
1551 zbmtrx(:,inlvls) = zcterm(:,inlvls) + zdterm(:,inlvls-1) +
1567 psnowflux(:) = zdterm(:,1)*(zsnowtemp(:,1) - zsnowtemp(:,2))
1588 zbmtrx_m(:,1) = zcterm(:,2) + zdterm(:,1) + zdterm(:,2)
1589 zcmtrx_m(:,1) = -zdterm(:,2)
1590 zfrcv_m(:,1) = zcterm(:,2)*psnowtemp(:,2) +
xtt*zdterm(:,1) - &
1591 (pradsink(:,1)-pradsink(:,2))
1595 zamtrx_m(ji,jj) = zamtrx(ji,jj+1)
1596 zbmtrx_m(ji,jj) = zbmtrx(ji,jj+1)
1597 zcmtrx_m(ji,jj) = zcmtrx(ji,jj+1)
1598 zfrcv_m(ji,jj) = zfrcv(ji,jj+1)
1599 zsnowtemp_m(ji,jj) = psnowtemp(ji,jj+1)
1603 CALL tridiag_ground(zamtrx_m,zbmtrx_m,zcmtrx_m,zfrcv_m,zsnowtemp_m)
1608 zsnowtemp_delta(:) = 0.0
1610 WHERE(zsnowtemp(:,1) >
xtt .AND. psnowtemp(:,1) ==
xtt)
1611 psnowflux(:) = zdterm(:,1)*(
xtt - zsnowtemp_m(:,1))
1612 zsnowtemp_delta(:) = 1.0
1617 zsnowtemp(ji,jj) = zsnowtemp_delta(ji)*zsnowtemp_m(ji,jj-1) &
1618 + (1.0-zsnowtemp_delta(ji))*zsnowtemp(ji,jj)
1637 pgrndfluxo(:) = zdterm(:,inlvls)*(zsnowtemp(:,inlvls) -ptg
1639 pgrndflux(:) = pgrndfluxo(:)
1641 pgrndflux(:) = zdterm(:,inlvls)*(min(
xtt,zsnowtemp(:,inlvls))-ptg
1644 zsnowtemp(:,inlvls) = zsnowtemp(:,inlvls) + (pgrndfluxo(:)-pgrndflux(:))
1649 psnowtemp(:,:) = zsnowtemp(:,:)
1657 pta_ic(:) = ppet_b_coef_t(:) + ppet_a_coef_t(:)* psnowtemp(:,1)
1659 pqa_ic(:) = ppeq_b_coef_t(:) + ppeq_a_coef_t(:)* psnowtemp(:,1)
1670 SUBROUTINE snow3lmelt(PTSTEP,PSCAP,PSNOWTEMP,PSNOWDZ, &
1671 PSNOWRHO,PSNOWLIQ,PMELTXS )
1691 REAL,
INTENT(IN) :: PTSTEP
1693 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSCAP
1695 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWDZ, PSNOWTEMP, PSNOWRHO, &
1698 REAL,
DIMENSION(:),
INTENT(OUT) :: PMELTXS
1703 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZPHASE, ZCMPRSFACT
1709 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1717 zcmprsfact(:,:) = 0.0
1719 zwholdmax(:,:) = 0.0
1720 zsnowmelt(:,:) = 0.0
1721 zsnowtemp(:,:) = 0.0
1727 WHERE(psnowdz > 0.0)
1731 zsnowlwe(:,:) = psnowrho(:,:)*psnowdz(:,:)/
xrholw 1736 zphase(:,:) = min(pscap(:,:)*max(0.0, psnowtemp(:,:) -
xtt)* &
1749 zsnowtemp(:,:) = psnowtemp(:,:) - zphase(:,:)/(pscap(:,:)*psnowdz(:,:
1751 psnowtemp(:,:) = min(
xtt, zsnowtemp(:,:))
1753 zmeltxs(:,:) = (zsnowtemp(:,:)-psnowtemp(:,:))*pscap(:,:)*psnowdz(:
1766 zwholdmax(:,:) =
snow3lhold(psnowrho,psnowdz)
1768 WHERE(psnowdz > 0.0)
1770 zcmprsfact(:,:) = (zsnowlwe(:,:)-min(psnowliq(:,:)+zsnowmelt(:,:),
1774 psnowdz(:,:) = psnowdz(:,:)*zcmprsfact(:,:)
1775 psnowrho(:,:) = zsnowlwe(:,:)*
xrholw/psnowdz(:,:)
1781 psnowdz(:,:) = psnowdz(:,:)*zcmprsfact(:,:)
1782 psnowrho(:,:) = zsnowlwe(:,:)*
xrholw/psnowdz(:,:)
1788 psnowliq(:,:) = psnowliq(:,:) + zsnowmelt(:,:)
1797 DO jwrk = 1,
SIZE(zmeltxs,2)
1798 DO ji = 1,
SIZE(zmeltxs,1)
1799 pmeltxs(ji) = pmeltxs(ji) + zmeltxs(ji,jwrk)
1802 pmeltxs(:) = pmeltxs(:) / ptstep
1813 PSNOWRHO,PSNOWTEMP,PSNOWDZ,PSNOWLIQ, &
1826 USE modd_snow_par
, ONLY : xsnowdmin
1834 REAL,
INTENT(IN) :: PTSTEP
1836 REAL,
DIMENSION(:),
INTENT(IN) :: PRR
1838 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWDZ, PSNOWTEMP, PSNOWLIQ, PSNOWRHO
1840 REAL,
DIMENSION(:),
INTENT(INOUT) :: PTHRUFAL
1851 REAL,
DIMENSION(SIZE(PRR)) :: ZPCPXS, ZTOTWCAP, ZRAINFALL
1853 REAL,
DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZFLOWLIQ, ZWORK,
1859 REAL,
DIMENSION(SIZE(PSNOWRHO,1),0:SIZE(PSNOWRHO,2)):: ZFLOWLIQT
1861 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1870 zsnowrho(:,:) = psnowrho(:,:)
1871 zsnowliq(:,:) = psnowliq(:,:)
1872 zsnowtemp(:,:) = psnowtemp(:,:)
1873 ini =
SIZE(psnowdz(:,:),1)
1874 inlvls =
SIZE(psnowdz(:,:),2)
1884 zsnowheat(:,:) = psnowdz(:,:)*( zscap(:,:)*(zsnowtemp(:,:)-
xtt) &
1887 zsnowtemp(:,:) =
xtt + ( ((zsnowheat(:,:)/max(psnowdz(:,:),xsnowdmin/inlvls
1890 zsnowliq(:,:) = max(0.0,zsnowtemp(:,:)-
xtt)*zscap(:,:)*psnowdz(:,:)/(
xlmtt 1892 zsnowtemp(:,:) = min(
xtt,zsnowtemp(:,:))
1905 zwholdmax(:,:) =
snow3lhold(psnowrho,psnowdz)
1907 zflowliq(:,:) = max(0.,zsnowliq(:,:)-zwholdmax(:,:))
1909 zsnowliq(:,:) = zsnowliq(:,:) - zflowliq(:,:)
1911 zsnowdz(:,:) = psnowdz(:,:) - zflowliq(:,:)*
xrholw/zsnowrho(:,:)
1913 zsnowdz(:,:) = max(0.0, zsnowdz(:,:))
1929 ztotwcap(ji) = ztotwcap(ji) + zwholdmax(ji,jj)
1935 zrainfall(:) = prr(:)*ptstep/
xrholw 1937 zflowliqt(:,0)= min(zrainfall(:),ztotwcap(:))
1941 zpcpxs(:) = zrainfall(:) - zflowliqt(:,0)
1945 zflowliqt(ji,jj) = zflowliq(ji,jj)
1962 psnowliq(:,:) = zsnowliq(:,:)
1966 zsnowliq(ji,jj) = zsnowliq(ji,jj) + zflowliqt(ji,jj-1)
1967 zflowliq(ji,jj) = max(0.0, zsnowliq(ji,jj)-zwholdmax(ji,jj))
1968 zsnowliq(ji,jj) = zsnowliq(ji,jj) - zflowliq(ji,jj)
1969 zflowliqt(ji,jj) = zflowliqt(ji,jj) + zflowliq(ji,jj)
1973 zwork(:,:) = max(xsnowdmin/inlvls,zsnowdz(:,:))
1974 zsnowrho(:,:) = zsnowrho(:,:)+(zsnowliq(:,:)-psnowliq(:,:))*
xrholw/zwork
1985 pthrufal(:) = pthrufal(:) + zflowliqt(:,inlvls)
1990 pthrufal(:) = (pthrufal(:) + zpcpxs(:))*
xrholw/ptstep
1995 psnowtemp(:,:)= zsnowtemp(:,:)
1996 psnowdz(:,:) = zsnowdz(:,:)
1997 psnowrho(:,:) = zsnowrho(:,:)
1998 psnowliq(:,:) = zsnowliq(:,:)
2008 SUBROUTINE snow3lflux(PSNOWTEMP,PSNOWDZ,PEXNS,PEXNA, &
2010 PTSTEP,PALBT,PSW_RAD,PEMIST,PLWUPSNOW, &
2011 PLW_RAD,PLWNETSNOW, &
2012 PTA,PSFCFRZ,PQA,PHPSNOW, &
2013 PSNOWTEMPO1,PSNOWFLUX,PCT,PRADSINK, &
2014 PQSAT,PDQSAT,PRSRA, &
2015 PRN,PH,PGFLUX,PLES3L,PLEL3L,PEVAP, &
2033 REAL,
INTENT(IN) :: PTSTEP
2035 REAL,
DIMENSION(:),
INTENT(IN) :: PSNOWDZ, PSNOWTEMPO1, PSNOWFLUX, PCT
2038 REAL,
DIMENSION(:),
INTENT(IN) :: PALBT, PSW_RAD, PEMIST, PLW_RAD,
2043 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSNOWTEMP
2045 REAL,
DIMENSION(:),
INTENT(OUT) :: PRN, PH, PGFLUX, PLES3L, PLEL3L,
2049 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: OSFCMELT
2054 REAL,
DIMENSION(SIZE(PSNOWDZ)) :: ZEVAPC, ZLE, ZSNOWTEMP, ZSMSNOW, ZGFLUX
2056 REAL(KIND=JPRB) :: ZHOOK_HANDLE
2064 zsnowtemp(:) = psnowtemp(:)
2069 osfcmelt(:) = .false.
2071 zsnowto3(:) = psnowtempo1(:) ** 3
2077 zdeltat(:) = psnowtemp(:) - psnowtempo1(:)
2079 plwupsnow(:) = pemist(:) *
xstefan * zsnowto3(:)*( psnowtempo1(:) + 4.* zdeltat
2081 plwnetsnow(:)= pemist(:) * plw_rad(:) - plwupsnow(:)
2083 prn(:) = (1. - palbt(:)) * psw_rad(:) + plwnetsnow(:)
2085 ph(:) = prsra(:) *
xcpd * (psnowtemp(:)/pexns(:) - pta(:)/pexna(:
2087 zevapc(:) = prsra(:) * ( (pqsat(:) - pqa(:)) + pdqsat(:)*zdeltat(:) )
2089 ples3l(:) = psfcfrz(:) *
xlstt * zevapc(:)
2091 plel3l(:) = (1.-psfcfrz(:))*
xlvtt * zevapc(:)
2093 zle(:) = ples3l(:) + plel3l(:)
2095 pgflux(:) = prn(:) - ph(:) - zle(:) + phpsnow(:)
2108 WHERE (psnowtemp >
xtt .AND. psnowtempo1 <
xtt)
2112 zdeltat(:) =
xtt - psnowtempo1(:)
2114 plwupsnow(:) = pemist(:) *
xstefan * zsnowto3(:)*( psnowtempo1(:) + 4
2116 plwnetsnow(:)= pemist(:) * plw_rad(:) - plwupsnow(:)
2118 prn(:) = (1. - palbt(:)) * psw_rad(:) + plwnetsnow(:)
2120 ph(:) = prsra(:) *
xcpd * (
xtt/pexns(:) - pta(:)/pexna(:))
2122 zevapc(:) = prsra(:) * ( (pqsat(:) - pqa(:)) + pdqsat(:)*zdeltat(:
2124 ples3l(:) = psfcfrz(:) *
xlstt * zevapc(:)
2126 plel3l(:) = (1.-psfcfrz(:))*
xlvtt * zevapc(:)
2128 zle(:) = ples3l(:) + plel3l(:)
2130 zgflux(:) = prn(:) - ph(:) - zle(:) + phpsnow(:)
2132 zsmsnow(:) = pgflux(:) - zgflux(:)
2134 pgflux(:) = zgflux(:)
2138 zsnowtemp(:) = psnowtemp(:) - zsmsnow(:)*ptstep*pct(:)
2148 WHERE(psnowtemp(:) >
xtt .AND. psnowtempo1(:) >=
xtt)
2150 osfcmelt(:) = .true.
2152 plwupsnow(:) = pemist(:) *
xstefan * (
xtt ** 4)
2154 plwnetsnow(:)= pemist(:) * plw_rad(:) - plwupsnow(:)
2156 prn(:) = (1. - palbt(:)) * psw_rad(:) + plwnetsnow(:)
2158 ph(:) = prsra(:) *
xcpd * (
xtt/pexns(:) - pta(:)/pexna(:))
2160 zevapc(:) = prsra(:) * (pqsat(:) - pqa(:))
2162 ples3l(:) = psfcfrz(:) *
xlstt * zevapc(:)
2164 plel3l(:) = (1.-psfcfrz(:))*
xlvtt * zevapc(:)
2166 zle(:) = ples3l(:) + plel3l(:)
2168 pgflux(:) = prn(:) - ph(:) - zle(:) + phpsnow(:)
2170 zsnowtemp(:) =
xtt + ptstep*pct(:)*(pgflux(:) + pradsink(:) - psnowflux
2177 psnowtemp(:) = zsnowtemp(:)
2181 pevap(:) = zevapc(:)
2186 pustar(:) = sqrt(pustar2_ic(:))
2196 SUBROUTINE snow3levapn(PPSN3L,PLES3L,PLEL3L,PTSTEP,PSNOWTEMP, &
2197 PSNOWRHO,PSNOWDZ,PSNOWLIQ,PTA, &
2198 PLVTT,PLSTT,PSNOWHEAT,PSOILCOR )
2208 USE modd_snow_par
, ONLY : xrhosmin_es, xsnowdmin
2214 REAL,
INTENT(IN) :: PTSTEP
2216 REAL,
DIMENSION(:),
INTENT(IN) :: PPSN3L
2218 REAL,
DIMENSION(:),
INTENT(IN) :: PLES3L, PLEL3L
2220 REAL,
DIMENSION(:),
INTENT(IN) :: PTA, PLVTT, PLSTT
2222 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWHEAT, PSNOWDZ
2224 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSNOWRHO, PSNOWLIQ, &
2227 REAL,
DIMENSION(:),
INTENT(OUT) :: PSOILCOR
2231 INTEGER :: INI, INLVLS, JJ, JI
2233 REAL,
DIMENSION(SIZE(PLES3L)) :: ZSNOWEVAPS, ZSNOWEVAP, ZSNOWEVAPX
2236 REAL,
DIMENSION(SIZE(PLES3L)) :: ZXSE, ZISNOWD
2240 REAL,
PARAMETER :: ZSNOWDEMIN = 1.e-4
2241 REAL,
PARAMETER :: ZTDIF = 15.
2247 REAL(KIND=JPRB) :: ZHOOK_HANDLE
2268 ini =
SIZE(psnowdz(:,:),1)
2269 inlvls =
SIZE(psnowdz(:,:),2)
2283 WHERE(psnowdz(:,1) > 0.0)
2288 zsnowevap(:) = ppsn3l(:)*plel3l(:)*ptstep/(plvtt(:)*
xrholw)
2289 zsnowevapx(:) = min(zsnowevap(:),psnowliq(:))
2294 psnowliq(:) = psnowliq(:) - zsnowevapx(:)
2295 psnowrho(:) = (psnowheat(:,1)-
xlmtt*
xrholw*psnowliq(:))/ &
2301 psoilcor(:) = max(0.0,xrhosmin_es-psnowrho(:))*psnowdz(:,1)/ptstep
2302 psnowrho(:) = max(xrhosmin_es,psnowrho(:))
2315 WHERE(psnowdz(:,1) > 0.0)
2322 zsnowevapx(:) = max(0.0, zsnowevap(:) - zsnowevapx(:))
2323 zsnowdz(:) = psnowdz(:,1) - zsnowevapx(:)*
xrholw/psnowrho(:)
2324 psnowdz(:,1) = max(0.0, zsnowdz(:))
2325 psoilcor(:) = psoilcor(:) + max(0.0,-zsnowdz(:))*psnowrho(:)/ptstep
2331 zsnowevaps(:) = ppsn3l(:)*ples3l(:)*ptstep/(plstt(:)*psnowrho(:))
2332 zsnowdz(:) = psnowdz(:,1) - zsnowevaps(:)
2333 psnowdz(:,1) = max(0.0, zsnowdz(:))
2334 psoilcor(:) = psoilcor(:) + max(0.0,-zsnowdz(:))*psnowrho(:)/ptstep
2341 psnowtemp(:) =
xtt + ( ((psnowheat(:,1)/max(zsnowdemin,psnowdz(:,1)
2353 psnowtemp(:) = max(min(
xtt,pta(:)-ztdif), psnowtemp(:))
2357 zsnowheat(:) = psnowheat(:,1)
2358 psnowheat(:,1) = psnowdz(:,1)*( zscap(:)*(psnowtemp(:)-
xtt)
2373 zisnowd(ji) = zisnowd(ji) + psnowdz(ji,jj)
2376 zisnowd(:) = zxse(:)/max(zisnowd(:),zsnowdemin)
2380 psnowheat(ji,jj) = psnowheat(ji,jj) - psnowdz(ji,jj)*zisnowd(ji)
2392 SUBROUTINE snow3lgone(PTSTEP,PLEL3L,PLES3L,PSNOWRHO, &
2393 PSNOWHEAT,PRADSINK,PEVAPCOR,PTHRUFAL,PGRNDFLUX, &
2394 PGFLUXSNOW,PGRNDFLUXO,PSNOWDZ,PSNOWLIQ,PSNOWTEMP, &
2413 REAL,
INTENT(IN) :: PTSTEP
2415 REAL,
DIMENSION(:),
INTENT(IN) :: PLEL3L, PLES3L, PGFLUXSNOW, &
2416 PRADSINK, PGRNDFLUXO, &
2419 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWRHO, PSNOWHEAT
2421 REAL,
DIMENSION(:),
INTENT(INOUT) :: PGRNDFLUX, PRADXS
2423 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWDZ, PSNOWLIQ, PSNOWTEMP
2425 REAL,
DIMENSION(:),
INTENT(OUT) :: PTHRUFAL
2427 REAL,
DIMENSION(:),
INTENT(OUT) :: PEVAPCOR
2441 REAL,
DIMENSION(SIZE(PLES3L)) :: ZSNOWHEATC, ZSNOWGONE_DELTA, ZSNOW
2442 REAL(KIND=JPRB) :: ZHOOK_HANDLE
2451 ini =
SIZE(psnowdz(:,:),1)
2452 inlvls =
SIZE(psnowdz(:,:),2)
2461 zsnowheatc(ji) = zsnowheatc(ji) + psnowheat(ji,jj)
2462 zsnow(ji) = zsnow(ji) + psnowdz(ji,jj)
2465 zsnowgone_delta(:) = 1.0
2475 WHERE(pgfluxsnow(:) + pradsink(:) >= (-zsnowheatc(:)/ptstep) )
2476 pgrndflux(:) = pgfluxsnow(:) + (zsnowheatc(:)/ptstep)
2477 pevapcor(:) = (plel3l(:)/plvtt(:)) + (ples3l(:)/plstt(:))
2479 zsnowgone_delta(:) = 0.0
2484 pthrufal(ji) = pthrufal(ji) + (1.0-zsnowgone_delta(ji))*psnowrho(ji
2494 psnowdz(ji,jj) = psnowdz(ji,jj
2506 SUBROUTINE snow3levapgone(PSNOWHEAT,PSNOWDZ,PSNOWRHO,PSNOWTEMP,PSNOWLIQ)
2517 USE modd_snow_par
, ONLY : xrhosmin_es, xsnowdmin, xrhosmax_es
2523 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWRHO
2524 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWDZ
2525 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWHEAT
2526 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWTEMP
2527 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWLIQ
2536 REAL,
DIMENSION(SIZE(PSNOWDZ,1)) :: ZSNOWHEAT_1D
2537 REAL,
DIMENSION(SIZE(PSNOWDZ,1)) :: ZSNOW
2538 REAL,
DIMENSION(SIZE(PSNOWDZ,1)) :: ZMASS
2540 REAL,
DIMENSION(SIZE(PSNOWDZ,1),SIZE(PSNOWDZ,2)) :: ZSCAP
2542 REAL(KIND=JPRB) :: ZHOOK_HANDLE
2548 IF (
lhook)
CALL dr_hook(
'SNOW3LEVAPGONE',0,zhook_handle)
2549 ini =
SIZE(psnowdz,1)
2550 inlvls =
SIZE(psnowdz,2)
2555 zsnowheat_1d(:) = 0.
2563 IF(psnowdz(ji,1) == 0.0)
THEN 2564 zsnowheat_1d(ji) = zsnowheat_1d(ji) +
xlmtt*
xrholw*psnowliq(ji,jj
2578 IF(zsnow(ji)/= 0.0)
THEN 2579 zsnow(ji) = max(0.5*xsnowdmin,zsnow(ji))
2580 psnowdz(ji,jj) = zsnow(ji)/
REAL(inlvls)
2581 psnowheat(ji,jj) = zsnowheat_1d(ji)/
REAL(inlvls)
2582 psnowrho(ji,jj) = zmass(ji)/zsnow(ji)
2591 IF(zsnow(ji)/= 0.0)
THEN 2592 psnowtemp(ji,jj) =
xtt + ( ((psnowheat(ji,jj)/psnowdz(ji,jj))
2600 IF (
lhook)
CALL dr_hook(
'SNOW3LEVAPGONE',1,zhook_handle)
2607 PTS, PSNOWDZ1, PSNOWDZ2, PSCOND1, PSCOND2, PSCAP, &
2608 PSWNETSNOWS, PLWNETSNOW, &
2609 PHSNOW, PLES3L, PLEL3L, PHPSNOW, &
2610 PCT, PTSTERM1, PTSTERM2, PGFLUXSNOW )
2620 REAL,
INTENT(IN) :: PTSTEP, PSNOWDZMIN
2622 REAL,
DIMENSION(:),
INTENT(IN) :: PTS, PSNOWDZ1, PSNOWDZ2, PSCOND1, PSCOND2
2626 REAL,
DIMENSION(:),
INTENT(OUT) :: PCT, PTSTERM1, PTSTERM2, PGFLUXSNOW
2630 REAL,
DIMENSION(SIZE(PTS)) :: ZSCONDA, ZA, ZB, ZC, &
2631 ZSNOWDZM1, ZSNOWDZM2
2633 REAL(KIND=JPRB) :: ZHOOK_HANDLE
2636 IF (
lhook)
CALL dr_hook(
'SNOW3LEBUDMEB',0,zhook_handle)
2644 zsnowdzm1(:) = max(psnowdz1(:), psnowdzmin)
2645 zsnowdzm2(:) = max(psnowdz2(:), psnowdzmin)
2649 pct(:) = 1.0/(pscap(:)*zsnowdzm1(:))
2653 pgfluxsnow(:) = pswnetsnows(:) + plwnetsnow(:) - phsnow(:) - ples3l(:) -
2657 zsconda(:) = (zsnowdzm1(:)+zsnowdzm2(:))/ &
2658 ((zsnowdzm1(:)/pscond1(:)) + (zsnowdzm2(:)/pscond2(:)))
2665 za(:) = zb(:) + pct(:)*(2*zsconda(:)/(zsnowdzm2(:)+zsnowdzm1(:))
2667 zc(:) = pct(:)*( pgfluxsnow(:) + phpsnow(:) )
2672 ptsterm2(:) = 2*zsconda(:)*pct(:)/(za(:)*(zsnowdzm2(:)+zsnowdzm1(:)))
2674 ptsterm1(:) = (pts(:)*zb(:) + zc(:))/za(:)
2677 IF (
lhook)
CALL dr_hook(
'SNOW3LEBUDMEB',1,zhook_handle)
subroutine snow3lrad(OMEB, PSNOWDZMIN, PSW_RAD, PSNOWALB, PSPECTRALALBEDO, PSNOWDZ, PSNOWRHO, PALB, PPERMSNOWFRAC, PZENITH, PSWNETSNOW, PSWNETSNOWS, PRADSINK, PRADXS, PSNOWAGE)
subroutine tridiag_ground(PA, PB, PC, PY, PX)
subroutine snow3ldrift(PTSTEP, PFORESTFRAC, PVMOD, PTA, PQA, PPS, PRHOA, PSNOWRHO, PSNOWDZ, PSNOW, OSNOWDRIFT_SUBLIM, PSNDRIFT
real, parameter xsw_wght_vis
subroutine surface_ri(PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PRI)
subroutine snow3lrefrz(PTSTEP, PRR, PSNOWRHO, PSNOWTEMP, PSNOWDZ, PSNOWLIQ, PTHRUFAL)
subroutine snow3levapgone(PSNOWHEAT, PSNOWDZ, PSNOWRHO, PSNOWTEMP, PSNOWLIQ)
subroutine snow3lgone(PTSTEP, PLEL3L, PLES3L, PSNOWRHO, PSNOWHEAT, PRADSINK, PEVAPCOR, PTHRUFAL, PGRNDFLUX, PGFLUXSNOW, PGRNDFLUXO, PSNOWDZ, PSNOWLIQ, PSNOWTEMP, PLVTT, PLSTT, PRADXS)
subroutine snow3levapn(PPSN3L, PLES3L, PLEL3L, PTSTEP, PSNOWTEMP, PSNOWRHO, PSNOWDZ, PSNOWLIQ, PTA, PLVTT, PLSTT, PSNOWHEAT, PSOILCOR)
subroutine snow3lebudmeb(PTSTEP, PSNOWDZMIN, PTS, PSNOWDZ1, PSNOWDZ2, PSCOND1, PSCOND2, PSCAP, PSWNETSNOWS, PLWNETSNOW, PHSNOW, PLES3L, PLEL3L, PHPSNOW, PCT, PTSTERM1, PTSTERM2, PGFLUXSNOW)
subroutine snow3lsolvt(OMEB, PTSTEP, PSNOWDZMIN, PSNOWDZ, PSCOND, PSCAP, PTG, PSOILCOND, PD_G, PRADSINK, PCT, PTERM1, PTERM2, PPET_A_COEF_T, PPEQ_A_COEF_T, PPET_B_COEF_T, PPEQ_B_COEF_T, PTA_IC, PQA_IC, PGRNDFLUX, PGRNDFLUXO, PSNOWTEMP, PSNOWFLUX)
subroutine snow3lmelt(PTSTEP, PSCAP, PSNOWTEMP, PSNOWDZ, PSNOWRHO, PSNOWLIQ, PMELTXS)
subroutine surface_aero_cond(PRI, PZREF, PUREF, PVMOD, PZ0, PZ0H, PAC, PRA, PCH)
subroutine snow3lflux(PSNOWTEMP, PSNOWDZ, PEXNS, PEXNA, PUSTAR2_IC, PTSTEP, PALBT, PSW_RAD, PEMIST, PLWUPSNOW, PLW_RAD, PLWNETSNOW, PTA, PSFCFRZ, PQA, PHPSNOW, PSNOWTEMPO1, PSNOWFLUX, PCT, PRADSINK, PQSAT, PDQSAT, PRSRA, PRN, PH, PGFLUX, PLES3L, PLEL3L, PEVAP, PUSTAR, OSFCMELT)
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)
subroutine snow3l(HSNOWRES, TPTIME, OMEB, HIMPLICIT_WIND,
subroutine snow3lebud(HSNOWRES, HIMPLICIT_WIND,
real, parameter xsw_wght_nir