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,TSHLTR,TH10,QSHLTR,Q10,PSHLTR &
78 & ,IDS,IDE,JDS,JDE,KDS,KDE &
79 & ,IMS,IME,JMS,JME,KMS,KME &
80 & ,ITS,ITE,JTS,JTE,KTS,KTE,SCM_FORCE_FLUX )
81 !----------------------------------------------------------------------
85 !----------------------------------------------------------------------
86 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
87 & ,IMS,IME,JMS,JME,KMS,KME &
88 & ,ITS,ITE,JTS,JTE,KTS,KTE
90 INTEGER,INTENT(IN) :: ITIMESTEP
92 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: LOWLYR
94 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: HT,MAVAIL,TSK &
97 REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: DZ &
103 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: PSHLTR,Q10,QSHLTR &
106 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: FLX_LH,HFX,QFX
108 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: AKHS,AKMS &
110 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: RIB
112 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: QZ0,RMOL,THZ0 &
116 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: CHS,CHS2,CQS2 &
117 & ,CPM,CT,FLHC,FLQC &
120 INTEGER, OPTIONAL, INTENT(IN ) :: SCM_FORCE_FLUX ! JP
122 !----------------------------------------------------------------------
126 INTEGER :: I,J,K,KFLIP,LMH,LPBL,NTSD
128 REAL :: A,APESFC,B,BTGX,CWMLOW &
129 & ,DQDT,DTDIF,DTDT,DUDT,DVDT &
131 & ,P02P,P10P,PLOW,PSFC,PTOP,QLOW,QS02,QS10 &
132 & ,RAPA,RAPA02,RAPA10,RATIOMX,RDZ,SEAMASK,SM &
133 & ,T02P,T10P,TEM,TH02P,TH10P,THLOW,THELOW,THM &
134 & ,TLOW,TZ0,ULOW,VLOW,ZSL
136 REAL,DIMENSION(KTS:KTE) :: CWMK,PK,Q2K,QK,THEK,THK,TK,UK,VK
138 REAL,DIMENSION(KTS:KTE-1) :: EL,ELM
140 REAL,DIMENSION(KTS:KTE+1) :: ZHK
142 REAL,DIMENSION(ITS:ITE,JTS:JTE) :: THSK
144 REAL,DIMENSION(ITS:ITE,KTS:KTE+1,JTS:JTE) :: ZINT
146 !----------------------------------------------------------------------
147 !**********************************************************************
148 !----------------------------------------------------------------------
150 !*** MAKE PREPARATIONS
152 !----------------------------------------------------------------------
163 ZINT(I,KTE+1,J)=HT(I,J) ! Z at bottom of lowest sigma layer
167 !!!!!! UNCOMMENT THESE LINES IF USING ETA COORDINATES
169 !!!!!! ZINT(I,KTE+1,J)=1.E-4 ! Z of bottom of lowest eta layer
170 !!!!!! ZHK(KTE+1)=1.E-4 ! Z of bottom of lowest eta layer
179 ZINT(I,K,J)=ZINT(I,K+1,J)+DZ(I,KFLIP,J)
192 !!! Z0(I,J)=SM*Z0SEA+(1.-SM)*(Z0(I,J)*Z0MAX+FIS*FCM+Z0LAND)
193 !!! ZNT(I,J)=SM*Z0SEA+(1.-SM)*(ZNT(I,J)*Z0MAX+FIS*FCM+Z0LAND)
206 !----------------------------------------------------------------------
207 setup_integration: DO J=JTS,JTE
208 !----------------------------------------------------------------------
212 !*** LOWEST LAYER ABOVE GROUND MUST BE FLIPPED
214 LMH=KTE-LOWLYR(I,J)+1
216 PTOP=PINT(I,KTE+1,J) ! KTE+1=KME
217 PSFC=PINT(I,LOWLYR(I,J),J)
218 ! Define THSK here (for first timestep mostly)
219 THSK(I,J)=TSK(I,J)/(PSFC*1.E-5)**CAPA
221 !*** CONVERT LAND MASK (1 FOR SEA; 0 FOR LAND)
223 SEAMASK=XLAND(I,J)-1.
225 !*** FILL 1-D VERTICAL ARRAYS
226 !*** AND FLIP DIRECTION SINCE MYJ SCHEME
227 !*** COUNTS DOWNWARD FROM THE DOMAIN'S TOP
233 RATIOMX=QV(I,KFLIP,J)
234 QK(K)=RATIOMX/(1.+RATIOMX)
235 PK(K)=PMID(I,KFLIP,J)
236 CWMK(K)=QC(I,KFLIP,J)
237 THEK(K)=(CWMK(K)*(-ELOCP/TK(K))+1.)*THK(K)
238 Q2K(K)=2.*Q2(I,KFLIP,J)
241 !*** COMPUTE THE HEIGHTS OF THE LAYER INTERFACES
246 ZHK(KTE+1)=HT(I,J) ! Z at bottom of lowest sigma layer
254 !*** FIND THE HEIGHT OF THE PBL
258 IF(Q2K(K)<=EPSQ2L*FH) THEN
266 !-----------------------------------------------------------------------
267 !--------------THE HEIGHT OF THE PBL------------------------------------
268 !-----------------------------------------------------------------------
270 110 PBLH(I,J)=ZHK(LPBL)-ZHK(LMH+1)
272 !----------------------------------------------------------------------
274 !*** FIND THE SURFACE EXCHANGE COEFFICIENTS
276 !----------------------------------------------------------------------
285 ZSL=(ZHK(LMH)-ZHK(LMH+1))*0.5
286 APESFC=(PSFC*1.E-5)**CAPA
289 CALL SFCDIF(NTSD,SEAMASK,THSK(I,J),QSFC(I,J),PSFC &
290 & ,UZ0(I,J),VZ0(I,J),TZ0,THZ0(I,J),QZ0(I,J) &
291 & ,USTAR(I,J),ZNT(I,J),Z0BASE(I,J),CT(I,J),RMOL(I,J) &
292 & ,AKMS(I,J),AKHS(I,J),RIB(I,J),PBLH(I,J),MAVAIL(I,J) &
293 & ,CHS(I,J),CHS2(I,J),CQS2(I,J) &
294 & ,HFX(I,J),QFX(I,J),FLX_LH(I,J) &
295 & ,FLHC(I,J),FLQC(I,J),QGH(I,J),CPM(I,J) &
296 & ,ULOW,VLOW,TLOW,THLOW,THELOW,QLOW,CWMLOW &
298 & ,U10(I,J),V10(I,J),TSHLTR(I,J),TH10(I,J) &
299 & ,QSHLTR(I,J),Q10(I,J),PSHLTR(I,J) &
300 & ,IDS,IDE,JDS,JDE,KDS,KDE &
301 & ,IMS,IME,JMS,JME,KMS,KME &
302 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j,ZHK(LMH+1) &
306 !*** REMOVE SUPERATURATION AT 2M AND 10M
312 RAPA02=RAPA-GOCP02/TH02P
313 RAPA10=RAPA-GOCP10/TH10P
318 P02P=(RAPA02**RCAP)*1.E5
319 P10P=(RAPA10**RCAP)*1.E5
321 QS02=PQ0/P02P*EXP(A2*(T02P-A3)/(T02P-A4))
322 QS10=PQ0/P10P*EXP(A2*(T10P-A3)/(T10P-A4))
324 IF(QSHLTR(I,J)>QS02)QSHLTR(I,J)=QS02
325 IF(Q10 (I,J)>QS10)Q10 (I,J)=QS10
326 !----------------------------------------------------------------------
330 !----------------------------------------------------------------------
331 ENDDO setup_integration
332 !----------------------------------------------------------------------
334 END SUBROUTINE QNSESFC
335 !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
336 !----------------------------------------------------------------------
337 SUBROUTINE SFCDIF(NTSD,SEAMASK,THS,QS,PSFC &
338 & ,UZ0,VZ0,TZ0,THZ0,QZ0 &
339 & ,USTAR,Z0,Z0BASE,CT,RLMO,AKMS,AKHS,RIB,PBLH,WETM &
340 & ,CHS,CHS2,CQS2,HFX,QFX,FLX_LH,FLHC,FLQC,QGH,CPM &
341 & ,ULOW,VLOW,TLOW,THLOW,THELOW,QLOW,CWMLOW &
343 & ,U10,V10,TH02,TH10,Q02,Q10,PSHLTR &
344 & ,IDS,IDE,JDS,JDE,KDS,KDE &
345 & ,IMS,IME,JMS,JME,KMS,KME &
346 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j,ZSFC,SCM_FORCE_FLUX)
347 ! ****************************************************************
351 ! ****************************************************************
352 !----------------------------------------------------------------------
356 !----------------------------------------------------------------------
357 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
358 & ,IMS,IME,JMS,JME,KMS,KME &
359 & ,ITS,ITE,JTS,JTE,KTS,KTE,i,j
361 INTEGER,INTENT(IN) :: NTSD
363 REAL,INTENT(IN) :: CWMLOW,PBLH,PLOW,QLOW,PSFC,SEAMASK,ZSFC &
364 & ,THELOW,THLOW,THS,TLOW,ULOW,VLOW,WETM,ZSL &
367 REAL,INTENT(OUT) :: CHS,CHS2,CPM,CQS2,CT,FLHC,FLQC, &
368 & PSHLTR,Q02,Q10,QGH,RIB,RLMO,TH02,TH10,U10,V10
370 REAL,INTENT(INOUT) :: FLX_LH,HFX,QFX
372 REAL,INTENT(INOUT) :: AKHS,AKMS,QZ0,THZ0,USTAR,UZ0,VZ0,Z0,QS,TZ0
374 INTEGER, OPTIONAL, INTENT(IN ) :: SCM_FORCE_FLUX
376 !----------------------------------------------------------------------
382 REAL :: A,B,BTGH,BTGX,CXCHL,CXCHS,DTHV,DU2,ELFC,FCT &
383 & ,HLFLX,HSFLX,HV,PSH02,PSH10,PSHZ,PSHZL,PSM10,PSMZ,PSMZL &
384 & ,RDZ,RDZT,RLMA,RLMN,RLMP &
385 & ,RLOGT,RLOGU,RWGH,RZ,RZST,RZSU,SIMH,SIMM,TEM,THM &
386 & ,UMFLX,USTARK,VMFLX,WGHT,WGHTT,WGHTQ,WSTAR2 &
387 & ,X,XLT,XLT4,XLU,XLU4,XT,XT4,XU,XU4,ZETALT,ZETALU &
388 & ,ZETAT,ZETAU,ZQ,ZSLT,ZSLU,ZT,ZU,TOPOTERM,ZZIL
392 REAL :: AKHS02,AKHS10,AKMS02,AKMS10,EKMS10,QSAT10,QSAT2 &
393 & ,RLNT02,RLNT10,RLNU10,SIMH02,SIMH10,SIMM10,T02,T10 &
394 & ,TERM1,RLOW,U10E,V10E,WSTAR,XLT02,XLT024,XLT10 &
395 & ,XLT104,XLU10,XLU104,XU10,XU104,ZT02,ZT10,ZTAT02,ZTAT10 &
396 & ,ZTAU,ZTAU10,ZU10,ZUUZ
397 !----------------------------------------------------------------------
398 !**********************************************************************
399 !----------------------------------------------------------------------
415 !----------------------------------------------------------------------
419 !----------------------------------------------------------------------
423 !----------------------------------------------------------------------
425 !----------------------------------------------------------------------
426 Z0=MAX(USTFC*USTAR*USTAR,1.59E-5)
428 !*** VISCOUS SUBLAYER, JANJIC MWR 1994
430 !----------------------------------------------------------------------
432 !----------------------------------------------------------------------
442 ZU=FZU1*SQRT(SQRT(Z0*USTAR*RVISC))/USTAR
445 UZ0=(ULOW*RWGH+UZ0)*0.5
446 VZ0=(VLOW*RWGH+VZ0)*0.5
454 THZ0=((WGHTT*THLOW+THS)/(WGHTT+1.)+THZ0)*0.5
455 QZ0=((WGHTQ*QLOW+QS)/(WGHTQ+1.)+QZ0)*0.5
457 THZ0=(WGHTT*THLOW+THS)/(WGHTT+1.)
458 QZ0=(WGHTQ*QLOW+QS)/(WGHTQ+1.)
463 IF(USTAR>=USTR.AND.USTAR<USTC)THEN
468 ZT=FZT2*SQRT(SQRT(Z0*USTAR*RVISC))/USTAR
474 THZ0=((WGHTT*THLOW+THS)/(WGHTT+1.)+THZ0)*0.5
475 QZ0=((WGHTQ*QLOW+QS)/(WGHTQ+1.)+QZ0)*0.5
477 THZ0=(WGHTT*THLOW+THS)/(WGHTT+1.)
478 QZ0=(WGHTQ*QLOW+QS)/(WGHTQ+1.)
482 !----------------------------------------------------------------------
484 !----------------------------------------------------------------------
494 !----------------------------------------------------------------------
496 !----------------------------------------------------------------------
498 THM=(THELOW+THZ0)*0.5
501 B=(ELOCP/TEM-1.-P608)*THM
503 DTHV=((THELOW-THZ0)*((QLOW+QZ0+CWMLOW)*(0.5*P608)+1.) &
504 & +(QLOW-QZ0+CWMLOW)*A+CWMLOW*B)
506 DU2=MAX((ULOW-UZ0)**2+(VLOW-VZ0)**2,EPSU2)
507 RIB=BTGX*DTHV*ZSL/DU2
508 !----------------------------------------------------------------------
510 !----------------------------------------------------------------------
511 ! AKMS=MAX( VISC*RDZ,CXCHS)
512 ! AKHS=MAX(TVISC*RDZ,CXCHS)
513 !----------------------------------------------------------------------
514 ! ELSE ! turbulent branch
515 !----------------------------------------------------------------------
525 !----------------------------------------------------------------------
526 !*** 1./MONIN-OBUKHOV LENGTH
527 !----------------------------------------------------------------------
529 RLMO=ELFC*AKHS*DTHV/USTAR**3
536 ZETALU=MIN(MAX(ZETALU,ZTMIN1),ZTMAX1)
537 ZETALT=MIN(MAX(ZETALT,ZTMIN1),ZTMAX1)
538 ZETAU=MIN(MAX(ZETAU,ZTMIN1/RZSU),ZTMAX1/RZSU)
539 ZETAT=MIN(MAX(ZETAT,ZTMIN1/RZST),ZTMAX1/RZST)
541 !----------------------------------------------------------------------
543 !----------------------------------------------------------------------
545 RZ=(ZETAU-ZTMIN1)/DZETA1
550 PSMZ=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1) !Interpolation from the table
552 RZ=(ZETALU-ZTMIN1)/DZETA1
557 PSMZL=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1)
559 SIMM=PSMZL-PSMZ+RLOGU
561 RZ=(ZETAT-ZTMIN1)/DZETA1
566 PSHZ=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
568 RZ=(ZETALT-ZTMIN1)/DZETA1
573 PSHZL=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
575 SIMH=(PSHZL-PSHZ+RLOGT)*PRT0
576 ! SIMH=(PSHZL-PSHZ+RLOGT)*FH01
577 !----------------------------------------------------------------------
579 AKMS=MAX(USTARK/SIMM,CXCHS)
580 AKHS=MAX(USTARK/SIMH,CXCHS)
582 !----------------------------------------------------------------------
583 !*** BELJAARS CORRECTION FOR USTAR (FOR CONVECTION)
584 !----------------------------------------------------------------------
587 WSTAR2=WWST2*ABS(BTGH*AKHS*DTHV)**(2./3.) !zj
591 USTAR=MAX(SQRT(AKMS*SQRT(DU2+WSTAR2)),EPSUST)
593 !----------------------------------------------------------------------
594 ! ENDIF ! End of turbulent branch
595 !----------------------------------------------------------------------
597 ENDDO ! End of the iteration loop over sea points
599 !----------------------------------------------------------------------
603 !----------------------------------------------------------------------
607 !----------------------------------------------------------------------
618 ! RLOW=PLOW/(R_D*TLOW)
622 !----------------------------------------------------------------------
624 THM=(THELOW+THZ0)*0.5
627 B=(ELOCP/TEM-1.-P608)*THM
629 DTHV=((THELOW-THZ0)*((QLOW+QZ0+CWMLOW)*(0.5*P608)+1.) &
630 & +(QLOW-QZ0+CWMLOW)*A+CWMLOW*B)
632 DU2=MAX((ULOW-UZ0)**2+(VLOW-VZ0)**2,EPSU2)
633 RIB=BTGX*DTHV*ZSL/DU2
634 !----------------------------------------------------------------------
636 ! AKMS=MAX( VISC*RDZ,CXCHL)
637 ! AKHS=MAX(TVISC*RDZ,CXCHL)
638 !----------------------------------------------------------------------
639 ! ELSE ! Turbulent branch
640 !----------------------------------------------------------------------
647 ZSLT=ZSL+ZU ! u,v and t are at the same level
648 !----------------------------------------------------------------------
650 !mp Topo modification of ZILFC term
652 TOPOTERM=TOPOFAC*ZSFC**2.
653 TOPOTERM=MAX(TOPOTERM,3.0)
661 !----------------------------------------------------------------------
663 land_point_iteration: DO ITR=1,ITRMX
665 !----------------------------------------------------------------------
666 !*** ZILITINKEVITCH FIX FOR ZT
667 !----------------------------------------------------------------------
669 ! oldform ZT=MAX(EXP(ZZIL*SQRT(USTAR*ZU))*ZU,EPSZT)
670 ZT=MAX(EXP(ZZIL*SQRT(USTAR*Z0BASE))*Z0BASE,EPSZT)
671 ZT=MAX(ZT,ZU*ZTFC) !Quick fix by S. Sukoriansky
676 !----------------------------------------------------------------------
677 !*** 1./MONIN-OBUKHOV LENGTH-SCALE
678 !----------------------------------------------------------------------
680 RLMO=ELFC*AKHS*DTHV/USTAR**3
686 ZETALU=MIN(MAX(ZETALU,ZTMIN2),ZTMAX2)
687 ZETALT=MIN(MAX(ZETALT,ZTMIN2),ZTMAX2)
688 ZETAU=MIN(MAX(ZETAU,ZTMIN2/RZSU),ZTMAX2/RZSU)
689 ZETAT=MIN(MAX(ZETAT,ZTMIN2/RZST),ZTMAX2/RZST)
691 !----------------------------------------------------------------------
693 !----------------------------------------------------------------------
695 RZ=(ZETAU-ZTMIN2)/DZETA2
700 PSMZ=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
702 RZ=(ZETALU-ZTMIN2)/DZETA2
707 PSMZL=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
709 SIMM=PSMZL-PSMZ+RLOGU
711 RZ=(ZETAT-ZTMIN2)/DZETA2
716 PSHZ=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
718 RZ=(ZETALT-ZTMIN2)/DZETA2
723 PSHZL=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
725 SIMH=(PSHZL-PSHZ+RLOGT)*PRT0
726 ! SIMH=(PSHZL-PSHZ+RLOGT)*FH02
727 !----------------------------------------------------------------------
729 AKMS=MAX(USTARK/SIMM,CXCHL)
730 AKHS=MAX(USTARK/SIMH,CXCHL)
731 THZ0=HFX/(AKHS*RLOW*CP)+THLOW
732 TZ0=(PSFC*1.E-5)**CAPA*THZ0
734 !----------------------------------------------------------------------
735 !*** BELJAARS CORRECTION FOR USTAR
736 !----------------------------------------------------------------------
739 WSTAR2=WWST2*ABS(BTGH*AKHS*DTHV)**(2./3.) !zj
744 USTAR=MAX(SQRT(AKMS*SQRT(DU2+WSTAR2)),EPSUST)
746 !----------------------------------------------------------------------
747 ENDDO land_point_iteration
748 !----------------------------------------------------------------------
750 ! ENDIF ! End of turbulant branch over land
752 !----------------------------------------------------------------------
754 ENDIF ! End of land/sea branch
756 !----------------------------------------------------------------------
757 !*** COUNTERGRADIENT FIX
758 !----------------------------------------------------------------------
762 ! FCT=-10.*(BTGX)**(-1./3.)
763 ! CT=FCT*(HV/(PBLH*PBLH))**(2./3.)
768 !----------------------------------------------------------------------
769 !----------------------------------------------------------------------
770 !*** THE FOLLOWING DIAGNOSTIC BLOCK PRODUCES 2-m and 10-m VALUES
771 !*** FOR TEMPERATURE, MOISTURE, AND WINDS. IT IS DONE HERE SINCE
772 !*** THE VARIOUS QUANTITIES NEEDED FOR THE COMPUTATION ARE LOST
773 !*** UPON EXIT FROM THE ROTUINE.
774 !----------------------------------------------------------------------
775 !----------------------------------------------------------------------
777 WSTAR=SQRT(WSTAR2)/WWST
779 UMFLX=AKMS*(ULOW -UZ0 )
780 VMFLX=AKMS*(VLOW -VZ0 )
781 HSFLX=AKHS*(THLOW-THZ0)
782 HLFLX=AKHS*(QLOW -QZ0 )
783 !----------------------------------------------------------------------
785 !----------------------------------------------------------------------
786 ! IF(SEAMASK>0.5)THEN
787 ! AKMS10=MAX( VISC/10.,CXCHS)
788 ! AKHS02=MAX(TVISC/02.,CXCHS)
789 ! AKHS10=MAX(TVISC/10.,CXCHS)
791 ! AKMS10=MAX( VISC/10.,CXCHL)
792 ! AKHS02=MAX(TVISC/02.,CXCHL)
793 ! AKHS10=MAX(TVISC/10.,CXCHL)
795 !----------------------------------------------------------------------
797 !----------------------------------------------------------------------
810 !----------------------------------------------------------------------
812 !----------------------------------------------------------------------
816 !----------------------------------------------------------------------
817 ZTAU10=MIN(MAX(ZTAU10,ZTMIN1),ZTMAX1)
818 ZTAT02=MIN(MAX(ZTAT02,ZTMIN1),ZTMAX1)
819 ZTAT10=MIN(MAX(ZTAT10,ZTMIN1),ZTMAX1)
820 !----------------------------------------------------------------------
821 RZ=(ZTAU10-ZTMIN1)/DZETA1
826 PSM10=(PSIM1(K+2)-PSIM1(K+1))*RDZT+PSIM1(K+1)
828 SIMM10=PSM10-PSMZ+RLNU10
830 RZ=(ZTAT02-ZTMIN1)/DZETA1
835 PSH02=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
837 SIMH02=(PSH02-PSHZ+RLNT02)*PRT0
838 ! SIMH02=(PSH02-PSHZ+RLNT02)*FH01
840 RZ=(ZTAT10-ZTMIN1)/DZETA1
845 PSH10=(PSIH1(K+2)-PSIH1(K+1))*RDZT+PSIH1(K+1)
847 SIMH10=(PSH10-PSHZ+RLNT10)*PRT0
848 ! SIMH10=(PSH10-PSHZ+RLNT10)*FH01
850 AKMS10=MAX(USTARK/SIMM10,CXCHS)
851 AKHS02=MAX(USTARK/SIMH02,CXCHS)
852 AKHS10=MAX(USTARK/SIMH10,CXCHS)
854 !----------------------------------------------------------------------
856 !----------------------------------------------------------------------
860 !----------------------------------------------------------------------
861 ZTAU10=MIN(MAX(ZTAU10,ZTMIN2),ZTMAX2)
862 ZTAT02=MIN(MAX(ZTAT02,ZTMIN2),ZTMAX2)
863 ZTAT10=MIN(MAX(ZTAT10,ZTMIN2),ZTMAX2)
864 !----------------------------------------------------------------------
865 RZ=(ZTAU10-ZTMIN2)/DZETA2
870 PSM10=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
872 SIMM10=PSM10-PSMZ+RLNU10
874 RZ=(ZTAT02-ZTMIN2)/DZETA2
879 PSH02=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
881 SIMH02=(PSH02-PSHZ+RLNT02)*PRT0
882 ! SIMH02=(PSH02-PSHZ+RLNT02)*FH02
884 RZ=(ZTAT10-ZTMIN2)/DZETA2
889 PSH10=(PSIH2(K+2)-PSIH2(K+1))*RDZT+PSIH2(K+1)
891 SIMH10=(PSH10-PSHZ+RLNT10)*PRT0
892 ! SIMH10=(PSH10-PSHZ+RLNT10)*FH02
894 AKMS10=MAX(USTARK/SIMM10,CXCHL)
895 AKHS02=MAX(USTARK/SIMH02,CXCHL)
896 AKHS10=MAX(USTARK/SIMH10,CXCHL)
897 !----------------------------------------------------------------------
899 !----------------------------------------------------------------------
901 !----------------------------------------------------------------------
902 U10 =UMFLX/AKMS10+UZ0
903 V10 =VMFLX/AKMS10+VZ0
904 TH02=HSFLX/AKHS02+THZ0
905 TH10=HSFLX/AKHS10+THZ0
906 Q02 =HLFLX/AKHS02+QZ0
907 Q10 =HLFLX/AKHS10+QZ0
909 PSHLTR=PSFC*EXP(TERM1)
911 !----------------------------------------------------------------------
912 !*** COMPUTE "EQUIVALENT" Z0 TO APPROXIMATE LOCAL SHELTER READINGS.
913 !----------------------------------------------------------------------
920 !1st ZUUZ=MIN(0.5*ZU,0.1)
921 !1st ZU=MAX(0.1*ZU,ZUUZ)
922 !tst ZUUZ=amin1(ZU*0.50,0.3)
923 !tst ZU=amax1(ZU*0.3,ZUUZ)
925 ZUUZ=AMIN1(ZU*0.50,0.18)
926 ZU=AMAX1(ZU*0.35,ZUUZ)
935 ZTAU10=MIN(MAX(ZTAU10,ZTMIN2),ZTMAX2)
936 ZETAU=MIN(MAX(ZETAU,ZTMIN2/RZSU),ZTMAX2/RZSU)
938 RZ=(ZTAU10-ZTMIN2)/DZETA2
943 PSM10=(PSIM2(K+2)-PSIM2(K+1))*RDZT+PSIM2(K+1)
944 SIMM10=PSM10-PSMZ+RLNU10
945 EKMS10=MAX(USTARK/SIMM10,CXCHL)
947 U10E=UMFLX/EKMS10+UZ0
948 V10E=VMFLX/EKMS10+VZ0
955 !----------------------------------------------------------------------
956 !*** SET OTHER WRF DRIVER ARRAYS
957 !----------------------------------------------------------------------
962 IF ( PRESENT(SCM_FORCE_FLUX) ) THEN
963 IF (SCM_FORCE_FLUX.EQ.0) THEN
971 !!! QGH=PQ0/PSHLTR*EXP(A2S*(TSK-A3S)/(TSK-A4S))
972 QGH=((1.-SEAMASK)*PQ0+SEAMASK*PQ0SEA) &
973 & /PLOW*EXP(A2S*(TLOW-A3S)/(TLOW-A4S))
974 QGH=QGH/(1.-QGH) !Convert to mixing ratio
977 !*** DO NOT COMPUTE QS OVER LAND POINTS HERE SINCE IT IS
978 !*** A PROGNOSTIC VARIABLE THERE. IT IS OKAY TO USE IT
979 !*** AS A DIAGNOSTIC OVER WATER SINCE IT WILL CAUSE NO
980 !*** INTERFERENCE BEFORE BEING RECOMPUTED IN MYJPBL.
983 QS=QLOW+QFX/(RLOW*AKHS)
986 !----------------------------------------------------------------------
988 END SUBROUTINE SFCDIF
990 !----------------------------------------------------------------------
991 SUBROUTINE QNSESFCINIT(LOWLYR,USTAR,Z0 &
992 & ,SEAMASK,XICE,IVGTYP,RESTART &
994 & ,IDS,IDE,JDS,JDE,KDS,KDE &
995 & ,IMS,IME,JMS,JME,KMS,KME &
996 & ,ITS,ITE,JTS,JTE,KTS,KTE)
997 !----------------------------------------------------------------------
999 !----------------------------------------------------------------------
1000 LOGICAL,INTENT(IN) :: RESTART,ALLOWED_TO_READ
1002 INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
1003 & ,IMS,IME,JMS,JME,KMS,KME &
1004 & ,ITS,ITE,JTS,JTE,KTS,KTE
1006 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: IVGTYP
1008 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: LOWLYR
1010 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: SEAMASK,XICE
1012 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: USTAR,Z0
1014 REAL,DIMENSION(0:30) :: VZ0TBL
1015 REAL,DIMENSION(0:30) :: VZ0TBL_24
1017 INTEGER :: I,IDUM,IRECV,J,JDUM,K,ITF,JTF,KTF,MAXGBL_IVGTYP &
1018 &, MAXLOC_IVGTYP,MPI_COMM_COMP
1020 ! INTEGER :: MPI_INTEGER,MPI_MAX
1022 REAL :: SM,X,ZETA1,ZETA2,ZRNG1,ZRNG2,PSIMQ,PSIHQ
1024 REAL :: PIHF=3.1415926/2.,EPS=1.E-6
1025 !----------------------------------------------------------------------
1028 & 2.653,0.826,0.563,1.089,0.854,0.856,0.035,0.238,0.065,0.076 &
1029 & ,0.011,0.035,0.011,0.000,0.000,0.000,0.000,0.000,0.000,0.000 &
1030 & ,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000/)
1033 & 1.00, 0.07, 0.07, 0.07, 0.07, 0.15, &
1034 & 0.08, 0.03, 0.05, 0.86, 0.80, 0.85, &
1035 & 2.65, 1.09, 0.80, 0.001, 0.04, 0.05, &
1036 & 0.01, 0.04, 0.06, 0.05, 0.03, 0.001, &
1037 & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/)
1039 !----------------------------------------------------------------------
1046 !*** FOR NOW, ASSUME SIGMA MODE FOR LOWEST MODEL LAYER
1054 !----------------------------------------------------------------------
1057 IF(.NOT.RESTART)THEN
1058 ! CALL WRF_GET_DM_COMMUNICATOR(MPI_COMM_COMP)
1059 ! MAXLOC_IVGTYP=MAXVAL(IVGTYP)
1060 ! CALL MPI_ALLREDUCE(MAXLOC_IVGTYP,MAXGBL_IVGTYP,1,MPI_INTEGER &
1061 ! &, MPI_MAX,MPI_COMM_COMP,IRECV)
1062 MAXGBL_IVGTYP=MAXVAL(IVGTYP)
1065 CALL WRF_DM_MAXVAL(MAXGBL_IVGTYP,IDUM,JDUM)
1069 IF (MAXGBL_IVGTYP<13) THEN
1073 IF(SM+XICE(I,J)<0.5)THEN
1074 Z0(I,J)=VZ0TBL(IVGTYP(I,J))
1084 IF(SM+XICE(I,J)<0.5)THEN
1085 Z0(I,J)=VZ0TBL_24(IVGTYP(I,J))
1090 ENDIF ! Vegtype check
1092 ENDIF ! Restart check
1094 !----------------------------------------------------------------------
1095 IF(.NOT.RESTART)THEN
1102 !----------------------------------------------------------------------
1104 !*** COMPUTE SURFACE LAYER INTEGRAL FUNCTIONS
1106 !----------------------------------------------------------------------
1116 ZTMAX1=2.3 ! changed
1119 ZTMAX2=2.3 ! changed
1124 DZETA1=ZRNG1/(KZTM-1)
1125 DZETA2=ZRNG2/(KZTM-1)
1127 !----------------------------------------------------------------------
1128 !*** FUNCTION DEFINITION LOOP
1129 !----------------------------------------------------------------------
1136 !----------------------------------------------------------------------
1138 !----------------------------------------------------------------------
1142 !----------------------------------------------------------------------
1143 !*** PAULSON 1970 FUNCTIONS
1144 !----------------------------------------------------------------------
1145 X=SQRT(SQRT(1.-16.*ZETA1))
1147 PSIM1(K)=-2.*LOG((X+1.)/2.)-LOG((X*X+1.)/2.)+2.*ATAN(X)-PIHF
1148 PSIH1(K)=-2.*LOG((X*X+1.)/2.)
1150 !----------------------------------------------------------------------
1151 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1152 !----------------------------------------------------------------------
1154 PSIMQ=2.25*ZETA1+ZETA1**2+45.9*ZETA1**3
1155 PSIHQ=2.0*ZETA1+10.3*ZETA1**2+130*ZETA1**3
1156 ! PSIHQ=1.45*ZETA1+7.42*ZETA1**2+93.5*ZETA1**3 ! /PRT0
1157 PSIM1(K)=MAX(PSIMQ,PSIM1(K))
1158 PSIH1(K)=MAX(PSIHQ,PSIH1(K))
1160 !----------------------------------------------------------------------
1162 !----------------------------------------------------------------------
1166 !----------------------------------------------------------------------
1167 !*** PAULSON 1970 FUNCTIONS
1168 !----------------------------------------------------------------------
1172 !----------------------------------------------------------------------
1173 !*** HOLTSLAG AND DE BRUIN 1988
1174 !----------------------------------------------------------------------
1176 ! PSIM1(K)=0.7*ZETA1+0.75*ZETA1*(6.-0.35*ZETA1)*EXP(-0.35*ZETA1)
1177 ! PSIH1(K)=0.7*ZETA1+0.75*ZETA1*(6.-0.35*ZETA1)*EXP(-0.35*ZETA1)
1179 !----------------------------------------------------------------------
1180 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1181 !----------------------------------------------------------------------
1183 PSIM1(K)=2.25*ZETA1-0.2*ZETA1*ZETA1
1184 PSIH1(K)=2.0*ZETA1+0.14*((ZETA1-0.5)**5+0.03125)
1185 ! PSIH1(K)=1.42*ZETA1+0.1*((ZETA1-0.5)**5+0.03125) !/PRT0
1186 !----------------------------------------------------------------------
1190 !----------------------------------------------------------------------
1192 !----------------------------------------------------------------------
1196 !----------------------------------------------------------------------
1197 !*** PAULSON 1970 FUNCTIONS
1198 !----------------------------------------------------------------------
1200 X=SQRT(SQRT(1.-16.*ZETA2))
1202 PSIM2(K)=-2.*LOG((X+1.)/2.)-LOG((X*X+1.)/2.)+2.*ATAN(X)-PIHF
1203 PSIH2(K)=-2.*LOG((X*X+1.)/2.)
1205 !----------------------------------------------------------------------
1206 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1207 !----------------------------------------------------------------------
1209 PSIMQ=2.25*ZETA2+ZETA2**2+45.9*ZETA2**3
1210 PSIHQ=2.0*ZETA2+10.3*ZETA2**2+130*ZETA2**3
1211 ! PSIHQ=1.45*ZETA2+7.42*ZETA2**2+93.5*ZETA2**3 ! /PRT0
1212 PSIM2(K)=MAX(PSIMQ,PSIM2(K))
1213 PSIH2(K)=MAX(PSIHQ,PSIH2(K))
1215 !----------------------------------------------------------------------
1217 !----------------------------------------------------------------------
1221 !----------------------------------------------------------------------
1222 !*** PAULSON 1970 FUNCTIONS
1223 !----------------------------------------------------------------------
1228 !----------------------------------------------------------------------
1229 !*** HOLTSLAG AND DE BRUIN 1988
1230 !----------------------------------------------------------------------
1232 ! PSIM2(K)=0.7*ZETA2+0.75*ZETA2*(6.-0.35*ZETA2)*EXP(-0.35*ZETA2)
1233 ! PSIH2(K)=0.7*ZETA2+0.75*ZETA2*(6.-0.35*ZETA2)*EXP(-0.35*ZETA2)
1235 !----------------------------------------------------------------------
1236 !*** DERIVED BY S. SUKORIANSKY USING QNSE THEORY
1237 !----------------------------------------------------------------------
1239 PSIM2(K)=2.25*ZETA2-0.2*ZETA2*ZETA2
1240 PSIH2(K)=2.0*ZETA2+0.14*((ZETA2-0.5)**5+0.03125)
1241 ! PSIH2(K)=1.42*ZETA2+0.1*((ZETA2-0.5)**5+0.03125) !/PRT0
1242 !----------------------------------------------------------------------
1246 !----------------------------------------------------------------------
1254 !----------------------------------------------------------------------
1256 !----------------------------------------------------------------------
1259 !----------------------------------------------------------------------
1261 END SUBROUTINE QNSESFCINIT
1263 !----------------------------------------------------------------------
1265 END MODULE MODULE_SF_QNSESFC
1267 !----------------------------------------------------------------------