1 !----------------------------------------------------------------------
3 MODULE MODULE_SF_QNSESFC
5 !----------------------------------------------------------------------
7 USE MODULE_MODEL_CONSTANTS
8 USE MODULE_DM, ONLY : WRF_DM_MAXVAL
10 !----------------------------------------------------------------------
12 ! REFERENCES: Janjic (2002), NCEP Office Note 437
15 ! MYJSFC GENERATES THE SURFACE EXCHANGE COEFFICIENTS FOR VERTICAL
16 ! TURBULENT EXCHANGE BASED UPON MONIN_OBUKHOV THEORY WITH
17 ! VARIOUS REFINEMENTS.
19 !----------------------------------------------------------------------
21 INTEGER :: ITRMX=5 ! Iteration count for sfc layer computations
23 REAL,PARAMETER :: EPSQ2L=0.01
24 REAL,PARAMETER :: VKARMAN=0.4
25 REAL,PARAMETER :: CAPA=R_D/CP,ELOCP=2.72E6/CP,RCAP=1./CAPA
26 REAL,PARAMETER :: GOCP02=G/CP*2.,GOCP10=G/CP*10.
27 ! REAL,PARAMETER :: EPSU2=1.E-4,EPSUST=0.07,EPSZT=1.E-5
28 ! ECMWF sets lower limit on ln(Z0h)=-20 --> EPSZT=2.E-9
29 REAL,PARAMETER :: EPSU2=1.E-6,EPSUST=1.E-9,EPSZT=1.E-28
30 REAL,PARAMETER :: A2S=17.2693882,A3S=273.16,A4S=35.86
31 REAL,PARAMETER :: SEAFC=0.98,PQ0SEA=PQ0*SEAFC
32 REAL,PARAMETER :: BETA=1./273.,CZIL=0.1,EXCML=0.0001,EXCMS=0.0001 &
33 !old REAL,PARAMETER :: BETA=1./273.,CZIL=0.1,EXCML=0.001,EXCMS=0.001 &
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=0.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 & ,ZILFC=-CZIL*VKARMAN*SQVISC
56 !----------------------------------------------------------------------
57 INTEGER, PARAMETER :: KZTM=10001,KZTM2=KZTM-2
59 REAL :: DZETA1,DZETA2,FH01,FH02,ZTMAX1,ZTMAX2,ZTMIN1,ZTMIN2
61 REAL,DIMENSION(KZTM) :: PSIH1,PSIH2,PSIM1,PSIM2
63 !----------------------------------------------------------------------
67 !----------------------------------------------------------------------
68 SUBROUTINE QNSESFC(ITIMESTEP,HT,DZ &
69 & ,PMID,PINT,TH,T,QV,QC,U,V,Q2 &
70 & ,TSK,QSFC,THZ0,QZ0,UZ0,VZ0 &
72 & ,USTAR,ZNT,Z0BASE,PBLH,MAVAIL,RMOL &
75 & ,CHS,CHS2,CQS2,HFX,QFX,FLX_LH,FLHC,FLQC &
77 & ,U10,V10,T02,TH02,TSHLTR,TH10,Q02,QSHLTR,Q10,PSHLTR &
79 & ,IDS,IDE,JDS,JDE,KDS,KDE &
80 & ,IMS,IME,JMS,JME,KMS,KME &
81 & ,ITS,ITE,JTS,JTE,KTS,KTE,SCM_FORCE_FLUX )
82 !----------------------------------------------------------------------
86 !----------------------------------------------------------------------
87 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
88 & ,IMS,IME,JMS,JME,KMS,KME &
89 & ,ITS,ITE,JTS,JTE,KTS,KTE
91 INTEGER,INTENT(IN) :: ITIMESTEP
93 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: LOWLYR
95 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: HT,MAVAIL,TSK &
98 REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: DZ &
104 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: PSHLTR,Q10,QSHLTR &
107 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: U10E,V10E
108 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: FLX_LH,HFX,QFX
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 INTEGER, OPTIONAL, INTENT(IN ) :: SCM_FORCE_FLUX ! JP
124 !----------------------------------------------------------------------
128 INTEGER :: I,J,K,KFLIP,LMH,LPBL,NTSD
130 REAL :: A,APESFC,B,BTGX,CWMLOW &
131 & ,DQDT,DTDIF,DTDT,DUDT,DVDT &
133 & ,P02P,P10P,PLOW,PSFC,PTOP,QLOW,QS02,QS10 &
134 & ,RAPA,RAPA02,RAPA10,RATIOMX,RDZ,SEAMASK,SM &
135 & ,T02P,T10P,TEM,TH02P,TH10P,THLOW,THELOW,THM &
136 & ,TLOW,TZ0,ULOW,VLOW,ZSL
138 REAL,DIMENSION(KTS:KTE) :: CWMK,PK,Q2K,QK,THEK,THK,TK,UK,VK
140 REAL,DIMENSION(KTS:KTE-1) :: EL,ELM
142 REAL,DIMENSION(KTS:KTE+1) :: ZHK
144 REAL,DIMENSION(ITS:ITE,JTS:JTE) :: THSK
146 REAL,DIMENSION(ITS:ITE,KTS:KTE+1,JTS:JTE) :: ZINT
148 !----------------------------------------------------------------------
149 !**********************************************************************
150 !----------------------------------------------------------------------
152 !*** MAKE PREPARATIONS
154 !----------------------------------------------------------------------
165 ZINT(I,KTE+1,J)=HT(I,J) ! Z at bottom of lowest sigma layer
169 !!!!!! UNCOMMENT THESE LINES IF USING ETA COORDINATES
171 !!!!!! ZINT(I,KTE+1,J)=1.E-4 ! Z of bottom of lowest eta layer
172 !!!!!! ZHK(KTE+1)=1.E-4 ! Z of bottom of lowest eta layer
181 ZINT(I,K,J)=ZINT(I,K+1,J)+DZ(I,KFLIP,J)
194 !!! Z0(I,J)=SM*Z0SEA+(1.-SM)*(Z0(I,J)*Z0MAX+FIS*FCM+Z0LAND)
195 !!! ZNT(I,J)=SM*Z0SEA+(1.-SM)*(ZNT(I,J)*Z0MAX+FIS*FCM+Z0LAND)
208 !----------------------------------------------------------------------
209 setup_integration: DO J=JTS,JTE
210 !----------------------------------------------------------------------
214 !*** LOWEST LAYER ABOVE GROUND MUST BE FLIPPED
216 LMH=KTE-LOWLYR(I,J)+1
218 PTOP=PINT(I,KTE+1,J) ! KTE+1=KME
219 PSFC=PINT(I,LOWLYR(I,J),J)
220 ! Define THSK here (for first timestep mostly)
221 THSK(I,J)=TSK(I,J)/(PSFC*1.E-5)**CAPA
223 !*** CONVERT LAND MASK (1 FOR SEA; 0 FOR LAND)
225 SEAMASK=XLAND(I,J)-1.
227 !*** FILL 1-D VERTICAL ARRAYS
228 !*** AND FLIP DIRECTION SINCE MYJ SCHEME
229 !*** COUNTS DOWNWARD FROM THE DOMAIN'S TOP
235 RATIOMX=QV(I,KFLIP,J)
236 QK(K)=RATIOMX/(1.+RATIOMX)
237 PK(K)=PMID(I,KFLIP,J)
238 CWMK(K)=QC(I,KFLIP,J)
239 THEK(K)=(CWMK(K)*(-ELOCP/TK(K))+1.)*THK(K)
240 Q2K(K)=2.*Q2(I,KFLIP,J)
243 !*** COMPUTE THE HEIGHTS OF THE LAYER INTERFACES
248 ZHK(KTE+1)=HT(I,J) ! Z at bottom of lowest sigma layer
256 !*** FIND THE HEIGHT OF THE PBL
260 IF(Q2K(K)<=EPSQ2L*FH) THEN
268 !-----------------------------------------------------------------------
269 !--------------THE HEIGHT OF THE PBL------------------------------------
270 !-----------------------------------------------------------------------
272 110 PBLH(I,J)=ZHK(LPBL)-ZHK(LMH+1)
274 !----------------------------------------------------------------------
276 !*** FIND THE SURFACE EXCHANGE COEFFICIENTS
278 !----------------------------------------------------------------------
287 ZSL=(ZHK(LMH)-ZHK(LMH+1))*0.5
288 APESFC=(PSFC*1.E-5)**CAPA
291 CALL SFCDIF(NTSD,SEAMASK,THSK(I,J),QSFC(I,J),PSFC &
292 & ,UZ0(I,J),VZ0(I,J),TZ0,THZ0(I,J),QZ0(I,J) &
293 & ,USTAR(I,J),ZNT(I,J),Z0BASE(I,J),CT(I,J),RMOL(I,J) &
294 & ,AKMS(I,J),AKHS(I,J),RIB(I,J),PBLH(I,J),MAVAIL(I,J) &
295 & ,CHS(I,J),CHS2(I,J),CQS2(I,J) &
296 & ,HFX(I,J),QFX(I,J),FLX_LH(I,J) &
297 & ,FLHC(I,J),FLQC(I,J),QGH(I,J),CPM(I,J) &
298 & ,ULOW,VLOW,TLOW,THLOW,THELOW,QLOW,CWMLOW &
300 & ,U10(I,J),V10(I,J),TSHLTR(I,J),TH10(I,J) &
301 & ,QSHLTR(I,J),Q10(I,J),PSHLTR(I,J) &
302 & ,U10E(I,J),V10E(I,J) &
303 & ,IDS,IDE,JDS,JDE,KDS,KDE &
304 & ,IMS,IME,JMS,JME,KMS,KME &
305 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j,ZHK(LMH+1) &
309 !*** REMOVE SUPERATURATION AT 2M AND 10M
314 TH02(I,J)=TSHLTR(I,J) !emt
315 IF (SEAMASK.EQ.1.AND.I.EQ.170.AND.J.EQ.20) THEN
316 print*,'HFX_SEA_point',HFX(I,J)
319 RAPA02=RAPA-GOCP02/TH02P
320 RAPA10=RAPA-GOCP10/TH10P
324 T02(I,J) = TH02(I,J)*APESFC !emt
327 P02P=(RAPA02**RCAP)*1.E5
328 P10P=(RAPA10**RCAP)*1.E5
330 QS02=PQ0/P02P*EXP(A2*(T02P-A3)/(T02P-A4))
331 QS10=PQ0/P10P*EXP(A2*(T10P-A3)/(T10P-A4))
333 IF(QSHLTR(I,J)>QS02)QSHLTR(I,J)=QS02
334 IF(Q10 (I,J)>QS10)Q10 (I,J)=QS10
335 Q02(I,J)=QSHLTR(I,J)/(1.-QSHLTR(I,J)) !emt
336 !----------------------------------------------------------------------
340 !----------------------------------------------------------------------
341 ENDDO setup_integration
342 !----------------------------------------------------------------------
344 END SUBROUTINE QNSESFC
345 !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
346 !----------------------------------------------------------------------
347 SUBROUTINE SFCDIF(NTSD,SEAMASK,THS,QS,PSFC &
348 & ,UZ0,VZ0,TZ0,THZ0,QZ0 &
349 & ,USTAR,Z0,Z0BASE,CT,RLMO,AKMS,AKHS,RIB,PBLH,WETM &
350 & ,CHS,CHS2,CQS2,HFX,QFX,FLX_LH,FLHC,FLQC,QGH,CPM &
351 & ,ULOW,VLOW,TLOW,THLOW,THELOW,QLOW,CWMLOW &
353 & ,U10,V10,TH02,TH10,Q02,Q10,PSHLTR &
355 & ,IDS,IDE,JDS,JDE,KDS,KDE &
356 & ,IMS,IME,JMS,JME,KMS,KME &
357 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j,ZSFC,SCM_FORCE_FLUX)
358 ! ****************************************************************
362 ! ****************************************************************
363 !----------------------------------------------------------------------
367 !----------------------------------------------------------------------
368 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
369 & ,IMS,IME,JMS,JME,KMS,KME &
370 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j
372 INTEGER,INTENT(IN) :: NTSD
374 REAL,INTENT(IN) :: CWMLOW,PBLH,PLOW,QLOW,PSFC,SEAMASK,ZSFC &
375 & ,THELOW,THLOW,THS,TLOW,ULOW,VLOW,WETM,ZSL &
378 REAL,INTENT(OUT) :: CHS,CHS2,CPM,CQS2,CT,FLHC,FLQC, &
379 & PSHLTR,Q02,Q10,QGH,RIB,RLMO,TH02,TH10,U10,V10
381 REAL,INTENT(OUT) :: U10E,V10E
383 REAL,INTENT(INOUT) :: FLX_LH,HFX,QFX
385 REAL,INTENT(INOUT) :: AKHS,AKMS,QZ0,THZ0,USTAR,UZ0,VZ0,Z0,QS,TZ0
387 INTEGER, OPTIONAL, INTENT(IN ) :: SCM_FORCE_FLUX
389 !----------------------------------------------------------------------
395 REAL :: A,B,BTGH,BTGX,CXCHL,CXCHS,DTHV,DU2,ELFC,FCT &
396 & ,HLFLX,HSFLX,HV,PSH02,PSH10,PSHZ,PSHZL,PSM10,PSMZ,PSMZL &
397 & ,RDZ,RDZT,RLMA,RLMN,RLMP &
398 & ,RLOGT,RLOGU,RWGH,RZ,RZST,RZSU,SIMH,SIMM,TEM,THM &
399 & ,UMFLX,USTARK,VMFLX,WGHT,WGHTT,WGHTQ,WSTAR2 &
400 & ,X,XLT,XLT4,XLU,XLU4,XT,XT4,XU,XU4,ZETALT,ZETALU &
401 & ,ZETAT,ZETAU,ZQ,ZSLT,ZSLU,ZT,ZU,TOPOTERM,ZZIL
405 REAL :: AKHS02,AKHS10,AKMS02,AKMS10,EKMS10,QSAT10,QSAT2 &
406 & ,RLNT02,RLNT10,RLNU10,SIMH02,SIMH10,SIMM10,T02,T10 &
407 & ,TERM1,RLOW,WSTAR,XLT02,XLT024,XLT10 &
408 & ,XLT104,XLU10,XLU104,XU10,XU104,ZT02,ZT10,ZTAT02,ZTAT10 &
409 & ,ZTAU,ZTAU10,ZU10,ZUUZ
410 !----------------------------------------------------------------------
411 !**********************************************************************
412 !----------------------------------------------------------------------
428 !----------------------------------------------------------------------
432 !----------------------------------------------------------------------
436 !----------------------------------------------------------------------
438 !----------------------------------------------------------------------
439 Z0=MAX(USTFC*USTAR*USTAR,1.59E-5)
441 !*** VISCOUS SUBLAYER, JANJIC MWR 1994
443 !----------------------------------------------------------------------
445 !----------------------------------------------------------------------
455 ZU=FZU1*SQRT(SQRT(Z0*USTAR*RVISC))/USTAR
458 UZ0=(ULOW*RWGH+UZ0)*0.5
459 VZ0=(VLOW*RWGH+VZ0)*0.5
467 THZ0=((WGHTT*THLOW+THS)/(WGHTT+1.)+THZ0)*0.5
468 QZ0=((WGHTQ*QLOW+QS)/(WGHTQ+1.)+QZ0)*0.5
470 THZ0=(WGHTT*THLOW+THS)/(WGHTT+1.)
471 QZ0=(WGHTQ*QLOW+QS)/(WGHTQ+1.)
476 IF(USTAR>=USTR.AND.USTAR<USTC)THEN
481 ZT=FZT2*SQRT(SQRT(Z0*USTAR*RVISC))/USTAR
487 THZ0=((WGHTT*THLOW+THS)/(WGHTT+1.)+THZ0)*0.5
488 QZ0=((WGHTQ*QLOW+QS)/(WGHTQ+1.)+QZ0)*0.5
490 THZ0=(WGHTT*THLOW+THS)/(WGHTT+1.)
491 QZ0=(WGHTQ*QLOW+QS)/(WGHTQ+1.)
495 !----------------------------------------------------------------------
497 !----------------------------------------------------------------------
507 !----------------------------------------------------------------------
509 !----------------------------------------------------------------------
511 THM=(THELOW+THZ0)*0.5
514 B=(ELOCP/TEM-1.-P608)*THM
516 DTHV=((THELOW-THZ0)*((QLOW+QZ0+CWMLOW)*(0.5*P608)+1.) &
517 & +(QLOW-QZ0+CWMLOW)*A+CWMLOW*B)
519 DU2=MAX((ULOW-UZ0)**2+(VLOW-VZ0)**2,EPSU2)
520 RIB=BTGX*DTHV*ZSL/DU2
521 !----------------------------------------------------------------------
523 !----------------------------------------------------------------------
524 ! AKMS=MAX( VISC*RDZ,CXCHS)
525 ! AKHS=MAX(TVISC*RDZ,CXCHS)
526 !----------------------------------------------------------------------
527 ! ELSE ! turbulent branch
528 !----------------------------------------------------------------------
538 !----------------------------------------------------------------------
539 !*** 1./MONIN-OBUKHOV LENGTH
540 !----------------------------------------------------------------------
542 RLMO=ELFC*AKHS*DTHV/USTAR**3
549 ZETALU=MIN(MAX(ZETALU,ZTMIN1),ZTMAX1)
550 ZETALT=MIN(MAX(ZETALT,ZTMIN1),ZTMAX1)
551 ZETAU=MIN(MAX(ZETAU,ZTMIN1/RZSU),ZTMAX1/RZSU)
552 ZETAT=MIN(MAX(ZETAT,ZTMIN1/RZST),ZTMAX1/RZST)
554 !----------------------------------------------------------------------
556 !----------------------------------------------------------------------
558 RZ=(ZETAU-ZTMIN1)/DZETA1
563 PSMZ=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1) !Interpolation from the table
565 RZ=(ZETALU-ZTMIN1)/DZETA1
570 PSMZL=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1)
572 SIMM=PSMZL-PSMZ+RLOGU
574 RZ=(ZETAT-ZTMIN1)/DZETA1
579 PSHZ=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
581 RZ=(ZETALT-ZTMIN1)/DZETA1
586 PSHZL=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
588 SIMH=(PSHZL-PSHZ+RLOGT)*PRT0
589 ! SIMH=(PSHZL-PSHZ+RLOGT)*FH01
590 !----------------------------------------------------------------------
592 AKMS=MAX(USTARK/SIMM,CXCHS)
593 AKHS=MAX(USTARK/SIMH,CXCHS)
595 !----------------------------------------------------------------------
596 !*** BELJAARS CORRECTION FOR USTAR (FOR CONVECTION)
597 !----------------------------------------------------------------------
600 WSTAR2=WWST2*ABS(BTGH*AKHS*DTHV)**(2./3.) !zj
604 USTAR=MAX(SQRT(AKMS*SQRT(DU2+WSTAR2)),EPSUST)
606 !----------------------------------------------------------------------
607 ! ENDIF ! End of turbulent branch
608 !----------------------------------------------------------------------
610 ENDDO ! End of the iteration loop over sea points
612 !----------------------------------------------------------------------
616 !----------------------------------------------------------------------
620 !----------------------------------------------------------------------
631 ! RLOW=PLOW/(R_D*TLOW)
635 !----------------------------------------------------------------------
637 THM=(THELOW+THZ0)*0.5
640 B=(ELOCP/TEM-1.-P608)*THM
642 DTHV=((THELOW-THZ0)*((QLOW+QZ0+CWMLOW)*(0.5*P608)+1.) &
643 & +(QLOW-QZ0+CWMLOW)*A+CWMLOW*B)
645 DU2=MAX((ULOW-UZ0)**2+(VLOW-VZ0)**2,EPSU2)
646 RIB=BTGX*DTHV*ZSL/DU2
647 !----------------------------------------------------------------------
649 ! AKMS=MAX( VISC*RDZ,CXCHL)
650 ! AKHS=MAX(TVISC*RDZ,CXCHL)
651 !----------------------------------------------------------------------
652 ! ELSE ! Turbulent branch
653 !----------------------------------------------------------------------
660 ZSLT=ZSL+ZU ! u,v and t are at the same level
661 !----------------------------------------------------------------------
663 !mp Topo modification of ZILFC term
665 TOPOTERM=TOPOFAC*ZSFC**2.
666 TOPOTERM=MAX(TOPOTERM,3.0)
674 !----------------------------------------------------------------------
676 land_point_iteration: DO ITR=1,ITRMX
678 !----------------------------------------------------------------------
679 !*** ZILITINKEVITCH FIX FOR ZT
680 !----------------------------------------------------------------------
682 ! oldform ZT=MAX(EXP(ZZIL*SQRT(USTAR*ZU))*ZU,EPSZT)
683 ZT=MAX(EXP(ZZIL*SQRT(USTAR*Z0BASE))*Z0BASE,EPSZT)
684 ZT=MAX(ZT,ZU*ZTFC) !Quick fix by S. Sukoriansky
689 !----------------------------------------------------------------------
690 !*** 1./MONIN-OBUKHOV LENGTH-SCALE
691 !----------------------------------------------------------------------
693 RLMO=ELFC*AKHS*DTHV/USTAR**3
699 ZETALU=MIN(MAX(ZETALU,ZTMIN2),ZTMAX2)
700 ZETALT=MIN(MAX(ZETALT,ZTMIN2),ZTMAX2)
701 ZETAU=MIN(MAX(ZETAU,ZTMIN2/RZSU),ZTMAX2/RZSU)
702 ZETAT=MIN(MAX(ZETAT,ZTMIN2/RZST),ZTMAX2/RZST)
704 !----------------------------------------------------------------------
706 !----------------------------------------------------------------------
708 RZ=(ZETAU-ZTMIN2)/DZETA2
713 PSMZ=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
715 RZ=(ZETALU-ZTMIN2)/DZETA2
720 PSMZL=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
722 SIMM=PSMZL-PSMZ+RLOGU
724 RZ=(ZETAT-ZTMIN2)/DZETA2
729 PSHZ=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
731 RZ=(ZETALT-ZTMIN2)/DZETA2
736 PSHZL=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
738 SIMH=(PSHZL-PSHZ+RLOGT)*PRT0
739 ! SIMH=(PSHZL-PSHZ+RLOGT)*FH02
740 !----------------------------------------------------------------------
742 AKMS=MAX(USTARK/SIMM,CXCHL)
743 AKHS=MAX(USTARK/SIMH,CXCHL)
744 THZ0=HFX/(AKHS*RLOW*CP)+THLOW
745 TZ0=(PSFC*1.E-5)**CAPA*THZ0
747 !----------------------------------------------------------------------
748 !*** BELJAARS CORRECTION FOR USTAR
749 !----------------------------------------------------------------------
752 WSTAR2=WWST2*ABS(BTGH*AKHS*DTHV)**(2./3.) !zj
757 USTAR=MAX(SQRT(AKMS*SQRT(DU2+WSTAR2)),EPSUST)
759 !----------------------------------------------------------------------
760 ENDDO land_point_iteration
761 !----------------------------------------------------------------------
763 ! ENDIF ! End of turbulant branch over land
765 !----------------------------------------------------------------------
767 ENDIF ! End of land/sea branch
769 !----------------------------------------------------------------------
770 !*** COUNTERGRADIENT FIX
771 !----------------------------------------------------------------------
775 ! FCT=-10.*(BTGX)**(-1./3.)
776 ! CT=FCT*(HV/(PBLH*PBLH))**(2./3.)
781 !----------------------------------------------------------------------
782 !----------------------------------------------------------------------
783 !*** THE FOLLOWING DIAGNOSTIC BLOCK PRODUCES 2-m and 10-m VALUES
784 !*** FOR TEMPERATURE, MOISTURE, AND WINDS. IT IS DONE HERE SINCE
785 !*** THE VARIOUS QUANTITIES NEEDED FOR THE COMPUTATION ARE LOST
786 !*** UPON EXIT FROM THE ROTUINE.
787 !----------------------------------------------------------------------
788 !----------------------------------------------------------------------
790 WSTAR=SQRT(WSTAR2)/WWST
792 UMFLX=AKMS*(ULOW -UZ0 )
793 VMFLX=AKMS*(VLOW -VZ0 )
794 HSFLX=AKHS*(THLOW-THZ0)
795 HLFLX=AKHS*(QLOW -QZ0 )
796 !----------------------------------------------------------------------
798 !----------------------------------------------------------------------
799 ! IF(SEAMASK>0.5)THEN
800 ! AKMS10=MAX( VISC/10.,CXCHS)
801 ! AKHS02=MAX(TVISC/02.,CXCHS)
802 ! AKHS10=MAX(TVISC/10.,CXCHS)
804 ! AKMS10=MAX( VISC/10.,CXCHL)
805 ! AKHS02=MAX(TVISC/02.,CXCHL)
806 ! AKHS10=MAX(TVISC/10.,CXCHL)
808 !----------------------------------------------------------------------
810 !----------------------------------------------------------------------
823 !----------------------------------------------------------------------
825 !----------------------------------------------------------------------
829 !----------------------------------------------------------------------
830 ZTAU10=MIN(MAX(ZTAU10,ZTMIN1),ZTMAX1)
831 ZTAT02=MIN(MAX(ZTAT02,ZTMIN1),ZTMAX1)
832 ZTAT10=MIN(MAX(ZTAT10,ZTMIN1),ZTMAX1)
833 !----------------------------------------------------------------------
834 RZ=(ZTAU10-ZTMIN1)/DZETA1
839 PSM10=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1)
841 SIMM10=PSM10-PSMZ+RLNU10
843 RZ=(ZTAT02-ZTMIN1)/DZETA1
848 PSH02=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
850 SIMH02=(PSH02-PSHZ+RLNT02)*PRT0
851 ! SIMH02=(PSH02-PSHZ+RLNT02)*FH01
853 RZ=(ZTAT10-ZTMIN1)/DZETA1
858 PSH10=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
860 SIMH10=(PSH10-PSHZ+RLNT10)*PRT0
861 ! SIMH10=(PSH10-PSHZ+RLNT10)*FH01
863 AKMS10=MAX(USTARK/SIMM10,CXCHS)
864 AKHS02=MAX(USTARK/SIMH02,CXCHS)
865 AKHS10=MAX(USTARK/SIMH10,CXCHS)
867 !----------------------------------------------------------------------
869 !----------------------------------------------------------------------
873 !----------------------------------------------------------------------
874 ZTAU10=MIN(MAX(ZTAU10,ZTMIN2),ZTMAX2)
875 ZTAT02=MIN(MAX(ZTAT02,ZTMIN2),ZTMAX2)
876 ZTAT10=MIN(MAX(ZTAT10,ZTMIN2),ZTMAX2)
877 !----------------------------------------------------------------------
878 RZ=(ZTAU10-ZTMIN2)/DZETA2
883 PSM10=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
885 SIMM10=PSM10-PSMZ+RLNU10
887 RZ=(ZTAT02-ZTMIN2)/DZETA2
892 PSH02=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
894 SIMH02=(PSH02-PSHZ+RLNT02)*PRT0
895 ! SIMH02=(PSH02-PSHZ+RLNT02)*FH02
897 RZ=(ZTAT10-ZTMIN2)/DZETA2
902 PSH10=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
904 SIMH10=(PSH10-PSHZ+RLNT10)*PRT0
905 ! SIMH10=(PSH10-PSHZ+RLNT10)*FH02
907 AKMS10=MAX(USTARK/SIMM10,CXCHL)
908 AKHS02=MAX(USTARK/SIMH02,CXCHL)
909 AKHS10=MAX(USTARK/SIMH10,CXCHL)
910 !----------------------------------------------------------------------
912 !----------------------------------------------------------------------
914 !----------------------------------------------------------------------
915 U10 =UMFLX/AKMS10+UZ0
916 V10 =VMFLX/AKMS10+VZ0
917 TH02=HSFLX/AKHS02+THZ0
918 TH10=HSFLX/AKHS10+THZ0
919 Q02 =HLFLX/AKHS02+QZ0
920 Q10 =HLFLX/AKHS10+QZ0
922 PSHLTR=PSFC*EXP(TERM1)
924 !----------------------------------------------------------------------
925 !*** COMPUTE "EQUIVALENT" Z0 TO APPROXIMATE LOCAL SHELTER READINGS.
926 !----------------------------------------------------------------------
933 !1st ZUUZ=MIN(0.5*ZU,0.1)
934 !1st ZU=MAX(0.1*ZU,ZUUZ)
935 !tst ZUUZ=amin1(ZU*0.50,0.3)
936 !tst ZU=amax1(ZU*0.3,ZUUZ)
938 ZUUZ=AMIN1(ZU*0.50,0.18)
939 ZU=AMAX1(ZU*0.35,ZUUZ)
948 ZTAU10=MIN(MAX(ZTAU10,ZTMIN2),ZTMAX2)
949 ZETAU=MIN(MAX(ZETAU,ZTMIN2/RZSU),ZTMAX2/RZSU)
951 RZ=(ZTAU10-ZTMIN2)/DZETA2
956 PSM10=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
957 SIMM10=PSM10-PSMZ+RLNU10
958 EKMS10=MAX(USTARK/SIMM10,CXCHL)
960 U10E=UMFLX/EKMS10+UZ0
961 V10E=VMFLX/EKMS10+VZ0
968 !----------------------------------------------------------------------
969 !*** SET OTHER WRF DRIVER ARRAYS
970 !----------------------------------------------------------------------
975 ! IF(SEAMASK.EQ.1) THEN
976 ! print*,'HSFLX=',HSFLX
977 ! print*,'RLOW=',RLOW
980 IF ( PRESENT(SCM_FORCE_FLUX) ) THEN
981 IF (SCM_FORCE_FLUX.EQ.0) THEN
989 !!! QGH=PQ0/PSHLTR*EXP(A2S*(TSK-A3S)/(TSK-A4S))
990 QGH=((1.-SEAMASK)*PQ0+SEAMASK*PQ0SEA) &
991 & /PLOW*EXP(A2S*(TLOW-A3S)/(TLOW-A4S))
992 QGH=QGH/(1.-QGH) !Convert to mixing ratio
995 !*** DO NOT COMPUTE QS OVER LAND POINTS HERE SINCE IT IS
996 !*** A PROGNOSTIC VARIABLE THERE. IT IS OKAY TO USE IT
997 !*** AS A DIAGNOSTIC OVER WATER SINCE IT WILL CAUSE NO
998 !*** INTERFERENCE BEFORE BEING RECOMPUTED IN MYJPBL.
1001 QS=QLOW+QFX/(RLOW*AKHS)
1004 !----------------------------------------------------------------------
1006 END SUBROUTINE SFCDIF
1008 !----------------------------------------------------------------------
1009 SUBROUTINE QNSESFCINIT(LOWLYR,USTAR,Z0 &
1010 & ,SEAMASK,XICE,IVGTYP,RESTART &
1011 & ,ALLOWED_TO_READ &
1012 & ,IDS,IDE,JDS,JDE,KDS,KDE &
1013 & ,IMS,IME,JMS,JME,KMS,KME &
1014 & ,ITS,ITE,JTS,JTE,KTS,KTE)
1015 !----------------------------------------------------------------------
1017 !----------------------------------------------------------------------
1018 LOGICAL,INTENT(IN) :: RESTART,ALLOWED_TO_READ
1020 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
1021 & ,IMS,IME,JMS,JME,KMS,KME &
1022 & ,ITS,ITE,JTS,JTE,KTS,KTE
1024 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: IVGTYP
1026 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: LOWLYR
1028 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: SEAMASK,XICE
1030 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: USTAR,Z0
1032 REAL,DIMENSION(0:30) :: VZ0TBL
1033 REAL,DIMENSION(0:30) :: VZ0TBL_24
1035 INTEGER :: I,IDUM,IRECV,J,JDUM,K,ITF,JTF,KTF,MAXGBL_IVGTYP &
1036 &, MAXLOC_IVGTYP,MPI_COMM_COMP
1038 ! INTEGER :: MPI_INTEGER,MPI_MAX
1040 REAL :: SM,X,ZETA1,ZETA2,ZRNG1,ZRNG2,PSIMQ,PSIHQ
1042 REAL :: PIHF=3.1415926/2.,EPS=1.E-6
1043 !----------------------------------------------------------------------
1046 & 2.653,0.826,0.563,1.089,0.854,0.856,0.035,0.238,0.065,0.076 &
1047 & ,0.011,0.035,0.011,0.000,0.000,0.000,0.000,0.000,0.000,0.000 &
1048 & ,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000/)
1051 & 1.00, 0.07, 0.07, 0.07, 0.07, 0.15, &
1052 & 0.08, 0.03, 0.05, 0.86, 0.80, 0.85, &
1053 & 2.65, 1.09, 0.80, 0.001, 0.04, 0.05, &
1054 & 0.01, 0.04, 0.06, 0.05, 0.03, 0.001, &
1055 & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/)
1057 !----------------------------------------------------------------------
1064 !*** FOR NOW, ASSUME SIGMA MODE FOR LOWEST MODEL LAYER
1072 !----------------------------------------------------------------------
1075 IF(.NOT.RESTART)THEN
1076 ! CALL WRF_GET_DM_COMMUNICATOR(MPI_COMM_COMP)
1077 ! MAXLOC_IVGTYP=MAXVAL(IVGTYP)
1078 ! CALL MPI_ALLREDUCE(MAXLOC_IVGTYP,MAXGBL_IVGTYP,1,MPI_INTEGER &
1079 ! &, MPI_MAX,MPI_COMM_COMP,IRECV)
1080 MAXGBL_IVGTYP=MAXVAL(IVGTYP)
1083 CALL WRF_DM_MAXVAL(MAXGBL_IVGTYP,IDUM,JDUM)
1087 IF (MAXGBL_IVGTYP<13) THEN
1091 IF(SM+XICE(I,J)<0.5)THEN
1092 Z0(I,J)=VZ0TBL(IVGTYP(I,J))
1102 IF(SM+XICE(I,J)<0.5)THEN
1103 Z0(I,J)=VZ0TBL_24(IVGTYP(I,J))
1108 ENDIF ! Vegtype check
1110 ENDIF ! Restart check
1112 !----------------------------------------------------------------------
1113 IF(.NOT.RESTART)THEN
1120 !----------------------------------------------------------------------
1122 !*** COMPUTE SURFACE LAYER INTEGRAL FUNCTIONS
1124 !----------------------------------------------------------------------
1134 ZTMAX1=2.3 ! changed
1137 ZTMAX2=2.3 ! changed
1142 DZETA1=ZRNG1/(KZTM-1)
1143 DZETA2=ZRNG2/(KZTM-1)
1145 !----------------------------------------------------------------------
1146 !*** FUNCTION DEFINITION LOOP
1147 !----------------------------------------------------------------------
1154 !----------------------------------------------------------------------
1156 !----------------------------------------------------------------------
1160 !----------------------------------------------------------------------
1161 !*** PAULSON 1970 FUNCTIONS
1162 !----------------------------------------------------------------------
1163 X=SQRT(SQRT(1.-16.*ZETA1))
1165 PSIM1(K)=-2.*LOG((X+1.)/2.)-LOG((X*X+1.)/2.)+2.*ATAN(X)-PIHF
1166 PSIH1(K)=-2.*LOG((X*X+1.)/2.)
1168 !----------------------------------------------------------------------
1169 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1170 !----------------------------------------------------------------------
1172 PSIMQ=2.25*ZETA1+ZETA1**2+45.9*ZETA1**3
1173 PSIHQ=2.0*ZETA1+10.3*ZETA1**2+130*ZETA1**3
1174 ! PSIHQ=1.45*ZETA1+7.42*ZETA1**2+93.5*ZETA1**3 ! /PRT0
1175 PSIM1(K)=MAX(PSIMQ,PSIM1(K))
1176 PSIH1(K)=MAX(PSIHQ,PSIH1(K))
1178 !----------------------------------------------------------------------
1180 !----------------------------------------------------------------------
1184 !----------------------------------------------------------------------
1185 !*** PAULSON 1970 FUNCTIONS
1186 !----------------------------------------------------------------------
1190 !----------------------------------------------------------------------
1191 !*** HOLTSLAG AND DE BRUIN 1988
1192 !----------------------------------------------------------------------
1194 ! PSIM1(K)=0.7*ZETA1+0.75*ZETA1*(6.-0.35*ZETA1)*EXP(-0.35*ZETA1)
1195 ! PSIH1(K)=0.7*ZETA1+0.75*ZETA1*(6.-0.35*ZETA1)*EXP(-0.35*ZETA1)
1197 !----------------------------------------------------------------------
1198 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1199 !----------------------------------------------------------------------
1201 PSIM1(K)=2.25*ZETA1-0.2*ZETA1*ZETA1
1202 PSIH1(K)=2.0*ZETA1+0.14*((ZETA1-0.5)**5+0.03125)
1203 ! PSIH1(K)=1.42*ZETA1+0.1*((ZETA1-0.5)**5+0.03125) !/PRT0
1204 !----------------------------------------------------------------------
1208 !----------------------------------------------------------------------
1210 !----------------------------------------------------------------------
1214 !----------------------------------------------------------------------
1215 !*** PAULSON 1970 FUNCTIONS
1216 !----------------------------------------------------------------------
1218 X=SQRT(SQRT(1.-16.*ZETA2))
1220 PSIM2(K)=-2.*LOG((X+1.)/2.)-LOG((X*X+1.)/2.)+2.*ATAN(X)-PIHF
1221 PSIH2(K)=-2.*LOG((X*X+1.)/2.)
1223 !----------------------------------------------------------------------
1224 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1225 !----------------------------------------------------------------------
1227 PSIMQ=2.25*ZETA2+ZETA2**2+45.9*ZETA2**3
1228 PSIHQ=2.0*ZETA2+10.3*ZETA2**2+130*ZETA2**3
1229 ! PSIHQ=1.45*ZETA2+7.42*ZETA2**2+93.5*ZETA2**3 ! /PRT0
1230 PSIM2(K)=MAX(PSIMQ,PSIM2(K))
1231 PSIH2(K)=MAX(PSIHQ,PSIH2(K))
1233 !----------------------------------------------------------------------
1235 !----------------------------------------------------------------------
1239 !----------------------------------------------------------------------
1240 !*** PAULSON 1970 FUNCTIONS
1241 !----------------------------------------------------------------------
1246 !----------------------------------------------------------------------
1247 !*** HOLTSLAG AND DE BRUIN 1988
1248 !----------------------------------------------------------------------
1250 ! PSIM2(K)=0.7*ZETA2+0.75*ZETA2*(6.-0.35*ZETA2)*EXP(-0.35*ZETA2)
1251 ! PSIH2(K)=0.7*ZETA2+0.75*ZETA2*(6.-0.35*ZETA2)*EXP(-0.35*ZETA2)
1253 !----------------------------------------------------------------------
1254 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1255 !----------------------------------------------------------------------
1257 PSIM2(K)=2.25*ZETA2-0.2*ZETA2*ZETA2
1258 PSIH2(K)=2.0*ZETA2+0.14*((ZETA2-0.5)**5+0.03125)
1259 ! PSIH2(K)=1.42*ZETA2+0.1*((ZETA2-0.5)**5+0.03125) !/PRT0
1260 !----------------------------------------------------------------------
1264 !----------------------------------------------------------------------
1272 !----------------------------------------------------------------------
1274 !----------------------------------------------------------------------
1277 !----------------------------------------------------------------------
1279 END SUBROUTINE QNSESFCINIT
1281 !----------------------------------------------------------------------
1283 END MODULE MODULE_SF_QNSESFC
1285 !----------------------------------------------------------------------