!NCEP_MESO:MEDIATION_LAYER: PHYSICS
!
!***********************************************************************
SUBROUTINE TURBL(grid & 1,11
& ,NTSD,DT,NPHS,RESTRT &
& ,N_MOIST,NSOIL,SLDPTH,DZSOIL &
& ,DETA1,DETA2,AETA1,AETA2,ETA1,ETA2,PDTOP,PT &
& ,SM,LMH,HTM,VTM,HBM2,VBM2,DX,DFRLG &
& ,CZEN,CZMEAN,SIGT4,RLWIN,RSWIN,RADOT &
& ,PD,RES,PINT,T,Q,CWM,Q2,U,V &
& ,THS,SST,PREC,SNO,ZERO_3D &
& ,FIS,Z0,Z0BASE,USTAR,PBLH,LPBL,AKHS,AKMS &
& ,THZ0,QZ0,UZ0,VZ0,QS &
& ,STC,SMC,CMC,SMSTAV,SMSTOT,SSROFF,BGROFF &
& ,IVGTYP,ISLTYP,VEGFRC,SHDMIN,SHDMAX,GRNFLX &
& ,SFCEXC,ACSNOW,ACSNOM,SNOPCX,SICE,TG,SOILTB &
& ,ALBASE,MXSNAL,ALBEDO,SH2O,SI,EPSR &
& ,U10,V10,TH10,Q10,TSHLTR,QSHLTR,PSHLTR &
& ,TWBS,QWBS,SFCSHX,SFCLHX,SFCEVP &
& ,POTEVP,POTFLX,SUBSHX &
& ,APHTIM,ARDSW,ARDLW,ASRFC &
& ,RSWOUT,RSWTOA,RLWTOA &
& ,ASWIN,ASWOUT,ASWTOA,ALWIN,ALWOUT,ALWTOA &
& ,UZ0H,VZ0H,DUDT,DVDT & !jm
& ,CONFIG_FLAGS &
& ,IHE,IHW,IVE,IVW &
& ,IDS,IDE,JDS,JDE,KDS,KDE &
& ,IMS,IME,JMS,JME,KMS,KME &
& ,ITS,ITE,JTS,JTE,KTS,KTE)
!***********************************************************************
!$$$ SUBPROGRAM DOCUMENTATION BLOCK
! . . .
! SUBPROGRAM: TURBL TURBULENCE OUTER DRIVER
! PRGRMMR: BLACK ORG: W/NP22 DATE: 02-04-19
!
! ABSTRACT:
! TURBL DRIVES THE TURBULENCE SCHEMES
!
! PROGRAM HISTORY LOG (with changes to called routines) :
! 95-03-15 JANJIC - ORIGINATOR OF THE SUBROUTINES CALLED
! BLACK & JANJIC - ORIGINATORS OF THE DRIVER
! 95-03-28 BLACK - CONVERSION FROM 1-D TO 2-D IN HORIZONTAL
! 96-03-29 BLACK - ADDED EXTERNAL EDGE; REMOVED SCRCH COMMON
! 96-07-19 MESINGER - ADDED Z0 EFFECTIVE
! 98-??-?? TUCCILLO - MODIFIED FOR CLASS VIII PARALLELISM
! 98-10-27 BLACK - PARALLEL CHANGES INTO MOST RECENT CODE
! 02-01-10 JANJIC - MOIST TURBULENCE (DRIVER, MIXLEN, VDIFH)
! 02-01-10 JANJIC - VERT. DIF OF Q2 INCREASED (Grenier & Bretherton)
! 02-02-02 JANJIC - NEW SFCDIF
! 02-04-19 BLACK - ORIGINATOR OF THIS OUTER DRIVER FOR WRF
! 02-05-03 JANJIC - REMOVAL OF SUPERSATURATION AT 2m AND 10m
!
! USAGE: CALL TURBL FROM SOLVE_RUNSTREAM
!
! ATTRIBUTES:
! LANGUAGE: FORTRAN 90
! MACHINE : IBM SP
!$$$
!-----------------------------------------------------------------------
USE MODULE_domain
USE MODULE_dm
USE MODULE_CONFIGURE
USE MODULE_STATE_DESCRIPTION
,ONLY : P_QV,P_QC
USE module_model_constants
USE MODULE_MPP
USE MODULE_SF_MYJSFC
USE module_surface_driver
USE module_pbl_driver
!!! USE MODULE_TIMERS
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
!-----------------------------------------------------------------------
!
TYPE(domain) :: grid
INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE &
& ,IMS,IME,JMS,JME,KMS,KME &
& ,ITS,ITE,JTS,JTE,KTS,KTE &
& ,N_MOIST,NPHS,NSOIL,NTSD
!
INTEGER, DIMENSION(JMS:JME),INTENT(IN) :: IHE,IHW,IVE,IVW
!
INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: ISLTYP,IVGTYP &
& ,LMH
!
INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: LPBL
!
REAL,INTENT(IN) :: DT,DX,PDTOP,PT
!
REAL,INTENT(INOUT) :: APHTIM,ARDSW,ARDLW,ASRFC
!
REAL,DIMENSION(KMS:KME-1),INTENT(IN) :: AETA1,AETA2,DETA1,DETA2
!
REAL,DIMENSION(KMS:KME),INTENT(IN) :: DFRLG,ETA1,ETA2
!
REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: ALBASE,MXSNAL
REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: CZEN,CZMEAN &
& ,EPSR,FIS,HBM2 &
& ,PD,RES &
& ,RLWIN,RLWTOA &
& ,RSWIN,RSWOUT,RSWTOA &
& ,SICE,SIGT4,SM,SST &
& ,TG,VBM2,VEGFRC &
& ,SHDMIN,SHDMAX
!
REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: GRNFLX,QWBS,RADOT &
,SFCEXC,SMSTAV &
,SMSTOT,SOILTB,TWBS
!
REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: ACSNOM,ACSNOW &
& ,AKHS,AKMS &
& ,ALBEDO &
& ,BGROFF,CMC &
& ,PBLH,POTEVP &
& ,POTFLX,PREC &
& ,QS,QZ0,SFCEVP &
& ,SFCLHX,SFCSHX &
& ,SH2O,SI &
& ,SNO,SNOPCX &
& ,SSROFF,SUBSHX &
& ,THS,THZ0 &
& ,USTAR,UZ0,VZ0,Z0 &
& ,Z0BASE &
& ,UZ0H,VZ0H
!
REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: ALWIN,ALWOUT &
& ,ALWTOA,ASWIN &
& ,ASWOUT,ASWTOA &
& ,PSHLTR,Q10,QSHLTR &
& ,TH10,TSHLTR &
& ,U10,V10
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(INOUT) :: CWM &
& ,Q,Q2 &
& ,T,U,V
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: HTM,VTM
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: PINT
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(INOUT) :: ZERO_3D
!
REAL,DIMENSION(NSOIL),INTENT(IN) :: DZSOIL,SLDPTH
!
REAL,DIMENSION(IMS:IME,NSOIL,JMS:JME),INTENT(INOUT) :: SMC,STC
!
LOGICAL,INTENT(IN) :: RESTRT
!
TYPE(GRID_CONFIG_REC_TYPE),INTENT(IN) :: CONFIG_FLAGS
!
!***
!*** LOCAL VARIABLES
!***
INTEGER, DIMENSION(1) :: I_START,I_END,J_START,J_END
INTEGER :: I,IDUMMY,IEND,ISFFLX,J,K,LLIJ,LLMH,LLYR,N
!
INTEGER,DIMENSION(IMS:IME,JMS:JME) :: KPBL,LOWLYR
!
REAL :: CWML,DCDT,DQDT,DTDT,DTPHS,FACTR,FACTRL,G_INV &
& ,PDSL,PLYR,PSFC,QL,QOLD,RATIOMX,RDTPHS,RHOD,RHODI,ROG &
& ,RWMSK,SDEPTH,TL,TLMH,TLMH4,TNEW,TSFC2,U_FRAME,V_FRAME &
& ,WMSK,XLVRW
REAL :: APES,CKLQ,FACTOR,FFS,PQ0X,Q2SAT,QFC1,QLOWX,QSX,RLIVWV &
& ,THBOT
REAL :: TRESH=0.95
!
REAL,DIMENSION(IMS:IME,JMS:JME) :: EXNSFC,FACTRS,PLM,Q2X &
& ,RAIN,RAINBL &
& ,RLW_DN_SFC,RSW_DN_SFC &
& ,SFCZ,SNOW,SNOWC,SNOWH &
& ,TH2X,TSFC,VGFRCK &
& ,XLAND,ZERO_2D
!
REAL,DIMENSION(IMS:IME,JMS:JME) :: CWMLOW,QLOW,SFCEVPx,THLOW,TLOW
REAL,DIMENSION(IMS:IME,JMS:JME) :: CT
!
REAL,DIMENSION(IMS:IME,KMS:KME-1,JMS:JME) :: EXNER
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME) :: DUDT,DVDT,DZ &
& ,P8W,P_PHY,PI_PHY &
& ,RQCBLTEN,RQVBLTEN &
& ,RR,RTHBLTEN &
& ,T_PHY,TH_PHY,TKE &
& ,U_PHY,V_PHY,Z
REAL, DIMENSION( ims:ime, jms:jme ) :: FLHC, &
FLQC, &
QGH, &
PSIM, &
PSIH, &
GZ1OZ0, &
WSPD, &
BR, &
CPM, &
CHS2, &
CHKLOWQ, &
ELFLX
!
REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME,N_MOIST) :: WATER
!
REAL,ALLOCATABLE,DIMENSION(:,:,:) :: TOLD
!
LOGICAL :: E_BDY,WARM_RAIN
!
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
MYIS =MAX(IDS ,ITS )
MYIE =MIN(IDE ,ITE )
MYJS =MAX(JDS ,JTS )
MYJE =MIN(JDE ,JTE )
!
I_START(1) = MYIS
I_END(1) = MYIE
J_START(1) = MYJS
J_END(1) = MYJE
!
MYIS1 =MAX(IDS+1,ITS )
MYIE1 =MIN(IDE-1,ITE )
MYJS1 =MAX(JDS+1,JTS )
MYJE1 =MIN(JDE-1,JTE )
MYJS2 =MAX(JDS+2,JTS )
MYJE2 =MIN(JDE-2,JTE )
!
MYIS_P1 =MAX(IDS ,ITS-1)
MYIE_P1 =MIN(IDE ,ITE+1)
!
MYJS1_P1=MAX(JDS+1,JTS-1)
MYJE1_P1=MIN(JDE-1,JTE+1)
MYJS2_P1=MAX(JDS+2,JTS-1)
MYJE2_P1=MIN(JDE-2,JTE+1)
!
DTPHS=NPHS*DT
RDTPHS=1./DTPHS
G_INV=1./G
ROG=R_D*G_INV
FACTOR=-XLV*RHOWATER/DTPHS
!
U_FRAME=0.
V_FRAME=0.
!
IDUMMY=0
ISFFLX=1
!
DO J=MYJS,MYJE
DO I=MYIS,MYIE
LOWLYR(I,J)=1
UZ0H(I,J)=0.
VZ0H(I,J)=0.
VGFRCK(I,J)=100.*VEGFRC(I,J)
SNOW(I,J)=SNO(I,J)
SNOWH(I,J)=SI(I,J)
XLAND(I,J)=SM(I,J)+1.
ENDDO
ENDDO
!
IF(NTSD.EQ.0)THEN
DO J=MYJS,MYJE
DO I=MYIS,MYIE
SNOW(I,J)=SNO(I,J)*1000.
SNOWH(I,J)=SI(I,J)*1000.
Z0BASE(I,J)=Z0(I,J)
! JD FOR NEW LSM WE SAVE THE SNOW-FREE Z0 IN Z0BASE
ENDDO
ENDDO
ENDIF
!
DO J=MYJS,MYJE
DO K=KTS,KTE+1
DO I=MYIS,MYIE
Z(I,K,J)=0.
DZ(I,K,J)=0.
ENDDO
ENDDO
ENDDO
!
!-----------------------------------------------------------------------
!
!*** PREPARE NEEDED ARRAYS
!
!-----------------------------------------------------------------------
!
ALLOCATE(TOLD(IMS:IME,KMS:KME-1,JMS:JME),STAT=I)
!
! DO J=MYJS2,MYJE2
! DO I=MYIS1,MYIE1
DO J=MYJS,MYJE
DO I=MYIS,MYIE
!
LLMH=LMH(I,J)
PDSL=PD(I,J)*RES(I,J)
!!! PSFC=PD(I,J)+PDTOP+PT
!!! P8W(I,KTS,J)=PSFC
P8W(I,KTS,J)=PINT(I,KTS,J)
PSFC=PINT(I,KTS,J)
LOWLYR(I,J)=KTE+1-LLMH
EXNSFC(I,J)=(1.E5/PSFC)**CAPA
THS(I,J)=(SST(I,J)*EXNSFC(I,J))*SM(I,J)+THS(I,J)*(1.-SM(I,J))
TSFC(I,J)=THS(I,J)/EXNSFC(I,J)
SFCZ(I,J)=FIS(I,J)*G_INV
ZERO_2D(I,J)=0.
RAIN(I,J)=PREC(I,J)*RHOWATER
RAINBL(I,J)=0.
IF(SNO(I,J).GT.0.)SNOWC(I,J)=1.
LLIJ=LOWLYR(I,J)
PLM(I,J)=(PINT(I,LLIJ,J)+PINT(I,LLIJ+1,J))*0.5
TH2X(I,J)=T(I,LLIJ,J)*(1.E5/PLM(I,J))**CAPA
Q2X(I,J)=Q(I,LLIJ,J)
IF(PBLH(I,J).LT.0.)PBLH(I,J)=0.
!
!*** LONG AND SHORTWAVE FLUX AT GROUND SURFACE
!
IF(CZMEAN(I,J).GT.0.)THEN
FACTRS(I,J)=CZEN(I,J)/CZMEAN(I,J)
ELSE
FACTRS(I,J)=0.
ENDIF
!
IF(SIGT4(I,J).GT.0.)THEN
TLMH=T(I,LLIJ,J)
TLMH4=TLMH**4
FACTRL=STBOLT*TLMH4/SIGT4(I,J)
ELSE
FACTRL=0.
ENDIF
!
RLW_DN_SFC(I,J)=RLWIN(I,J)*HBM2(I,J)*FACTRL
RSW_DN_SFC(I,J)=RSWIN(I,J)*HBM2(I,J)*FACTRS(I,J)
!
!*** FILL THE ARRAYS FOR CALLING THE INNER DRIVER.
!
Z(I,KTS,J)=SFCZ(I,J)
!
DO K=KTS,KTE
Q2(I,K,J)=AMAX1(Q2(I,K,J)*HBM2(I,J),EPSQ2)
QL=AMAX1(Q(I,K,J),EPSQ)
PLYR=(PINT(I,K,J)+PINT(I,K+1,J))*0.5
!!! PLYR=AETA1(K)*PDTOP+AETA2(K)*PDSL+PT
TL=T(I,K,J)
CWML=CWM(I,K,J)
!
RR(I,K,J)=PLYR/(R_D*TL)
T_PHY(I,K,J)=TL
TOLD(I,K,J)=TL
WATER(I,K,J,P_QV)=QL/(1.-QL) !Need to pass mixing ratio
WATER(I,K,J,P_QC)=CWML
EXNER(I,K,J)=(1.E5/PLYR)**CAPA
PI_PHY(I,K,J)=1./EXNER(I,K,J)
TH_PHY(I,K,J)=TL*EXNER(I,K,J)
P8W(I,K+1,J)=PINT(I,K+1,J)
!!! P8W(I,K+1,J)=ETA1(K+1)*PDTOP+ETA2(K+1)*PDSL+PT
P_PHY(I,K,J)=PLYR
TKE(I,K,J)=0.5*Q2(I,K,J)
!
RTHBLTEN(I,K,J)=0.
RQVBLTEN(I,K,J)=0.
RQCBLTEN(I,K,J)=0.
!
Z(I,K+1,J)=Z(I,K,J)+TL/PLYR &
& *(DETA1(K)*PDTOP+DETA2(K)*PDSL)*ROG &
*(Q(I,K,J)*P608-CWML+1.)
Z(I,K+1,J)=(Z(I,K+1,J)-DFRLG(K+1))*HTM(I,K,J)+DFRLG(K+1)
!!! FACTR=1.-HTM(I,K,J)
!!! Z(I,K+1,J)=Z(I,K+1,J)*HTM(I,K,J)+FACTR*DFRLG(K+1)
DZ(I,K,J)=Z(I,K+1,J)-Z(I,K,J)
ENDDO
ENDDO
ENDDO
!
DO J=MYJS,MYJE
DO I=MYIS,MYIE
TWBS(I,J)=0.
QWBS(I,J)=0.
LLYR=LOWLYR(I,J)
THLOW(I,J)=TH_PHY(I,LLYR,J)
TLOW(I,J)=T_PHY(I,LLYR,J)
QLOW(I,J)=MAX(Q(I,LLYR,J),EPSQ)
QLOWX=QLOW(I,J)/(1.-QLOW(I,J))
QLOW(I,J)=QLOWX/(1.+QLOWX)
CWMLOW(I,J)=CWM(I,LLYR,J)
ENDDO
ENDDO
!-----------------------------------------------------------------------
!
!*** COMPUTE VELOCITY COMPONENTS AT MASS POINTS
!
!-----------------------------------------------------------------------
DO J=MYJS1_P1,MYJE1_P1
!
DO K=KTS,KTE
DO I=MYIS_P1,MYIE_P1
WMSK=VTM(I+IHE(J),K,J)+VTM(I+IHW(J),K,J) &
& +VTM(I,K,J+1)+VTM(I,K,J-1)
IF(WMSK.GT.0.)THEN
RWMSK=1./WMSK
U_PHY(I,K,J)=(U(I+IHE(J),K,J)*VTM(I+IHE(J),K,J) &
& +U(I+IHW(J),K,J)*VTM(I+IHW(J),K,J) &
& +U(I,K,J+1)*VTM(I,K,J+1) &
& +U(I,K,J-1)*VTM(I,K,J-1))*RWMSK
V_PHY(I,K,J)=(V(I+IHE(J),K,J)*VTM(I+IHE(J),K,J) &
& +V(I+IHW(J),K,J)*VTM(I+IHW(J),K,J) &
& +V(I,K,J+1)*VTM(I,K,J+1) &
& +V(I,K,J-1)*VTM(I,K,J-1))*RWMSK
ELSE
U_PHY(I,K,J)=0.
V_PHY(I,K,J)=0.
ENDIF
ENDDO
ENDDO
ENDDO
!
DO J=MYJS1_P1,MYJE1_P1
DO I=MYIS_P1,MYIE_P1
UZ0H(I,J)=(UZ0(I+IHE(J),J)+UZ0(I+IHW(J),J) &
& +UZ0(I,J+1)+UZ0(I,J-1))*0.25
!!! & +UZ0(I,J+1)+UZ0(I,J-1))*HBM2(I,J)*0.25
VZ0H(I,J)=(VZ0(I+IHE(J),J)+VZ0(I+IHW(J),J) &
& +VZ0(I,J+1)+VZ0(I,J-1))*0.25
!!! & +VZ0(I,J+1)+VZ0(I,J-1))*HBM2(I,J)*0.25
ENDDO
ENDDO
!-----------------------------------------------------------------------
!
!*** CALL TURBULENCE
!
!-----------------------------------------------------------------------
!
DUDT = 0.
DVDT = 0.
CALL surface_driver
( &
& ACSNOM,ACSNOW,AKHS,AKMS,ALBEDO,BR,CMC,ZERO_2D &
& ,CHKLOWQ,CONFIG_FLAGS,DT,DX,DZ,SLDPTH,ZERO_2D &
& ,RLW_DN_SFC,GRNFLX,RLW_DN_SFC,GZ1OZ0,TWBS,ZERO_2D &
& ,SFCZ,IDUMMY,ISFFLX,ISLTYP,NTSD,IVGTYP,LOWLYR &
& ,ZERO_2D,WATER,ZERO_2D,NSOIL,N_MOIST,P8W,PBLH &
& ,PI_PHY,PSHLTR,PSIH,PSIM,P_PHY,Q10,Q2X,QWBS,QS,QSHLTR &
& ,QZ0,RAINBL,RAIN,ZERO_2D,ZERO_2D,RR,SFCEVPX &
& ,SFCEXC,SSROFF,SMC,SMSTAV,SMSTOT,MXSNAL,SNOW,SNOWC &
& ,SNOWH,NPHS,ZERO_2D,TH10,TH2X,ZERO_2D,THZ0,TH_PHY &
& ,TG,TSHLTR,TSFC,STC,T_PHY,U10,BGROFF,USTAR,UZ0H &
& ,U_FRAME,U_PHY,V10,VGFRCK,VZ0H,V_FRAME,V_PHY &
& ,WARM_RAIN,WSPD,SICE,XLAND,Z,Z0,DZSOIL &
& ,CT,TKE &
& ,ALBASE,ELFLX,SH2O,SHDMAX,SHDMIN,Z0BASE &
& ,POTEVP,SNOPCX,SOILTB & ! NMM LSM only
& ,IDS,IDE,JDS,JDE,KDS,KDE &
& ,IMS,IME,JMS,JME,KMS,KME &
& ,I_START,min(I_END,IDE-1),max(J_START,2),min(J_END,jde-1),KTS,KTE,1 ) ! start j at 2 for nmm
! optional extra for Noah LSM package
! & ,ALBBCK=ALBBCK,LH=LH,SH2O=SH2O,SHDMAX=SHDMAX &
! & ,SHDMIN=SHDMIN,Z0=Z0 )
! & ,CT=CT &
! & ,ALBSF=ALBASE,POTEVP=POTEVP,PSHLTR=PSHLTR &
! & ,SMLIQ=SH2O,SNOPCX=SNOPCX,TBOT=SOILTB,TKE_MYJ=TKE &
! & ,ELFLX=ELFLX )
CALL pbl_driver
(NTSD,dt,u_frame,v_frame &
& ,ZERO_3D,ZERO_3D,RTHBLTEN &
& ,RQVBLTEN,RQCBLTEN,ZERO_3D &
& ,TSFC,XLAND,Z0,SFCZ &
& ,USTAR,ZERO_2D,ZERO_2D,PBLH &
& ,TWBS,QWBS,ZERO_2D,GRNFLX &
& ,u_phy,v_phy,th_phy,rr,water &
& ,p_phy,pi_phy,p8w,t_phy,dz,z &
& ,TKE,AKHS,AKMS &
& ,THZ0,QZ0,UZ0H,VZ0H,QS,LOWLYR &
& ,PSIM,PSIH,GZ1OZ0, WSPD,BR,CHKLOWQ & !m 26 Aug 2002
& ,config_flags,DX,n_moist & !TSLB (STEMP)
& ,NPHS,warm_rain &
& ,KPBL,CT,ELFLX,SNOW,SICE &
& ,ids,ide, jds,jde, kds,kde &
& ,ims,ime, jms,jme, kms,kme &
& ,I_START,min(I_END,IDE-1),max(J_START,2),min(J_END,jde-1),KTS,KTE,1 ) ! start j at 2 for nmm
!
!-----------------------------------------------------------------------
!
DO J=MYJS2,MYJE2
DO I=MYIS1,MYIE1
LLYR=LOWLYR(I,J)
PQ0X=PQ0
IF(SM(I,J).GT.0.5)PQ0X=PQ0SEA
Q2SAT=(PQ0X/P_PHY(I,LLYR,J))*EXP(A2S*(TLOW(I,J)-A3S) &
& /(TLOW(I,J)-A4S))
CKLQ=1.
IF(QLOW(I,J).GE.Q2SAT*TRESH)CKLQ=0.
FFS=AKHS(I,J)*P_PHY(I,LLYR,J)/ &
& ((QLOW(I,J)*P608-CWMLOW(I,J)+1.)*TLOW(I,J)*R_D)
APES=(1.E5/PINT(I,KTS,J))**CAPA
QFC1=APES*FFS*XLV
QFC1=QFC1*CKLQ
IF(SNO(I,J).GT.0..OR.SICE(I,J).GT.0.)THEN
RLIVWV=XLS/XLV
QFC1=QFC1*RLIVWV
ENDIF
QSX=QS(I,J)
IF(SM(I,J).GT.0.5)QSX=QZ0(I,J)
QWBS(I,J)=(QLOW(I,J)-QSX)*QFC1/APES
ENDDO
ENDDO
!
DO J=MYJS2,MYJE2
DO I=MYIS1,MYIE1
SNO(I,J)=SNOW(I,J)
SI(I,J)=SNOWH(I,J)
LPBL(I,J)=KTE-KPBL(I,J)+1
ENDDO
ENDDO
!
DO J=MYJS2,MYJE2
DO I=MYIS,MYIE
!
!*** DIAGNOSTIC RADIATION ACCUMULATION
!
ASWIN (I,J)=ASWIN (I,J)+RSW_DN_SFC(I,J)
ASWOUT(I,J)=ASWOUT(I,J)-RSWOUT(I,J)*HBM2(I,J)*FACTRS(I,J)
ASWTOA(I,J)=ASWTOA(I,J)+RSWTOA(I,J)*HBM2(I,J)*FACTRS(I,J)
ALWIN (I,J)=ALWIN (I,J)+RLW_DN_SFC(I,J)
ALWOUT(I,J)=ALWOUT(I,J)-RADOT (I,J)*HBM2(I,J)
ALWTOA(I,J)=ALWTOA(I,J)+RLWTOA(I,J)*HBM2(I,J)
!
TSFC2=TSFC(I,J)*TSFC(I,J)
RADOT(I,J)=HBM2(I,J)*EPSR(I,J)*STBOLT*TSFC2*TSFC2
THS(I,J)=TSFC(I,J)*EXNSFC(I,J)
PREC(I,J)=0.
ENDDO
ENDDO
!
!*** RECONSTRUCT UZ0 AND VZ0 ON VELOCITY POINTS.
!
#ifdef DM_PARALLEL
# include "HALO_NMM_TURBL_A.inc"
#endif
!
DO J=MYJS2,MYJE2
DO I=MYIS,MYIE
UZ0(I,J)=(UZ0H(I+IVE(J),J)*HBM2(I+IVE(J),J) &
& +UZ0H(I+IVW(J),J)*HBM2(I+IVW(J),J) &
& +UZ0H(I,J+1)*HBM2(I,J+1)+UZ0H(I,J-1)*HBM2(I,J-1))*0.25
VZ0(I,J)=(VZ0H(I+IVE(J),J)*HBM2(I+IVE(J),J) &
& +VZ0H(I+IVW(J),J)*HBM2(I+IVW(J),J) &
& +VZ0H(I,J+1)*HBM2(I,J+1)+VZ0H(I,J-1)*HBM2(I,J-1))*0.25
ENDDO
ENDDO
!
!-----------------------------------------------------------------------
!*** UPDATE TEMPERATURE, SPECIFIC HUMIDITY, AND TKE.
!-----------------------------------------------------------------------
!
E_BDY=(ITE.GE.IDE)
!
DO J=MYJS2,MYJE2
IEND=MYIE1
IF(E_BDY.AND.MOD(J,2).EQ.0)IEND=IEND-1
!
DO K=KTS,KTE
DO I=MYIS1,IEND
DTDT=RTHBLTEN(I,K,J)*PI_PHY(I,K,J)
DQDT=RQVBLTEN(I,K,J) !Mixing ratio tendency
DCDT=RQCBLTEN(I,K,J)
T(I,K,J)=T(I,K,J)+DTDT*DTPHS
QOLD=Q(I,K,J)
RATIOMX=QOLD/(1.-QOLD)+DQDT*DTPHS
Q(I,K,J)=RATIOMX/(1.+RATIOMX)
CWM(I,K,J)=CWM(I,K,J)+DCDT*DTPHS
Q2(I,K,J)=2.*TKE(I,K,J)
ENDDO
ENDDO
!
ENDDO
!
!-----------------------------------------------------------------------
!*** INTERPOLATE WIND COMPONENTS BACK TO VELOCITY POINTS.
!-----------------------------------------------------------------------
!
DO J=MYJS1,MYJE1
DO K=KTS,KTE
DO I=MYIS,MYIE1
DUDT(I,K,J)=DUDT(I,K,J)
DVDT(I,K,J)=DVDT(I,K,J)
ENDDO
ENDDO
ENDDO
!
#ifdef DM_PARALLEL
# include "HALO_NMM_TURBL_B.inc"
#endif
!
DO J=MYJS2,MYJE2
IEND=MYIE1
IF(E_BDY.AND.MOD(J,2).EQ.1)IEND=IEND-1
!
DO K=KTS,KTE
DO I=MYIS1,IEND
U(I,K,J)=(DUDT(I+IVE(J),K,J)+DUDT(I+IVW(J),K,J) &
& +DUDT(I,K,J+1)+DUDT(I,K,J-1))*0.25*DTPHS &
& *VTM(I,K,J)+U(I,K,J)
V(I,K,J)=(DVDT(I+IVE(J),K,J)+DVDT(I+IVW(J),K,J) &
& +DVDT(I,K,J+1)+DVDT(I,K,J-1))*0.25*DTPHS &
& *VTM(I,K,J)+V(I,K,J)
ENDDO
ENDDO
ENDDO
!
DEALLOCATE(TOLD)
!-----------------------------------------------------------------------
!***
!*** WE MUST COMPUTE QUANTITIES THAT ARE NO LONGER AVAILABLE
!*** IN THE PBL MODULE.
!***
!-----------------------------------------------------------------------
DO J=MYJS2,MYJE2
DO I=MYIS1,MYIE1
LLIJ=LOWLYR(I,J)
!
!*** INSTANTANEOUS SENSIBLE AND LATENT HEAT FLUX
!
THBOT=THZ0(I,J)
IF(SM(I,J).LT.0.5)THBOT=THS(I,J)
QL=MAX(Q(I,LOWLYR(I,J),J),EPSQ)
LLYR=LOWLYR(I,J)
FFS=AKHS(I,J)*P_PHY(I,LLYR,J)/ &
& ((QLOW(I,J)*P608-CWMLOW(I,J)+1.)*TLOW(I,J)*R_D)
FFS=FFS*CP
APES=(1.E5/PINT(I,KTS,J))**CAPA
TWBS(I,J)=(THLOW(I,J)-THBOT)*FFS/APES
!!!!!! TWBS(I,J)=-TWBS(I,J)
!
!!!!!! QWBS(I,J)=-QWBS(I,J)*XLV
!
!*** ACCUMULATED QUANTITIES.
!*** IN OPNL LSM, SFCEVP APPEARS TO BE IN UNITS OF
!*** METERS OF LIQUID WATER. IT IS COMING FROM
!*** WRF MODULE AS KG/M**2.
!
SFCSHX(I,J)=SFCSHX(I,J)+TWBS(I,J)
SFCLHX(I,J)=SFCLHX(I,J)+QWBS(I,J)
XLVRW=DTPHS/(XLV*RHOWATER)
SFCEVP(I,J)=SFCEVP(I,J)-QWBS(I,J)*XLVRW
POTEVP(I,J)=POTEVP(I,J)-QWBS(I,J)*SM(I,J)*XLVRW
POTFLX(I,J)=POTEVP(I,J)*FACTOR
SUBSHX(I,J)=SUBSHX(I,J)+GRNFLX(I,J)
!
ENDDO
ENDDO
!
!*** COUNTERS
!
APHTIM=APHTIM+1.
ARDSW =ARDSW +1.
ARDLW =ARDLW +1.
ASRFC =ASRFC +1.
!-----------------------------------------------------------------------
!
END SUBROUTINE TURBL
!
!-----------------------------------------------------------------------