1 !----------------------------------------------------------------------
3 MODULE MODULE_SF_MYJSFC
5 !----------------------------------------------------------------------
7 USE MODULE_MODEL_CONSTANTS
9 USE MODULE_DM, ONLY : WRF_DM_MAXVAL
12 !----------------------------------------------------------------------
14 ! REFERENCES: Janjic (2002), NCEP Office Note 437
17 ! MYJSFC GENERATES THE SURFACE EXCHANGE COEFFICIENTS FOR VERTICAL
18 ! TURBULENT EXCHANGE BASED UPON MONIN_OBUKHOV THEORY WITH
19 ! VARIOUS REFINEMENTS.
21 !----------------------------------------------------------------------
23 INTEGER :: ITRMX=5 ! Iteration count for sfc layer computations
25 REAL,PARAMETER :: VKARMAN=0.4
26 REAL,PARAMETER :: CAPA=R_D/CP,ELOCP=2.72E6/CP,RCAP=1./CAPA
27 REAL,PARAMETER :: GOCP02=G/CP*2.,GOCP10=G/CP*10.
28 ! REAL,PARAMETER :: EPSU2=1.E-4,EPSUST=0.07,EPSZT=1.E-5
29 ! ECMWF sets lower limit on ln(Z0h)=-20 --> EPSZT=2.e-9
30 REAL,PARAMETER :: EPSU2=1.E-6,EPSUST=1.e-9,EPSZT=1.E-28
31 REAL,PARAMETER :: A2S=17.2693882,A3S=273.16,A4S=35.86
32 REAL,PARAMETER :: SEAFC=0.98,PQ0SEA=PQ0*SEAFC
33 REAL,PARAMETER :: BETA=1./273.,EXCML=0.0001,EXCMS=0.0001 &
34 & ,GLKBR=10.,GLKBS=30.,PI=3.1415926 &
35 & ,QVISC=2.1E-5,RIC=0.505,SMALL=0.35 &
36 & ,SQPR=0.84,SQSC=0.84,SQVISC=258.2,TVISC=2.1E-5 &
37 & ,USTC=0.7,USTR=0.225,VISC=1.5E-5,FH=1.01 &
38 & ,WWST=1.2,ZTFC=1.,TOPOFAC=9.0e-6
40 REAL,PARAMETER :: BTG=BETA*G,CZIV=SMALL*GLKBS &
42 & ,RTVISC=1./TVISC,RVISC=1./VISC &
44 & ,FZQ1=RTVISC*QVISC*ZQRZT &
45 & ,FZQ2=RTVISC*QVISC*ZQRZT &
46 & ,FZT1=RVISC *TVISC*SQPR &
47 & ,FZT2=CZIV*GRRS*TVISC*SQPR &
54 !----------------------------------------------------------------------
55 INTEGER, PARAMETER :: KZTM=10001,KZTM2=KZTM-2
57 REAL :: DZETA1,DZETA2,FH01,FH02,ZTMAX1,ZTMAX2,ZTMIN1,ZTMIN2
59 REAL,DIMENSION(KZTM) :: PSIH1,PSIH2,PSIM1,PSIM2
61 !----------------------------------------------------------------------
65 !----------------------------------------------------------------------
66 SUBROUTINE MYJSFC(ITIMESTEP,HT,DZ &
67 & ,PMID,PINT,TH,T,QV,QC,U,V,Q2 &
68 & ,TSK,QSFC,THZ0,QZ0,UZ0,VZ0 &
69 & ,LOWLYR,XLAND,IVGTYP,ISURBAN,IZ0TLND &
70 & ,USTAR,ZNT,Z0BASE,PBLH,MAVAIL,RMOL &
73 & ,CHS,CHS2,CQS2,HFX,QFX,FLX_LH,FLHC,FLQC &
75 & ,U10,V10,T02,TH02,TSHLTR,TH10,Q02,QSHLTR,Q10,PSHLTR &
77 & ,IDS,IDE,JDS,JDE,KDS,KDE &
78 & ,IMS,IME,JMS,JME,KMS,KME &
79 & ,ITS,ITE,JTS,JTE,KTS,KTE)
80 !----------------------------------------------------------------------
84 !----------------------------------------------------------------------
85 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
86 & ,IMS,IME,JMS,JME,KMS,KME &
87 & ,ITS,ITE,JTS,JTE,KTS,KTE
89 INTEGER,INTENT(IN) :: ITIMESTEP
91 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: LOWLYR
93 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: HT,MAVAIL,TSK &
96 REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: DZ &
101 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: IVGTYP
102 INTEGER, INTENT(IN) :: ISURBAN
103 INTEGER, INTENT(IN) :: IZ0TLND
105 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: FLX_LH,HFX,PSHLTR &
110 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: AKHS,AKMS &
112 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: RIB
114 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: QZ0,RMOL,THZ0 &
118 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: CHS,CHS2,CQS2 &
119 & ,CPM,CT,FLHC,FLQC &
122 REAL,INTENT(IN) :: P1000mb
123 !----------------------------------------------------------------------
127 INTEGER :: I,J,K,KFLIP,LMH,LPBL,NTSD
129 REAL :: A,APESFC,B,BTGX,CWMLOW &
130 & ,DQDT,DTDIF,DTDT,DUDT,DVDT &
132 & ,P02P,P10P,PLOW,PSFC,PTOP,QLOW,QS02,QS10 &
133 & ,RAPA,RAPA02,RAPA10,RATIOMX,RDZ,SEAMASK,SM &
134 & ,T02P,T10P,TEM,TH02P,TH10P,THLOW,THELOW,THM &
135 & ,TLOW,TZ0,ULOW,VLOW,ZSL
137 REAL,DIMENSION(KTS:KTE) :: CWMK,PK,Q2K,QK,THEK,THK,TK,UK,VK
139 REAL,DIMENSION(KTS:KTE-1) :: EL,ELM
141 REAL,DIMENSION(KTS:KTE+1) :: ZHK
143 REAL,DIMENSION(ITS:ITE,JTS:JTE) :: THSK
145 REAL,DIMENSION(ITS:ITE,KTS:KTE+1,JTS:JTE) :: ZINT
147 !----------------------------------------------------------------------
148 !**********************************************************************
149 !----------------------------------------------------------------------
151 !*** MAKE PREPARATIONS
153 !----------------------------------------------------------------------
164 ZINT(I,KTE+1,J)=HT(I,J) ! Z at bottom of lowest sigma layer
168 !!!!!! UNCOMMENT THESE LINES IF USING ETA COORDINATES
170 !!!!!! ZINT(I,KTE+1,J)=1.E-4 ! Z of bottom of lowest eta layer
171 !!!!!! ZHK(KTE+1)=1.E-4 ! Z of bottom of lowest eta layer
180 ZINT(I,K,J)=ZINT(I,K+1,J)+DZ(I,KFLIP,J)
187 #if ( NMM_CORE == 1 )
198 !!! Z0(I,J)=SM*Z0SEA+(1.-SM)*(Z0(I,J)*Z0MAX+FIS*FCM+Z0LAND)
199 !!! ZNT(I,J)=SM*Z0SEA+(1.-SM)*(ZNT(I,J)*Z0MAX+FIS*FCM+Z0LAND)
212 !----------------------------------------------------------------------
213 setup_integration: DO J=JTS,JTE
214 !----------------------------------------------------------------------
218 !*** LOWEST LAYER ABOVE GROUND MUST BE FLIPPED
220 LMH=KTE-LOWLYR(I,J)+1
222 PTOP=PINT(I,KTE+1,J) ! KTE+1=KME
223 PSFC=PINT(I,LOWLYR(I,J),J)
224 ! Define THSK here (for first timestep mostly)
225 ! THSK(I,J)=TSK(I,J)/(PSFC*1.E-5)**CAPA
226 THSK(I,J)=TSK(I,J)/(PSFC/P1000mb)**CAPA
228 !*** CONVERT LAND MASK (1 FOR SEA; 0 FOR LAND)
230 SEAMASK=XLAND(I,J)-1.
232 !*** FILL 1-D VERTICAL ARRAYS
233 !*** AND FLIP DIRECTION SINCE MYJ SCHEME
234 !*** COUNTS DOWNWARD FROM THE DOMAIN'S TOP
240 RATIOMX=QV(I,KFLIP,J)
241 QK(K)=RATIOMX/(1.+RATIOMX)
242 PK(K)=PMID(I,KFLIP,J)
243 CWMK(K)=QC(I,KFLIP,J)
244 THEK(K)=(CWMK(K)*(-ELOCP/TK(K))+1.)*THK(K)
245 Q2K(K)=2.*Q2(I,KFLIP,J)
247 !*** COMPUTE THE HEIGHTS OF THE LAYER INTERFACES
252 ZHK(KTE+1)=HT(I,J) ! Z at bottom of lowest sigma layer
260 !*** FIND THE HEIGHT OF THE PBL
264 IF(Q2K(K)<=EPSQ2*FH) THEN
272 !-----------------------------------------------------------------------
273 !--------------THE HEIGHT OF THE PBL------------------------------------
274 !-----------------------------------------------------------------------
276 110 PBLH(I,J)=ZHK(LPBL)-ZHK(LMH+1)
278 !----------------------------------------------------------------------
280 !*** FIND THE SURFACE EXCHANGE COEFFICIENTS
282 !----------------------------------------------------------------------
291 ZSL=(ZHK(LMH)-ZHK(LMH+1))*0.5
292 ! APESFC=(PSFC*1.E-5)**CAPA
293 APESFC=(PSFC/P1000mb)**CAPA
294 !tgs - in ARW THZ0 is not initialized when MYJSFC is called first time
295 #if ( NMM_CORE == 1 )
300 ! if(itimestep.le.1) then
306 CALL SFCDIF(NTSD,SEAMASK,THSK(I,J),QSFC(I,J),PSFC &
307 & ,UZ0(I,J),VZ0(I,J),TZ0,TSK(I,J),THZ0(I,J),QZ0(I,J) &
308 & ,USTAR(I,J),ZNT(I,J),Z0BASE(I,J),CT(I,J),RMOL(I,J) &
309 & ,AKMS(I,J),AKHS(I,J),RIB(I,J),PBLH(I,J),MAVAIL(I,J) &
310 & ,IVGTYP(I,J),ISURBAN,IZ0TLND &
311 & ,CHS(I,J),CHS2(I,J),CQS2(I,J) &
312 & ,HFX(I,J),QFX(I,J),FLX_LH(I,J) &
313 & ,FLHC(I,J),FLQC(I,J),QGH(I,J),CPM(I,J) &
314 & ,ULOW,VLOW,TLOW,THLOW,THELOW,QLOW,CWMLOW &
316 & ,U10(I,J),V10(I,J),TSHLTR(I,J),TH10(I,J) &
317 & ,QSHLTR(I,J),Q10(I,J),PSHLTR(I,J) &
318 & ,IDS,IDE,JDS,JDE,KDS,KDE &
319 & ,IMS,IME,JMS,JME,KMS,KME &
320 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j,ZHK(LMH+1))
322 !*** REMOVE SUPERATURATION AT 2M AND 10M
327 TH02(I,J)=TSHLTR(I,J)
329 RAPA02=RAPA-GOCP02/TH02P
330 RAPA10=RAPA-GOCP10/TH10P
334 ! 1 may 06 tgs T02(I,J) = T02P
335 T02(I,J) = TH02(I,J)*APESFC
337 ! P02P=(RAPA02**RCAP)*1.E5
338 ! P10P=(RAPA10**RCAP)*1.E5
339 P02P=(RAPA02**RCAP)*P1000mb
340 P10P=(RAPA10**RCAP)*P1000mb
342 QS02=PQ0/P02P*EXP(A2*(T02P-A3)/(T02P-A4))
343 QS10=PQ0/P10P*EXP(A2*(T10P-A3)/(T10P-A4))
345 IF(QSHLTR(I,J)>QS02)QSHLTR(I,J)=QS02
346 IF(Q10 (I,J)>QS10)Q10 (I,J)=QS10
347 Q02(I,J)=QSHLTR(I,J)/(1.-QSHLTR(I,J))
348 !----------------------------------------------------------------------
352 !----------------------------------------------------------------------
353 ENDDO setup_integration
354 !----------------------------------------------------------------------
356 END SUBROUTINE MYJSFC
357 !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
358 !----------------------------------------------------------------------
359 SUBROUTINE SFCDIF(NTSD,SEAMASK,THS,QS,PSFC &
360 & ,UZ0,VZ0,TZ0,TSK,THZ0,QZ0 &
361 & ,USTAR,Z0,Z0BASE,CT,RLMO,AKMS,AKHS,RIB,PBLH,WETM &
362 & ,VEGTYP,ISURBAN,IZ0TLND &
363 & ,CHS,CHS2,CQS2,HFX,QFX,FLX_LH,FLHC,FLQC,QGH,CPM &
364 & ,ULOW,VLOW,TLOW,THLOW,THELOW,QLOW,CWMLOW &
366 & ,U10,V10,TH02,TH10,Q02,Q10,PSHLTR &
367 & ,IDS,IDE,JDS,JDE,KDS,KDE &
368 & ,IMS,IME,JMS,JME,KMS,KME &
369 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j,ZSFC)
370 ! ****************************************************************
374 ! ****************************************************************
375 !----------------------------------------------------------------------
379 !----------------------------------------------------------------------
380 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
381 & ,IMS,IME,JMS,JME,KMS,KME &
382 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j
384 INTEGER,INTENT(IN) :: NTSD
386 REAL,INTENT(IN) :: CWMLOW,PBLH,PLOW,QLOW,PSFC,SEAMASK,ZSFC &
387 & ,THELOW,THLOW,THS,TSK,TLOW,TZ0,ULOW,VLOW,WETM,ZSL &
389 INTEGER, INTENT(IN) :: VEGTYP, ISURBAN, IZ0TLND
391 REAL,INTENT(OUT) :: CHS,CHS2,CPM,CQS2,CT,FLHC,FLQC,FLX_LH,HFX &
392 & ,PSHLTR,Q02,Q10,QFX,QGH,RIB,RLMO &
395 REAL,INTENT(INOUT) :: AKHS,AKMS,QZ0,THZ0,USTAR,UZ0,VZ0,Z0,QS
396 !----------------------------------------------------------------------
402 REAL :: A,B,BTGH,BTGX,CXCHL,CXCHS,CZETMAX,DTHV,DU2,ELFC,FCT &
403 & ,HLFLX,HSFLX,HV,PSH02,PSH10,PSHZ,PSHZL,PSM10,PSMZ,PSMZL &
404 & ,RDZ,RDZT,RLMA,RLMN,RLMP &
405 & ,RLOGT,RLOGU,RWGH,RZ,RZST,RZSU,SIMH,SIMM,TEM,THM &
406 & ,UMFLX,USTARK,VMFLX,WGHT,WGHTT,WGHTQ,WSTAR2 &
407 & ,X,XLT,XLT4,XLU,XLU4,XT,XT4,XU,XU4,ZETALT,ZETALU &
408 & ,ZETAT,ZETAU,ZQ,ZSLT,ZSLU,ZT,ZU,TOPOTERM,ZZIL
412 REAL :: AKHS02,AKHS10,AKMS02,AKMS10,EKMS10,QSAT10,QSAT2 &
413 & ,RLNT02,RLNT10,RLNU10,SIMH02,SIMH10,SIMM10,T02,T10 &
414 & ,TERM1,RLOW,U10E,V10E,WSTAR,XLT02,XLT024,XLT10 &
415 & ,XLT104,XLU10,XLU104,XU10,XU104,ZT02,ZT10,ZTAT02,ZTAT10 &
416 & ,ZTAU,ZTAU10,ZU10,ZUUZ
419 !----------------------------------------------------------------------
420 !**********************************************************************
421 !----------------------------------------------------------------------
435 !----------------------------------------------------------------------
439 !----------------------------------------------------------------------
443 !----------------------------------------------------------------------
445 !----------------------------------------------------------------------
446 Z0=MAX(USTFC*USTAR*USTAR,1.59E-5)
448 !*** VISCOUS SUBLAYER, JANJIC MWR 1994
450 !----------------------------------------------------------------------
452 !----------------------------------------------------------------------
456 #if ( NMM_CORE == 1 )
467 ZU=FZU1*SQRT(SQRT(Z0*USTAR*RVISC))/USTAR
470 UZ0=(ULOW*RWGH+UZ0)*0.5
471 VZ0=(VLOW*RWGH+VZ0)*0.5
478 #if ( NMM_CORE == 1 )
484 THZ0=((WGHTT*THLOW+THS)/(WGHTT+1.)+THZ0)*0.5
485 QZ0=((WGHTQ*QLOW+QS)/(WGHTQ+1.)+QZ0)*0.5
487 THZ0=(WGHTT*THLOW+THS)/(WGHTT+1.)
488 QZ0=(WGHTQ*QLOW+QS)/(WGHTQ+1.)
493 IF(USTAR>=USTR.AND.USTAR<USTC)THEN
498 ZT=FZT2*SQRT(SQRT(Z0*USTAR*RVISC))/USTAR
503 #if ( NMM_CORE == 1 )
510 THZ0=((WGHTT*THLOW+THS)/(WGHTT+1.)+THZ0)*0.5
511 QZ0=((WGHTQ*QLOW+QS)/(WGHTQ+1.)+QZ0)*0.5
513 THZ0=(WGHTT*THLOW+THS)/(WGHTT+1.)
514 QZ0=(WGHTQ*QLOW+QS)/(WGHTQ+1.)
518 !----------------------------------------------------------------------
520 !----------------------------------------------------------------------
530 !----------------------------------------------------------------------
532 !----------------------------------------------------------------------
534 THM=(THELOW+THZ0)*0.5
537 B=(ELOCP/TEM-1.-P608)*THM
539 DTHV=((THELOW-THZ0)*((QLOW+QZ0+CWMLOW)*(0.5*P608)+1.) &
540 & +(QLOW-QZ0+CWMLOW)*A+CWMLOW*B)
542 DU2=MAX((ULOW-UZ0)**2+(VLOW-VZ0)**2,EPSU2)
543 RIB=BTGX*DTHV*ZSL/DU2
544 !----------------------------------------------------------------------
546 !----------------------------------------------------------------------
547 ! AKMS=MAX( VISC*RDZ,CXCHS)
548 ! AKHS=MAX(TVISC*RDZ,CXCHS)
549 !----------------------------------------------------------------------
550 ! ELSE ! turbulent branch
551 !----------------------------------------------------------------------
561 !----------------------------------------------------------------------
562 !*** 1./MONIN-OBUKHOV LENGTH
563 !----------------------------------------------------------------------
565 RLMO=ELFC*AKHS*DTHV/USTAR**3
572 ZETALU=MIN(MAX(ZETALU,ZTMIN1),ZTMAX1)
573 ZETALT=MIN(MAX(ZETALT,ZTMIN1),ZTMAX1)
574 ZETAU=MIN(MAX(ZETAU,ZTMIN1/RZSU),ZTMAX1/RZSU)
575 ZETAT=MIN(MAX(ZETAT,ZTMIN1/RZST),ZTMAX1/RZST)
577 !----------------------------------------------------------------------
579 !----------------------------------------------------------------------
581 RZ=(ZETAU-ZTMIN1)/DZETA1
586 PSMZ=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1)
588 RZ=(ZETALU-ZTMIN1)/DZETA1
593 PSMZL=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1)
595 SIMM=PSMZL-PSMZ+RLOGU
597 RZ=(ZETAT-ZTMIN1)/DZETA1
602 PSHZ=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
604 RZ=(ZETALT-ZTMIN1)/DZETA1
609 PSHZL=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
611 SIMH=(PSHZL-PSHZ+RLOGT)*FH01
613 !----------------------------------------------------------------------
615 !!!!!!!!!!!!!!!!!!!!!
616 AKMS=MAX(USTARK/SIMM,CXCHS)
617 AKHS=MAX(USTARK/SIMH,CXCHS)
619 !----------------------------------------------------------------------
620 !*** BELJAARS CORRECTION FOR USTAR
621 !----------------------------------------------------------------------
624 WSTAR2=WWST2*ABS(BTGH*AKHS*DTHV)**(2./3.) !zj
628 USTAR=MAX(SQRT(AKMS*SQRT(DU2+WSTAR2)),EPSUST)
630 !----------------------------------------------------------------------
631 ! ENDIF ! End of turbulent branch
632 !----------------------------------------------------------------------
634 ENDDO ! End of the iteration loop over sea points
636 !----------------------------------------------------------------------
640 !----------------------------------------------------------------------
644 !----------------------------------------------------------------------
658 !----------------------------------------------------------------------
660 THM=(THELOW+THZ0)*0.5
663 B=(ELOCP/TEM-1.-P608)*THM
665 DTHV=((THELOW-THZ0)*((QLOW+QZ0+CWMLOW)*(0.5*P608)+1.) &
666 & +(QLOW-QZ0+CWMLOW)*A+CWMLOW*B)
668 DU2=MAX((ULOW-UZ0)**2+(VLOW-VZ0)**2,EPSU2)
669 RIB=BTGX*DTHV*ZSL/DU2
670 !----------------------------------------------------------------------
672 ! AKMS=MAX( VISC*RDZ,CXCHL)
673 ! AKHS=MAX(TVISC*RDZ,CXCHL)
674 !----------------------------------------------------------------------
675 ! ELSE ! Turbulent branch
676 !----------------------------------------------------------------------
683 ZSLT=ZSL+ZU ! u,v and t are at the same level
685 IF ( (IZ0TLND==0) .or. (VEGTYP == ISURBAN) ) THEN
686 ! Just use the original CZIL value.
689 ! Modify CZIL according to Chen & Zhang, 2009
690 ! CZIL = 10 ** -0.40 H, ( where H = 10*Zo )
691 CZIL = 10.0 ** ( -0.40 * ( Z0 / 0.07 ) )
693 ZILFC=-CZIL*VKARMAN*SQVISC
695 !----------------------------------------------------------------------
697 !mp Topo modification of ZILFC term
699 ! TOPOTERM=TOPOFAC*ZSFC**2.
700 ! TOPOTERM=MAX(TOPOTERM,3.0)
702 ! RIB modification to ZILFC term
708 ! ZZIL=ZILFC*TOPOTERM
710 ZZIL=ZILFC*(1.0+(RIB/RIC)*(RIB/RIC)*CZETMAX)
712 ZZIL=ZILFC*(1.0+CZETMAX)
719 !----------------------------------------------------------------------
721 land_point_iteration: DO ITR=1,ITRMX
723 !----------------------------------------------------------------------
724 !*** ZILITINKEVITCH FIX FOR ZT
725 !----------------------------------------------------------------------
727 ! oldform ZT=MAX(EXP(ZZIL*SQRT(USTAR*ZU))*ZU,EPSZT)
728 ZT=MAX(EXP(ZZIL*SQRT(USTAR*Z0BASE))*Z0BASE,EPSZT)
733 !----------------------------------------------------------------------
734 !*** 1./MONIN-OBUKHOV LENGTH-SCALE
735 !----------------------------------------------------------------------
737 RLMO=ELFC*AKHS*DTHV/USTAR**3
743 ZETALU=MIN(MAX(ZETALU,ZTMIN2),ZTMAX2)
744 ZETALT=MIN(MAX(ZETALT,ZTMIN2),ZTMAX2)
745 ZETAU=MIN(MAX(ZETAU,ZTMIN2/RZSU),ZTMAX2/RZSU)
746 ZETAT=MIN(MAX(ZETAT,ZTMIN2/RZST),ZTMAX2/RZST)
748 !----------------------------------------------------------------------
750 !----------------------------------------------------------------------
752 RZ=(ZETAU-ZTMIN2)/DZETA2
757 PSMZ=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
759 RZ=(ZETALU-ZTMIN2)/DZETA2
764 PSMZL=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
766 SIMM=PSMZL-PSMZ+RLOGU
768 RZ=(ZETAT-ZTMIN2)/DZETA2
773 PSHZ=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
775 RZ=(ZETALT-ZTMIN2)/DZETA2
780 PSHZL=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
782 SIMH=(PSHZL-PSHZ+RLOGT)*FH02
783 !----------------------------------------------------------------------
785 AKMS=MAX(USTARK/SIMM,CXCHL)
786 AKHS=MAX(USTARK/SIMH,CXCHL)
788 !----------------------------------------------------------------------
789 !*** BELJAARS CORRECTION FOR USTAR
790 !----------------------------------------------------------------------
793 WSTAR2=WWST2*ABS(BTGH*AKHS*DTHV)**(2./3.) !zj
798 USTAR=MAX(SQRT(AKMS*SQRT(DU2+WSTAR2)),EPSUST)
800 !----------------------------------------------------------------------
801 ENDDO land_point_iteration
802 !----------------------------------------------------------------------
804 ! ENDIF ! End of turbulant branch over land
806 !----------------------------------------------------------------------
808 ENDIF ! End of land/sea branch
810 !----------------------------------------------------------------------
811 !*** COUNTERGRADIENT FIX
812 !----------------------------------------------------------------------
816 ! FCT=-10.*(BTGX)**(-1./3.)
817 ! CT=FCT*(HV/(PBLH*PBLH))**(2./3.)
822 !----------------------------------------------------------------------
823 !----------------------------------------------------------------------
824 !*** THE FOLLOWING DIAGNOSTIC BLOCK PRODUCES 2-m and 10-m VALUES
825 !*** FOR TEMPERATURE, MOISTURE, AND WINDS. IT IS DONE HERE SINCE
826 !*** THE VARIOUS QUANTITIES NEEDED FOR THE COMPUTATION ARE LOST
827 !*** UPON EXIT FROM THE ROTUINE.
828 !----------------------------------------------------------------------
829 !----------------------------------------------------------------------
831 WSTAR=SQRT(WSTAR2)/WWST
833 UMFLX=AKMS*(ULOW -UZ0 )
834 VMFLX=AKMS*(VLOW -VZ0 )
835 HSFLX=AKHS*(THLOW-THZ0)
836 HLFLX=AKHS*(QLOW -QZ0 )
837 !----------------------------------------------------------------------
839 !----------------------------------------------------------------------
840 ! IF(SEAMASK>0.5)THEN
841 ! AKMS10=MAX( VISC/10.,CXCHS)
842 ! AKHS02=MAX(TVISC/02.,CXCHS)
843 ! AKHS10=MAX(TVISC/10.,CXCHS)
845 ! AKMS10=MAX( VISC/10.,CXCHL)
846 ! AKHS02=MAX(TVISC/02.,CXCHL)
847 ! AKHS10=MAX(TVISC/10.,CXCHL)
849 !----------------------------------------------------------------------
851 !----------------------------------------------------------------------
864 !----------------------------------------------------------------------
866 !----------------------------------------------------------------------
870 !----------------------------------------------------------------------
871 ZTAU10=MIN(MAX(ZTAU10,ZTMIN1),ZTMAX1)
872 ZTAT02=MIN(MAX(ZTAT02,ZTMIN1),ZTMAX1)
873 ZTAT10=MIN(MAX(ZTAT10,ZTMIN1),ZTMAX1)
874 !----------------------------------------------------------------------
875 RZ=(ZTAU10-ZTMIN1)/DZETA1
880 PSM10=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1)
882 SIMM10=PSM10-PSMZ+RLNU10
884 RZ=(ZTAT02-ZTMIN1)/DZETA1
889 PSH02=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
891 SIMH02=(PSH02-PSHZ+RLNT02)*FH01
893 RZ=(ZTAT10-ZTMIN1)/DZETA1
898 PSH10=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
900 SIMH10=(PSH10-PSHZ+RLNT10)*FH01
902 AKMS10=MAX(USTARK/SIMM10,CXCHS)
903 AKHS02=MAX(USTARK/SIMH02,CXCHS)
904 AKHS10=MAX(USTARK/SIMH10,CXCHS)
906 !----------------------------------------------------------------------
908 !----------------------------------------------------------------------
912 !----------------------------------------------------------------------
913 ZTAU10=MIN(MAX(ZTAU10,ZTMIN2),ZTMAX2)
914 ZTAT02=MIN(MAX(ZTAT02,ZTMIN2),ZTMAX2)
915 ZTAT10=MIN(MAX(ZTAT10,ZTMIN2),ZTMAX2)
916 !----------------------------------------------------------------------
917 RZ=(ZTAU10-ZTMIN2)/DZETA2
922 PSM10=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
924 SIMM10=PSM10-PSMZ+RLNU10
926 RZ=(ZTAT02-ZTMIN2)/DZETA2
931 PSH02=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
933 SIMH02=(PSH02-PSHZ+RLNT02)*FH02
935 RZ=(ZTAT10-ZTMIN2)/DZETA2
940 PSH10=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
942 SIMH10=(PSH10-PSHZ+RLNT10)*FH02
944 AKMS10=MAX(USTARK/SIMM10,CXCHL)
945 AKHS02=MAX(USTARK/SIMH02,CXCHL)
946 AKHS10=MAX(USTARK/SIMH10,CXCHL)
947 !----------------------------------------------------------------------
949 !----------------------------------------------------------------------
951 !----------------------------------------------------------------------
952 U10 =UMFLX/AKMS10+UZ0
953 V10 =VMFLX/AKMS10+VZ0
954 TH02=HSFLX/AKHS02+THZ0
956 !*** BE CERTAIN THAT THE 2-M THETA AND 10-M THETA ARE BRACKETED BY
957 !*** THE VALUES OF THZ0 AND THLOW.
959 IF(THLOW>THZ0.AND.(TH02<THZ0.OR.TH02>THLOW).OR. &
960 THLOW<THZ0.AND.(TH02>THZ0.OR.TH02<THLOW))THEN
961 TH02=THZ0+2.*RDZ*(THLOW-THZ0)
964 TH10=HSFLX/AKHS10+THZ0
966 IF(THLOW>THZ0.AND.(TH10<THZ0.OR.TH10>THLOW).OR. &
967 THLOW<THZ0.AND.(TH10>THZ0.OR.TH10<THLOW))THEN
968 TH10=THZ0+10.*RDZ*(THLOW-THZ0)
971 Q02 =HLFLX/AKHS02+QZ0
972 Q10 =HLFLX/AKHS10+QZ0
974 PSHLTR=PSFC*EXP(TERM1)
976 !----------------------------------------------------------------------
977 !*** COMPUTE "EQUIVALENT" Z0 TO APPROXIMATE LOCAL SHELTER READINGS.
978 !----------------------------------------------------------------------
985 !1st ZUUZ=MIN(0.5*ZU,0.1)
986 !1st ZU=MAX(0.1*ZU,ZUUZ)
987 !tst ZUUZ=amin1(ZU*0.50,0.3)
988 !tst ZU=amax1(ZU*0.3,ZUUZ)
990 ZUUZ=AMIN1(ZU*0.50,0.18)
991 ZU=AMAX1(ZU*0.35,ZUUZ)
1000 ZTAU10=MIN(MAX(ZTAU10,ZTMIN2),ZTMAX2)
1001 ZETAU=MIN(MAX(ZETAU,ZTMIN2/RZSU),ZTMAX2/RZSU)
1003 RZ=(ZTAU10-ZTMIN2)/DZETA2
1008 PSM10=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
1009 SIMM10=PSM10-PSMZ+RLNU10
1010 EKMS10=MAX(USTARK/SIMM10,CXCHL)
1012 U10E=UMFLX/EKMS10+UZ0
1013 V10E=VMFLX/EKMS10+VZ0
1020 !----------------------------------------------------------------------
1021 !*** SET OTHER WRF DRIVER ARRAYS
1022 !----------------------------------------------------------------------
1024 RLOW=PLOW/(R_D*TLOW)
1029 QFX=-RLOW*HLFLX*WETM
1033 !!! QGH=PQ0/PSHLTR*EXP(A2S*(TSK-A3S)/(TSK-A4S))
1034 QGH=((1.-SEAMASK)*PQ0+SEAMASK*PQ0SEA) &
1035 & /PLOW*EXP(A2S*(TLOW-A3S)/(TLOW-A4S))
1036 QGH=QGH/(1.-QGH) !Convert to mixing ratio
1037 CPM=CP*(1.+0.8*QLOW)
1039 !*** DO NOT COMPUTE QS OVER LAND POINTS HERE SINCE IT IS
1040 !*** A PROGNOSTIC VARIABLE THERE. IT IS OKAY TO USE IT
1041 !*** AS A DIAGNOSTIC OVER WATER SINCE IT WILL CAUSE NO
1042 !*** INTERFERENCE BEFORE BEING RECOMPUTED IN MYJPBL.
1046 & *EXP(A2S*(TSK-A3S)/(TSK-A4S))
1049 !----------------------------------------------------------------------
1051 END SUBROUTINE SFCDIF
1053 !----------------------------------------------------------------------
1054 SUBROUTINE MYJSFCINIT(LOWLYR,USTAR,Z0 &
1055 & ,SEAMASK,XICE,IVGTYP,RESTART &
1056 & ,ALLOWED_TO_READ &
1057 & ,IDS,IDE,JDS,JDE,KDS,KDE &
1058 & ,IMS,IME,JMS,JME,KMS,KME &
1059 & ,ITS,ITE,JTS,JTE,KTS,KTE)
1060 !----------------------------------------------------------------------
1062 !----------------------------------------------------------------------
1063 LOGICAL,INTENT(IN) :: RESTART,ALLOWED_TO_READ
1065 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
1066 & ,IMS,IME,JMS,JME,KMS,KME &
1067 & ,ITS,ITE,JTS,JTE,KTS,KTE
1069 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: IVGTYP
1071 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: LOWLYR
1073 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: SEAMASK,XICE
1075 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: USTAR,Z0
1077 REAL,DIMENSION(0:30) :: VZ0TBL
1078 REAL,DIMENSION(0:30) :: VZ0TBL_24
1080 INTEGER :: I,IDUM,IRECV,J,JDUM,K,ITF,JTF,KTF,MAXGBL_IVGTYP &
1081 &, MAXLOC_IVGTYP,MPI_COMM_COMP
1083 ! INTEGER :: MPI_INTEGER,MPI_MAX
1085 REAL :: SM,X,ZETA1,ZETA2,ZRNG1,ZRNG2
1087 REAL :: PIHF=3.1415926/2.,EPS=1.E-6
1088 !----------------------------------------------------------------------
1091 & 2.653,0.826,0.563,1.089,0.854,0.856,0.035,0.238,0.065,0.076 &
1092 & ,0.011,0.035,0.011,0.000,0.000,0.000,0.000,0.000,0.000,0.000 &
1093 & ,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000/)
1096 & 1.00, 0.07, 0.07, 0.07, 0.07, 0.15, &
1097 & 0.08, 0.03, 0.05, 0.86, 0.80, 0.85, &
1098 & 2.65, 1.09, 0.80, 0.001, 0.04, 0.05, &
1099 & 0.01, 0.04, 0.06, 0.05, 0.03, 0.001, &
1100 & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 /)
1102 !----------------------------------------------------------------------
1109 !*** FOR NOW, ASSUME SIGMA MODE FOR LOWEST MODEL LAYER
1117 !----------------------------------------------------------------------
1120 IF(.NOT.RESTART)THEN
1121 ! CALL WRF_GET_DM_COMMUNICATOR(MPI_COMM_COMP)
1122 ! MAXLOC_IVGTYP=MAXVAL(IVGTYP)
1123 ! CALL MPI_ALLREDUCE(MAXLOC_IVGTYP,MAXGBL_IVGTYP,1,MPI_INTEGER &
1124 ! &, MPI_MAX,MPI_COMM_COMP,IRECV)
1125 MAXGBL_IVGTYP=MAXVAL(IVGTYP)
1127 CALL WRF_DM_MAXVAL(MAXGBL_IVGTYP,IDUM,JDUM)
1130 IF (MAXGBL_IVGTYP<13) THEN
1134 IF(SM+XICE(I,J)<0.5)THEN
1135 Z0(I,J)=VZ0TBL(IVGTYP(I,J))
1145 IF(SM+XICE(I,J)<0.5)THEN
1146 Z0(I,J)=VZ0TBL_24(IVGTYP(I,J))
1151 ENDIF ! Vegtype check
1153 ENDIF ! Restart check
1156 !----------------------------------------------------------------------
1157 IF(.NOT.RESTART)THEN
1164 !----------------------------------------------------------------------
1166 !*** COMPUTE SURFACE LAYER INTEGRAL FUNCTIONS
1168 !----------------------------------------------------------------------
1184 DZETA1=ZRNG1/(KZTM-1)
1185 DZETA2=ZRNG2/(KZTM-1)
1187 !----------------------------------------------------------------------
1188 !*** FUNCTION DEFINITION LOOP
1189 !----------------------------------------------------------------------
1196 !----------------------------------------------------------------------
1198 !----------------------------------------------------------------------
1202 !----------------------------------------------------------------------
1203 !*** PAULSON 1970 FUNCTIONS
1204 !----------------------------------------------------------------------
1205 X=SQRT(SQRT(1.-16.*ZETA1))
1207 PSIM1(K)=-2.*LOG((X+1.)/2.)-LOG((X*X+1.)/2.)+2.*ATAN(X)-PIHF
1208 PSIH1(K)=-2.*LOG((X*X+1.)/2.)
1210 !----------------------------------------------------------------------
1212 !----------------------------------------------------------------------
1216 !----------------------------------------------------------------------
1217 !*** PAULSON 1970 FUNCTIONS
1218 !----------------------------------------------------------------------
1222 !----------------------------------------------------------------------
1223 !*** HOLTSLAG AND DE BRUIN 1988
1224 !----------------------------------------------------------------------
1226 PSIM1(K)=0.7*ZETA1+0.75*ZETA1*(6.-0.35*ZETA1)*EXP(-0.35*ZETA1)
1227 PSIH1(K)=0.7*ZETA1+0.75*ZETA1*(6.-0.35*ZETA1)*EXP(-0.35*ZETA1)
1228 !----------------------------------------------------------------------
1232 !----------------------------------------------------------------------
1234 !----------------------------------------------------------------------
1238 !----------------------------------------------------------------------
1239 !*** PAULSON 1970 FUNCTIONS
1240 !----------------------------------------------------------------------
1242 X=SQRT(SQRT(1.-16.*ZETA2))
1244 PSIM2(K)=-2.*LOG((X+1.)/2.)-LOG((X*X+1.)/2.)+2.*ATAN(X)-PIHF
1245 PSIH2(K)=-2.*LOG((X*X+1.)/2.)
1246 !----------------------------------------------------------------------
1248 !----------------------------------------------------------------------
1252 !----------------------------------------------------------------------
1253 !*** PAULSON 1970 FUNCTIONS
1254 !----------------------------------------------------------------------
1259 !----------------------------------------------------------------------
1260 !*** HOLTSLAG AND DE BRUIN 1988
1261 !----------------------------------------------------------------------
1263 PSIM2(K)=0.7*ZETA2+0.75*ZETA2*(6.-0.35*ZETA2)*EXP(-0.35*ZETA2)
1264 PSIH2(K)=0.7*ZETA2+0.75*ZETA2*(6.-0.35*ZETA2)*EXP(-0.35*ZETA2)
1265 !----------------------------------------------------------------------
1269 !----------------------------------------------------------------------
1277 !----------------------------------------------------------------------
1279 !----------------------------------------------------------------------
1282 !----------------------------------------------------------------------
1284 END SUBROUTINE MYJSFCINIT
1286 !----------------------------------------------------------------------
1288 END MODULE MODULE_SF_MYJSFC
1290 !----------------------------------------------------------------------