!WRF:MODEL_LAYER:PHYSICS
!
MODULE module_bl_mrf 2
CONTAINS
!-------------------------------------------------------------------
SUBROUTINE MRF(U3D,V3D,TH3D,T3D,QV3D,QC3D,P3D,PI3D, & 1,1
RUBLTEN,RVBLTEN,RTHBLTEN, &
RQVBLTEN,RQCBLTEN, &
CP,G,ROVCP,R,ROVG, &
dz8w,z,XLV,RV,PSFC, &
p1000mb, &
ZNT,UST,ZOL,HOL,PBL,PSIM,PSIH, &
XLAND,HFX,QFX,TSK,GZ1OZ0,WSPD,BR, &
DT,DTMIN,KPBL2D, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN,EOMEG,STBOLT,&
flag_qi, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
! Optional
QI3D,RQIBLTEN, &
regime )
!-------------------------------------------------------------------
IMPLICIT NONE
!-------------------------------------------------------------------
!-- U3D 3D u-velocity interpolated to theta points (m/s)
!-- V3D 3D v-velocity interpolated to theta points (m/s)
!-- TH3D 3D potential temperature (K)
!-- T3D temperature (K)
!-- QV3D 3D water vapor mixing ratio (Kg/Kg)
!-- QC3D 3D cloud mixing ratio (Kg/Kg)
!-- QI3D 3D ice mixing ratio (Kg/Kg)
!-- P3D 3D pressure (Pa)
!-- PI3D 3D exner function (dimensionless)
!-- rr3D 3D dry air density (kg/m^3)
!-- RUBLTEN U tendency due to
! PBL parameterization (m/s^2)
!-- RVBLTEN V tendency due to
! PBL parameterization (m/s^2)
!-- RTHBLTEN Theta tendency due to
! PBL parameterization (K/s)
!-- RQVBLTEN Qv tendency due to
! PBL parameterization (kg/kg/s)
!-- RQCBLTEN Qc tendency due to
! PBL parameterization (kg/kg/s)
!-- RQIBLTEN Qi tendency due to
! PBL parameterization (kg/kg/s)
!-- CP heat capacity at constant pressure for dry air (J/kg/K)
!-- G acceleration due to gravity (m/s^2)
!-- ROVCP R/CP
!-- R gas constant for dry air (J/kg/K)
!-- ROVG R/G
!-- dz8w dz between full levels (m)
!-- z height above sea level (m)
!-- XLV latent heat of vaporization (J/kg)
!-- RV gas constant for water vapor (J/kg/K)
!-- PSFC pressure at the surface (Pa)
!-- ZNT roughness length (m)
!-- UST u* in similarity theory (m/s)
!-- ZOL z/L height over Monin-Obukhov length
!-- HOL PBL height over Monin-Obukhov length
!-- PBL PBL height (m)
!-- REGIME flag indicating PBL regime (stable, unstable, etc.)
!-- PSIM similarity stability function for momentum
!-- PSIH similarity stability function for heat
!-- XLAND land mask (1 for land, 2 for water)
!-- HFX upward heat flux at the surface (W/m^2)
!-- QFX upward moisture flux at the surface (kg/m^2/s)
!-- TSK surface temperature (K)
!-- GZ1OZ0 log(z/z0) where z0 is roughness length
!-- WSPD wind speed at lowest model level (m/s)
!-- BR bulk Richardson number in surface layer
!-- DT time step (s)
!-- DTMIN time step (minute)
!-- rvovrd R_v divided by R_d (dimensionless)
!-- SVP1 constant for saturation vapor pressure (kPa)
!-- SVP2 constant for saturation vapor pressure (dimensionless)
!-- SVP3 constant for saturation vapor pressure (K)
!-- SVPT0 constant for saturation vapor pressure (K)
!-- EP1 constant for virtual temperature (R_v/R_d - 1) (dimensionless)
!-- EP2 constant for specific humidity calculation
!-- KARMAN Von Karman constant
!-- EOMEG angular velocity of earth's rotation (rad/s)
!-- STBOLT Stefan-Boltzmann constant (W/m^2/K^4)
!-- ids start index for i in domain
!-- ide end index for i in domain
!-- jds start index for j in domain
!-- jde end index for j in domain
!-- kds start index for k in domain
!-- kde end index for k in domain
!-- ims start index for i in memory
!-- ime end index for i in memory
!-- jms start index for j in memory
!-- jme end index for j in memory
!-- kms start index for k in memory
!-- kme end index for k in memory
!-- its start index for i in tile
!-- ite end index for i in tile
!-- jts start index for j in tile
!-- jte end index for j in tile
!-- kts start index for k in tile
!-- kte end index for k in tile
!-------------------------------------------------------------------
INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte
!
REAL, INTENT(IN ) :: P1000mb
REAL, INTENT(IN ) :: DT,DTMIN,CP,G,ROVCP, &
ROVG,R,XLV,RV
REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
REAL, INTENT(IN ) :: EP1,EP2,KARMAN,EOMEG,STBOLT
REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
INTENT(IN ) :: QV3D, &
QC3D, &
P3D, &
PI3D, &
TH3D, &
T3D, &
dz8w, &
z
!
REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
INTENT(INOUT) :: RUBLTEN, &
RVBLTEN, &
RTHBLTEN, &
RQVBLTEN, &
RQCBLTEN
REAL, DIMENSION( ims:ime, jms:jme ) , &
INTENT(IN ) :: XLAND, &
HFX, &
QFX
REAL, DIMENSION( ims:ime, jms:jme ) , &
INTENT(INOUT) :: HOL, &
UST, &
PBL, &
ZNT
LOGICAL, INTENT(IN) :: FLAG_QI
!
!m The following 5 variables are changed to memory size from tile size--
!
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: &
PSIM, &
PSIH
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: &
WSPD
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: &
GZ1OZ0, &
BR
REAL, DIMENSION( ims:ime, jms:jme ) , &
INTENT(IN ) :: PSFC
REAL, DIMENSION( ims:ime, jms:jme ) , &
INTENT(IN ) :: TSK
REAL, DIMENSION( ims:ime, jms:jme ) , &
INTENT(INOUT) :: ZOL
INTEGER, DIMENSION( ims:ime, jms:jme ) , &
INTENT(OUT ) :: KPBL2D
REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
INTENT(IN ) :: U3D, &
V3D
!
! Optional
!
REAL, DIMENSION( ims:ime, jms:jme ) , &
OPTIONAL , &
INTENT(INOUT) :: REGIME
REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
INTENT(INOUT) :: RQIBLTEN
REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
OPTIONAL , &
INTENT(IN ) :: QI3D
! LOCAL VARS
REAL, DIMENSION( its:ite, kts:kte ) :: dz8w2d, &
z2d
INTEGER :: I,J,K,NK
!
DO J=jts,jte
DO k=kts,kte
NK=kme-k
DO i=its,ite
dz8w2d(I,K) = dz8w(i,NK,j)
z2d(I,K) = z(i,NK,j)
ENDDO
ENDDO
CALL MRF2D
(J,U3D(ims,kms,j),V3D(ims,kms,j),T3D(ims,kms,j), &
QV3D(ims,kms,j),QC3D(ims,kms,j), &
P3D(ims,kms,j),RUBLTEN(ims,kms,j),RVBLTEN(ims,kms,j),&
RTHBLTEN(ims,kms,j),RQVBLTEN(ims,kms,j), &
RQCBLTEN(ims,kms,j), &
p1000mb, &
CP,G,ROVCP,R,ROVG, &
dz8w2d,z2d,XLV,Rv, &
PSFC(ims,j),ZNT(ims,j), &
UST(ims,j),ZOL(ims,j), &
HOL(ims,j),PBL(ims,j),PSIM(ims,j), &
PSIH(ims,j),XLAND(ims,j),HFX(ims,j),QFX(ims,j), &
TSK(ims,j),GZ1OZ0(ims,j),WSPD(ims,j),BR(ims,j), &
DT,DTMIN,KPBL2D(ims,j), &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN,EOMEG,STBOLT, &
flag_qi, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
!optional
QI2DTEN=RQIBLTEN(ims,kms,j), &
REGIME=REGIME(ims,j),QI2D=QI3D(ims,kms,j) )
DO k=kts,kte
DO i=its,ite
RTHBLTEN(I,K,J)=RTHBLTEN(I,K,J)/PI3D(I,K,J)
ENDDO
ENDDO
ENDDO
END SUBROUTINE MRF
!-------------------------------------------------------------------
SUBROUTINE MRF2D(J,U2D,V2D,T2D,QV2D,QC2D, P2D, & 1,3
U2DTEN,V2DTEN,T2DTEN, &
QV2DTEN,QC2DTEN, &
p1000mb, &
CP,G,ROVCP,R,ROVG, &
dz8w2d,z2d,XLV,RV,PSFCPA, &
ZNT,UST,ZOL,HOL,PBL,PSIM,PSIH, &
XLAND,HFX,QFX,TSK,GZ1OZ0,WSPD,BR, &
DT,DTMIN,KPBL1D, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN,EOMEG,STBOLT,&
flag_qi, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
! optional
regime, qi2d, QI2DTEN )
!-------------------------------------------------------------------
IMPLICIT NONE
!-------------------------------------------------------------------
! BASED ON THE "COUNTERGRADIENT" TRANSPORT TERM OF TROEN
! AND MAHRT (1986) FOR THE UNSTABLE PBL.
! THIS ROUTINE USES AN IMPLICIT APPROACH FOR VERTICAL FLUX
! DIVERGENCE AND DOES NOT REQUIRE "MITER" TIMESTEPS.
! IT INCLUDES VERTICAL DIFFUSION IN THE STABLE ATMOSPHERE
! AND MOIST VERTICAL DIFFUSION IN CLOUDS.
! SURFACE FLUXES CALCULATED AS IN HIRPBL.
! 5-LAYER SOIL MODEL OPTION REQUIRED IN SLAB DUE TO LONG TIMESTEP
!
! CODED BY SONG-YOU HONG (NCEP), IMPLEMENTED BY JIMY DUDHIA (NCAR)
! FALL 1996
!
! REFERENCES:
!
! HONG AND PAN (1996), MON. WEA. REV.
! TROEN AND MAHRT (1986), BOUNDARY LAYER MET.
!
! CHANGES:
! INCREASE RLAM FROM 30 TO 150, AND CHANGE FREE ATMOSPHERE
! STABILITY FUNCTION TO INCREASE VERTICAL DIFFUSION
! (HONG, JUNE 1997)
!
! PUT LOWER LIMIT ON PSI FOR STABLE CONDITIONS. THIS WILL
! PREVENT FLUXES FROM BECOMING TOO SMALL (DUDHIA, OCTOBER 1997)
!
! CORRECTION TO REGIME CALCULATION. THIS WILL ALLOW POINTS IN
! REGIME 4 MUCH MORE FREQUENTLY GIVING LARGER SURFACE FLUXES
! REGIME 3 NO LONGER USES HOL < 1.5 OR THVX LAPSE-RATE CHECK
! IN MRF SCHEME. THIS WILL MAKE REGIME 3 MUCH LESS FREQUENT.
!
! ADD SURFACE PRESSURE, PS(I), ARRAY FOR EFFICIENCY
!
! FIX FOR PROBLEM WITH THIN LAYERS AND HIGH ROUGHNESS
!
! CHARNOCK CONSTANT NOW COMES FROM NAMELIST (DEFAULT SAME)
!
!-------------------------------------------------------------------
REAL RLAM,PRMIN,PRMAX,XKZMIN,XKZMAX,RIMIN,BRCR, &
CFAC,PFAC,SFCFRAC,CKZ,ZFMIN,APHI5,APHI16,GAMCRT, &
GAMCRQ,XKA,PRT
PARAMETER (RLAM=150.,PRMIN=0.5,PRMAX=4.)
PARAMETER (XKZMIN=0.01,XKZMAX=1000.,RIMIN=-100.)
PARAMETER (BRCR=0.5,CFAC=7.8,PFAC=2.0,SFCFRAC=0.1)
PARAMETER (CKZ=0.001,ZFMIN=1.E-8,APHI5=5.,APHI16=16.)
PARAMETER (GAMCRT=3.,GAMCRQ=2.E-3)
PARAMETER (XKA=2.4E-5)
PARAMETER (PRT=1.)
!
INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
J
!
LOGICAL, INTENT(IN) :: FLAG_QI
!
REAL, INTENT(IN ) :: P1000mb
REAL, INTENT(IN ) :: DT,DTMIN,CP,G,ROVCP, &
ROVG,R,XLV,RV
REAL, INTENT(IN ) :: SVP1,SVP2,SVP3,SVPT0
REAL, INTENT(IN ) :: EP1,EP2,KARMAN,EOMEG,STBOLT
REAL, DIMENSION( ims:ime, kms:kme ) , &
INTENT(IN ) :: QV2D, &
QC2D, &
P2D, &
T2D
!
REAL, DIMENSION( ims:ime, kms:kme ) , &
INTENT(INOUT) :: U2DTEN, &
V2DTEN, &
T2DTEN, &
QV2DTEN, &
QC2DTEN
REAL, DIMENSION( ims:ime ) , &
INTENT(INOUT) :: HOL, &
UST, &
PBL, &
ZNT
REAL, DIMENSION( ims:ime ) , &
INTENT(IN ) :: XLAND, &
HFX, &
QFX
!
!m The following 5 are changed to memory size---
!
REAL, DIMENSION( ims:ime ), INTENT(IN ) :: PSIM, &
PSIH
REAL, DIMENSION( ims:ime ), INTENT(INOUT) :: WSPD
REAL, DIMENSION( ims:ime ), INTENT(IN ) :: GZ1OZ0, &
BR
REAL, DIMENSION( ims:ime ) , &
INTENT(IN ) :: PSFCPA
REAL, DIMENSION( ims:ime ) , &
INTENT(IN ) :: TSK
REAL, DIMENSION( ims:ime ) , &
INTENT(INOUT) :: ZOL
INTEGER, DIMENSION( ims:ime ) , &
INTENT(OUT ) :: KPBL1D
REAL, DIMENSION( ims:ime, kms:kme ) , &
INTENT(IN ) :: U2D, &
V2D
! MODULE-LOCAL VARIABLES (DEFINED IN SUBROUTINE MRF)
!
REAL, DIMENSION( its:ite, kts:kte ) , &
INTENT(IN) :: dz8w2d, &
z2d
!
!
! Optional
!
REAL, DIMENSION( ims:ime ) , &
OPTIONAL , &
INTENT(INOUT) :: REGIME
REAL, DIMENSION( ims:ime, kms:kme ) , &
OPTIONAL , &
INTENT(IN ) :: QI2D
REAL, DIMENSION( ims:ime, kms:kme ) , &
OPTIONAL , &
INTENT(INOUT) :: QI2DTEN
! LOCAL VARS
REAL, DIMENSION( its:ite, kts:kte+1 ) :: ZQ
REAL, DIMENSION( its:ite, kts:kte ) :: &
UX,VX,QX, &
QCX,THX,THVX, &
DZQ,DZA, &
TTNP,QTNP, &
QCTNP,ZA, &
UXS,VXS, &
THXS,QXS, &
QCXS,QIX, &
QITNP,QIXS, &
UTNP,VTNP
!
REAL, DIMENSION( its:ite ) :: QIXSV,RHOX, &
WSPD1,GOVRTH, &
PBL0,THXSV, &
UXSV,VXSV, &
QXSV,QCXSV, &
QGH,TGDSA,PS
INTEGER :: ILXM,JLXM,KL, &
KLM,KLP1,KLPBL
!
INTEGER, DIMENSION( its:ite ) :: KPBL,KPBL0
!
REAL, DIMENSION( its:ite, kts:kte ) :: SCR3,SCR4
!
REAL, DIMENSION( its:ite ) :: DUM1, &
XKZMKL
!
REAL, DIMENSION( its:ite ) :: ZL1,THERMAL, &
WSCALE,HGAMT, &
HGAMQ,BRDN, &
BRUP,PHIM, &
PHIH,CPM, &
DUSFC,DVSFC, &
DTSFC,DQSFC
!
REAL, DIMENSION( its:ite, kts:kte ) :: XKZM,XKZH, &
A1,A2, &
AD,AU, &
TX
!
REAL, DIMENSION( its:ite, kts:kte ) :: AL
!
LOGICAL, DIMENSION( its:ite ) :: PBLFLG, &
SFCFLG, &
STABLE
!
REAL, DIMENSION( its:ite ) :: THGB
INTEGER :: N,I,K,KK,L,NZOL,IMVDIF
INTEGER :: JBGN,JEND,IBGN,IEND,NK
REAL :: ZOLN,X,Y,CONT,CONQ,CONW,PL,THCON,TVCON,E1,DTSTEP
REAL :: ZL,TSKV,DTHVDZ,DTHVM,VCONV,RZOL
REAL :: DTTHX,PSIX,DTG,PSIQ,USTM
REAL :: DT4,RDT,SPDK2,FM,FH,HOL1,GAMFAC,VPERT,PRNUM
REAL :: ZFAC,XKZO,SS,RI,QMEAN,TMEAN,ALPH,CHI,ZK,RL2,DK,SRI
REAL :: BRINT,DTODSD,DSIG,RDZ,DSDZT,DSDZQ,DSDZ2,TTEND,QTEND
REAL :: UTEND,VTEND,QCTEND,QITEND,TGC,DTODSU
!----------------------------------------------------------------------
KLPBL=1
KL=kte
ILXM=ite-1
JLXM=jte-1
KLM=kte-1
KLP1=kte+1
!
CONT=1000.*CP/G
CONQ=1000.*XLV/G
CONW=1000./G
!-- IMVDIF imvdif=1 for moist adiabat vertical diffusion
IMVDIF=1
! DO i=its,ite
!!PS PSFC cmb
! PSFC(I)=PSFCPA(I)/1000.
! ENDDO
!
!----CONVERT GROUND TEMPERATURE TO POTENTIAL TEMPERATURE:
!
DO 5 I=its,ite
TGDSA(I)=TSK(I)
! PS PSFC cmb
PS(I)=PSFCPA(I)/1000.
! THGB(I)=TSK(I)*(100./PS(I))**ROVCP
THGB(I)=TSK(I)*(P1000mb/PSFCPA(I))**ROVCP
5 CONTINUE
!
!-----DECOUPLE FLUX-FORM VARIABLES TO GIVE U,V,T,THETA,THETA-VIR.,
! T-VIR., QV, AND QC AT CROSS POINTS AND AT KTAU-1.
!
! *** NOTE ***
! THE BOUNDARY WINDS MAY NOT BE ADEQUATELY AFFECTED BY FRICTION,
! SO USE ONLY INTERIOR VALUES OF UX AND VX TO CALCULATE
! TENDENCIES.
!
DO 24 K=kts,kte
NK=kme-K
DO 24 I=its,ite
UX(I,K)=U2D(I,NK)
VX(I,K)=V2D(I,NK)
24 CONTINUE
!
!.....SCR3(I,K) STORE TEMPERATURE,
! SCR4(I,K) STORE VIRTUAL TEMPERATURE.
!
DO 30 K=kts,kte
NK=kme-K
DO 30 I=its,ite
! PL cmb
PL=P2D(I,NK)/1000.
SCR3(I,K)=T2D(I,NK)
! THCON=(100./PL)**ROVCP
THCON=(P1000mb/(PL*1000.))**ROVCP
THX(I,K)=SCR3(I,K)*THCON
TX(I,K)=SCR3(I,K)
SCR4(I,K)=SCR3(I,K)
THVX(I,K)=THX(I,K)
QX(I,K)=0.
30 CONTINUE
!
DO I=its,ite
QGH(i)=0.
CPM(i)=CP
ENDDO
!
! IF(IDRY.EQ.1)GOTO 80
DO 50 K=kts,kte
NK=kme-K
DO 50 I=its,ite
QX(I,K)=QV2D(I,NK)
TVCON=(1.+EP1*QX(I,K))
THVX(I,K)=THX(I,K)*TVCON
SCR4(I,K)=SCR3(I,K)*TVCON
50 CONTINUE
!
DO 60 I=its,ite
E1=SVP1*EXP(SVP2*(TGDSA(I)-SVPT0)/(TGDSA(I)-SVP3))
QGH(I)=EP2*E1/(PS(I)-E1)
CPM(I)=CP*(1.+0.8*QX(I,KL))
60 CONTINUE
!
! IF(IMOIST.EQ.1)GOTO 80
DO 70 K=kts,kte
NK=kme-K
DO 70 I=its,ite
QCX(I,K)=QC2D(I,NK)
70 CONTINUE
IF (flag_QI .AND. PRESENT( QI2D ) ) THEN
DO K=kts,kte
NK=kme-K
DO I=its,ite
QIX(I,K)=QI2D(I,NK)
ENDDO
ENDDO
ELSE
DO K=kts,kte
NK=kme-K
DO I=its,ite
QIX(I,K)=0.
ENDDO
ENDDO
ENDIF
80 CONTINUE
!
!-----COMPUTE THE HEIGHT OF FULL- AND HALF-SIGMA LEVELS ABOVE GROUND
! LEVEL, AND THE LAYER THICKNESSES.
!
DO 90 I=its,ite
ZQ(I,KLP1)=0.
RHOX(I)=PS(I)*1000./(R*SCR4(I,KL))
90 CONTINUE
!
DO 110 KK=kts,kte
K=kme-KK
DO 100 I=its,ite
DUM1(I)=ZQ(I,K+1)
100 CONTINUE
!
DO 110 I=its,ite
ZQ(I,K)=dz8w2d(I,K)+DUM1(I)
110 CONTINUE
!
DO 120 K=kts,kte
DO 120 I=its,ite
ZA(I,K)=0.5*(ZQ(I,K)+ZQ(I,K+1))
DZQ(I,K)=ZQ(I,K)-ZQ(I,K+1)
120 CONTINUE
!
DO 130 K=kts,kte-1
DO 130 I=its,ite
DZA(I,K)=ZA(I,K)-ZA(I,K+1)
130 CONTINUE
DTSTEP=DT
!
DO 160 I=its,ite
GOVRTH(I)=G/THX(I,KL)
160 CONTINUE
!
!-----INITIALIZE VERTICAL TENDENCIES AND
!
DO I=its,ite
DO K=kts,kte
UTNP(i,k)=0.
VTNP(i,k)=0.
TTNP(i,k)=0.
ENDDO
ENDDO
!
! IF(IDRY.EQ.1)GOTO 250
DO 230 K=kts,kte
DO 230 I=its,ite
QTNP(I,K)=0.
230 CONTINUE
!
! IF(IMOIST.EQ.1)GOTO 250
DO 240 K=kts,kte
DO 240 I=its,ite
QCTNP(I,K)=0.
QITNP(I,K)=0.
240 CONTINUE
250 CONTINUE
!
!-----CALCULATE BULK RICHARDSON NO. OF SURFACE LAYER, ACCORDING TO
! AKB(1976), EQ(12).
! DO 260 I=its,ite
! GZ1OZ0(I)=ALOG(ZA(I,KL)/ZNT(I))
! IF((XLAND(I)-1.5).GE.0)THEN
! ZL=ZNT(I)
! ELSE
! ZL=0.01
! ENDIF
! WSPD(I)=SQRT(UX(I,KL)*UX(I,KL)+VX(I,KL)*VX(I,KL))
! TSKV=THGB(I)*(1.+EP1*QGH(I)*MAVAIL(I))
! DTHVDZ=(THVX(I,KL)-TSKV)
! IF(-DTHVDZ.GE.0)THEN
! DTHVM=-DTHVDZ
! ELSE
! DTHVM=0.
! ENDIF
! VCONV=VCONVC*SQRT(DTHVM)
! WSPD(I)=SQRT(WSPD(I)*WSPD(I)+VCONV*VCONV)
! WSPD(I)=AMAX1(WSPD(I),1.)
! BR(I)=GOVRTH(I)*ZA(I,KL)*DTHVDZ/(WSPD(I)*WSPD(I))
! 260 CONTINUE
!!-----DIAGNOSE BASIC PARAMETERS FOR THE APPROPRIATED STABILITY CLASS:
!!
!! THE STABILITY CLASSES ARE DETERMINED BY BR (BULK RICHARDSON NO.)
!! AND HOL (HEIGHT OF PBL/MONIN-OBUKHOV LENGTH).
!!
!! CRITERIA FOR THE CLASSES ARE AS FOLLOWS:
!!
!! 1. BR .GE. 0.2;
!! REPRESENTS NIGHTTIME STABLE CONDITIONS (REGIME=1),
!!
!! 2. BR .LT. 0.2 .AND. BR .GT. 0.0;
!! REPRESENTS DAMPED MECHANICAL TURBULENT CONDITIONS
!! (REGIME=2),
!!
!! 3. BR .EQ. 0.0
!! REPRESENTS FORCED CONVECTION CONDITIONS (REGIME=3),
!!
!! 4. BR .LT. 0.0
!! REPRESENTS FREE CONVECTION CONDITIONS (REGIME=4).
!!
!!-----
!
! DO 320 I=its,ite
!!----
!!-- REMOVE REGIME 3 DEPENDENCE ON PBL HEIGHT
!!-- IF(BR(I).LT.0..AND.HOL(I).GT.1.5)GOTO 310
!
! IF(BR(I).LT.0.)GOTO 310
!!
!!-----CLASS 1; STABLE (NIGHTTIME) CONDITIONS:
!!
! IF(BR(I).LT.0.2)GOTO 270
! REGIME(I)=1.
! PSIM(I)=-10.*GZ1OZ0(I)
!! LOWER LIMIT ON PSI IN STABLE CONDITIONS
! PSIM(I)=AMAX1(PSIM(I),-10.)
! PSIH(I)=PSIM(I)
! HOL(I)=0.0
! PBL(I)=0.0
! GOTO 320
!!
!!-----CLASS 2; DAMPED MECHANICAL TURBULENCE:
!!
! 270 IF(BR(I).EQ.0.0)GOTO 280
! REGIME(I)=2.
! PSIM(I)=-5.0*BR(I)*GZ1OZ0(I)/(1.1-5.0*BR(I))
!! LOWER LIMIT ON PSI IN STABLE CONDITIONS
! PSIM(I)=AMAX1(PSIM(I),-10.)
!!.....AKB(1976), EQ(16).
! PSIH(I)=PSIM(I)
! HOL(I)=0.0
! PBL(I)=0.0
! GOTO 320
!!
!!-----CLASS 3; FORCED CONVECTION:
!!
! 280 REGIME(I)=3.
! PSIM(I)=0.0
! PSIH(I)=PSIM(I)
!
!! special use kte instead of kme
!
! DO 290 KK=kts,kte-1
! K=kte-KK
! IF(THVX(I,K).GT.THVX(I,KL))GOTO 300
! 290 CONTINUE
! STOP 290
! 300 PBL(I)=ZQ(I,K+1)
! IF(UST(I).LT.0.01)THEN
! ZOL(I)=BR(I)*GZ1OZ0(I)
! ELSE
! ZOL(I)=KARMAN*GOVRTH(I)*ZA(I,KL)*MOL(I,J)/(UST(I)*UST(I))
! ENDIF
! HOL(I)=-ZOL(I)*PBL(I)/ZA(I,KL)
! GOTO 320
!
!!-----CLASS 4; FREE CONVECTION:
!
!! 310 IF(THVX(I,KLM).GT.THVX(I,KL))GOTO 280
!
! 310 CONTINUE
! REGIME(I)=4.
! IF(UST(I).LT.0.01)THEN
! ZOL(I)=BR(I)*GZ1OZ0(I)
! ELSE
! ZOL(I)=KARMAN*GOVRTH(I)*ZA(I,KL)*MOL(I,J)/(UST(I)*UST(I))
! ENDIF
! ZOL(I)=AMIN1(ZOL(I),0.)
! ZOL(I)=AMAX1(ZOL(I),-9.9999)
! NZOL=INT(-ZOL(I)*100.)
! RZOL=-ZOL(I)*100.-NZOL
! PSIM(I)=PSIMTB(NZOL)+RZOL*(PSIMTB(NZOL+1)-PSIMTB(NZOL))
! PSIH(I)=PSIHTB(NZOL)+RZOL*(PSIHTB(NZOL+1)-PSIHTB(NZOL))
!!---LIMIT PSIH AND PSIM IN THE CASE OF THIN LAYERS AND HIGH ROUGHNESS
!!--- THIS PREVENTS DENOMINATOR IN FLUXES FROM GETTING TOO SMALL
! PSIH(I)=AMIN1(PSIH(I),0.9*GZ1OZ0(I))
! PSIM(I)=AMIN1(PSIM(I),0.9*GZ1OZ0(I))
! 320 CONTINUE
!-----COMPUTE THE FRICTIONAL VELOCITY:
! ZA(1982) EQS(2.60),(2.61).
DO 330 I=its,ite
DTG=THX(I,KL)-THGB(I)
PSIX=GZ1OZ0(I)-PSIM(I)
IF((XLAND(I)-1.5).GE.0)THEN
ZL=ZNT(I)
ELSE
ZL=0.01
ENDIF
PSIQ=ALOG(KARMAN*UST(I)*ZA(I,KL)/XKA+ZA(I,KL)/ZL)-PSIH(I)
UST(I)=KARMAN*WSPD(I)/PSIX
!
USTM=AMAX1(UST(I),0.1)
IF((XLAND(I)-1.5).GE.0)THEN
UST(I)=UST(I)
ELSE
UST(I)=USTM
ENDIF
! MOL(I,J)=KARMAN*DTG/(GZ1OZ0(I)-PSIH(I))/PRT
330 CONTINUE
!
DO 420 I=its,ite
WSPD1(I)=SQRT(UX(I,KL)*UX(I,KL)+VX(I,KL)*VX(I,KL))+1.E-9
420 CONTINUE
!
!---- COMPUTE VERTICAL DIFFUSION
!
! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! COMPUTE PRELIMINARY VARIABLES
!
!
DT4=2.*DTSTEP
RDT=1./DT4
!
DO I=its,ite
HGAMT(I)=0.
HGAMQ(I)=0.
WSCALE(I)=0.
KPBL(I)=KL
PBL(I)=ZQ(I,KL)
KPBL0(I)=KL
PBL0(I)=ZQ(I,KL)
PBLFLG(I)=.TRUE.
SFCFLG(I)=.TRUE.
IF(BR(I).GT.0.0)SFCFLG(I)=.FALSE.
ZL1(I)=ZA(I,KL)
THERMAL(I)=THVX(I,KL)
ENDDO
! COMPUTE THE FIRST GUESS OF PBL HEIGHT
DO I=its,ite
STABLE(I)=.FALSE.
BRUP(I)=BR(I)
ENDDO
DO K=KLM,KLPBL,-1
DO I=its,ite
IF(.NOT.STABLE(I))THEN
BRDN(I)=BRUP(I)
SPDK2=MAX(UX(I,K)**2+VX(I,K)**2,1.)
BRUP(I)=(THVX(I,K)-THERMAL(I))*(G*ZA(I,K)/THVX(I,KL))/SPDK2
KPBL(I)=K
STABLE(I)=BRUP(I).GT.BRCR
ENDIF
ENDDO
ENDDO
!
DO I=its,ite
K=KPBL(I)
IF(BRDN(I).GE.BRCR)THEN
BRINT=0.
ELSEIF(BRUP(I).LE.BRCR)THEN
BRINT=1.
ELSE
BRINT=(BRCR-BRDN(I))/(BRUP(I)-BRDN(I))
ENDIF
PBL(I)=ZA(I,K+1)+BRINT*(ZA(I,K)-ZA(I,K+1))
IF(PBL(I).LT.ZQ(I,KPBL(I)+1))KPBL(I)=KPBL(I)+1
ENDDO
!
DO I=its,ite
FM=GZ1OZ0(I)-PSIM(I)
FH=GZ1OZ0(I)-PSIH(I)
HOL(I)=MAX(BR(I)*FM*FM/FH,RIMIN)
IF(SFCFLG(I))THEN
HOL(I)=MIN(HOL(I),-ZFMIN)
ELSE
HOL(I)=MAX(HOL(I),ZFMIN)
ENDIF
!
HOL1=HOL(I)*PBL(I)/ZL1(I)*SFCFRAC
HOL(I)=-HOL(I)*PBL(I)/ZL1(I)
IF(SFCFLG(I))THEN
PHIM(I)=(1.-APHI16*HOL1)**(-1./4.)
PHIH(I)=(1.-APHI16*HOL1)**(-1./2.)
ELSE
PHIM(I)=(1.+APHI5*HOL1)
PHIH(I)=PHIM(I)
ENDIF
WSCALE(I)=UST(I)/PHIM(I)
WSCALE(I)=MIN(WSCALE(I),UST(I)*APHI16)
WSCALE(I)=MAX(WSCALE(I),UST(I)/APHI5)
ENDDO
! COMPUTE THE SURFACE VARIABLES FOR PBL HEIGHT ESTIMATION
! UNDER UNSTABLE CONDITIONS
DO I=its,ite
IF(SFCFLG(I))THEN
GAMFAC=CFAC/RHOX(I)/WSCALE(I)
HGAMT(I)=MIN(GAMFAC*HFX(I)/CPM(I),GAMCRT)
HGAMQ(I)=MIN(GAMFAC*QFX(I),GAMCRQ)
IF((XLAND(I)-1.5).GE.0)HGAMQ(I)=0.
VPERT=HGAMT(I)+EP1*THX(I,KL)*HGAMQ(I)
VPERT=MIN(VPERT,GAMCRT)
THERMAL(I)=THERMAL(I)+MAX(VPERT,0.)
HGAMT(I)=MAX(HGAMT(I),0.0)
HGAMQ(I)=MAX(HGAMQ(I),0.0)
ELSE
PBLFLG(I)=.FALSE.
ENDIF
ENDDO
!
DO I=its,ite
IF(PBLFLG(I))THEN
KPBL(I)=KL
PBL(I)=ZQ(I,KL)
ENDIF
ENDDO
!
! ENHANCE THE PBL HEIGHT BY CONSIDERING THE THERMAL
!
DO I=its,ite
IF(PBLFLG(I))THEN
STABLE(I)=.FALSE.
BRUP(I)=BR(I)
ENDIF
ENDDO
DO K=KLM,KLPBL,-1
DO I=its,ite
IF(.NOT.STABLE(I).AND.PBLFLG(I))THEN
BRDN(I)=BRUP(I)
SPDK2=MAX((UX(I,K)**2+VX(I,K)**2),1.)
BRUP(I)=(THVX(I,K)-THERMAL(I))*(G*ZA(I,K)/THVX(I,KL))/SPDK2
KPBL(I)=K
STABLE(I)=BRUP(I).GT.BRCR
ENDIF
ENDDO
ENDDO
!
DO I=its,ite
IF(PBLFLG(I))THEN
K=KPBL(I)
IF(BRDN(I).GE.BRCR)THEN
BRINT=0.
ELSEIF(BRUP(I).LE.BRCR)THEN
BRINT=1.
ELSE
BRINT=(BRCR-BRDN(I))/(BRUP(I)-BRDN(I))
ENDIF
PBL(I)=ZA(I,K+1)+BRINT*(ZA(I,K)-ZA(I,K+1))
IF(PBL(I).LT.ZQ(I,KPBL(I)+1))KPBL(I)=KPBL(I)+1
IF(KPBL(I).LE.1)PBLFLG(I)=.FALSE.
ENDIF
ENDDO
!
! DIAGNOSTIC PBL HEIGHT WITH BRCR EFFECTIVELY ZERO (PBL0)
!
DO I=its,ite
IF(PBLFLG(I))THEN
STABLE(I)=.FALSE.
BRUP(I)=BR(I)
ENDIF
ENDDO
DO K=KLM,KLPBL,-1
DO I=its,ite
IF(.NOT.STABLE(I).AND.PBLFLG(I))THEN
BRDN(I)=BRUP(I)
SPDK2=MAX((UX(I,K)**2+VX(I,K)**2),1.)
BRUP(I)=(THVX(I,K)-THERMAL(I))*(G*ZA(I,K)/THVX(I,KL))/SPDK2
KPBL0(I)=K
STABLE(I)=BRUP(I).GT.0.0
ENDIF
ENDDO
ENDDO
!
DO I=its,ite
IF(PBLFLG(I))THEN
K=KPBL0(I)
IF(BRDN(I).GE.0.0)THEN
BRINT=0.
ELSEIF(BRUP(I).LE.0.0)THEN
BRINT=1.
ELSE
BRINT=(0.0-BRDN(I))/(BRUP(I)-BRDN(I))
ENDIF
PBL0(I)=ZA(I,K+1)+BRINT*(ZA(I,K)-ZA(I,K+1))
IF(PBL0(I).LT.ZQ(I,KPBL0(I)+1))KPBL0(I)=KPBL0(I)+1
IF(KPBL0(I).LE.1)PBLFLG(I)=.FALSE.
ENDIF
ENDDO
!
! COMPUTE DIFFUSION COEFFICIENTS BELOW PBL
!
DO K=kte,KLPBL,-1
DO I=its,ite
IF(KPBL(I).LT.K)THEN
PRNUM=(PHIH(I)/PHIM(I)+CFAC*KARMAN*SFCFRAC)
PRNUM=MIN(PRNUM,PRMAX)
PRNUM=MAX(PRNUM,PRMIN)
ZFAC=MAX((1.-(ZQ(I,K)-ZL1(I))/(PBL(I)-ZL1(I))),ZFMIN)
XKZO=CKZ*DZA(I,K-1)
XKZM(I,K)=XKZO+WSCALE(I)*KARMAN*ZQ(I,K)*ZFAC**PFAC
XKZH(I,K)=XKZM(I,K)/PRNUM
XKZM(I,K)=MIN(XKZM(I,K),XKZMAX)
XKZM(I,K)=MAX(XKZM(I,K),XKZMIN)
XKZH(I,K)=MIN(XKZH(I,K),XKZMAX)
XKZH(I,K)=MAX(XKZH(I,K),XKZMIN)
ENDIF
ENDDO
ENDDO
!
! COMPUTE DIFFUSION COEFFICIENTS OVER PBL (FREE ATMOSPHERE)
!
DO K=kts+1,kte
DO I=its,ite
XKZO=CKZ*DZA(I,K-1)
IF(K.LE.KPBL(I))THEN
SS=((UX(I,K-1)-UX(I,K))*(UX(I,K-1)-UX(I,K))+(VX(I,K-1)- &
VX(I,K))*(VX(I,K-1)-VX(I,K)))/(DZA(I,K-1)*DZA(I,K-1))+ &
1.E-9
RI=GOVRTH(I)*(THVX(I,K-1)-THVX(I,K))/(SS*DZA(I,K-1))
IF(IMVDIF.EQ.1)THEN
IF((QCX(I,K)+QIX(I,K)).GT.0.01E-3.AND.(QCX(I,K-1)+ &
QIX(I,K-1)).GT.0.01E-3)THEN
! IN CLOUD
QMEAN=0.5*(QX(I,K)+QX(I,K-1))
TMEAN=0.5*(SCR3(I,K)+SCR3(I,K-1))
ALPH=XLV*QMEAN/R/TMEAN
CHI=XLV*XLV*QMEAN/CP/RV/TMEAN/TMEAN
RI=(1.+ALPH)*(RI-G*G/SS/TMEAN/CP*((CHI-ALPH)/(1.+CHI)))
ENDIF
ENDIF
ZK=KARMAN*ZQ(I,K)
RL2=(ZK*RLAM/(RLAM+ZK))**2
DK=RL2*SQRT(SS)
IF(RI.LT.0.)THEN
! UNSTABLE REGIME
SRI=SQRT(-RI)
XKZM(I,K)=XKZO+DK*(1+8.*(-RI)/(1+1.746*SRI))
XKZH(I,K)=XKZO+DK*(1+8.*(-RI)/(1+1.286*SRI))
ELSE
! STABLE REGIME
XKZH(I,K)=XKZO+DK/(1+5.*RI)**2
PRNUM=1.0+2.1*RI
PRNUM=MIN(PRNUM,PRMAX)
XKZM(I,K)=(XKZH(I,K)-XKZO)*PRNUM+XKZO
ENDIF
!
XKZM(I,K)=MIN(XKZM(I,K),XKZMAX)
XKZM(I,K)=MAX(XKZM(I,K),XKZMIN)
XKZH(I,K)=MIN(XKZH(I,K),XKZMAX)
XKZH(I,K)=MAX(XKZH(I,K),XKZMIN)
ENDIF
!
ENDDO
ENDDO
! COMPUTE TRIDIAGONAL MATRIX ELEMENTS FOR HEAT AND MOISTURE
DO I=its,ite
DO K=kts,kte
AU(i,k)=0.
AL(i,k)=0.
AD(i,k)=0.
A1(i,k)=0.
A2(i,k)=0.
ENDDO
ENDDO
DO I=its,ite
AD(I,1)=1.
A1(I,1)=SCR3(I,KL)+HFX(I)/(RHOX(I)*CPM(I))/ZQ(I,KL)*DT4
A2(I,1)=QX(I,KL)+QFX(I)/(RHOX(I))/ZQ(I,KL)*DT4
ENDDO
!
DO K=kte,kts+1,-1
KK=kme-K
DO I=its,ite
DTODSD=DT4/dz8w2d(I,K)
DTODSU=DT4/dz8w2d(I,K-1)
DSIG=z2d(I,K)-z2d(I,K-1)
DSIG=-DSIG
RDZ=1./DZA(I,K-1)
IF(PBLFLG(I).AND.KPBL(I).LT.K)THEN
DSDZT=DSIG*XKZH(I,K)*RDZ*(G/CP-HGAMT(I)/PBL(I))
DSDZQ=DSIG*XKZH(I,K)*RDZ*(-HGAMQ(I)/PBL(I))
A2(I,KK)=A2(I,KK)+DTODSD*DSDZQ
A2(I,KK+1)=QX(I,K-1)-DTODSU*DSDZQ
ELSE
DSDZT=DSIG*XKZH(I,K)*RDZ*(G/CP)
A2(I,KK+1)=QX(I,K-1)
ENDIF
DSDZ2=DSIG*XKZH(I,K)*RDZ*RDZ
AU(I,KK)=-DTODSD*DSDZ2
AL(I,KK)=-DTODSU*DSDZ2
AD(I,KK)=AD(I,KK)-AU(I,KK)
AD(I,KK+1)=1.-AL(I,KK)
A1(I,KK)=A1(I,KK)+DTODSD*DSDZT
A1(I,KK+1)=SCR3(I,K-1)-DTODSU*DSDZT
ENDDO
ENDDO
! SOLVE TRIDIAGONAL PROBLEM FOR HEAT AND MOISTURE
CALL TRIDI2
(AL,AD,AU,A1,A2,AU,A1,A2, &
its,ite,kts,kte )
! RECOVER TENDENCIES OF HEAT AND MOISTURE
DO K=kte,kts,-1
KK=kme-K
DO I=its,ite
TTEND=(A1(I,KK)-SCR3(I,K))*RDT
QTEND=(A2(I,KK)-QX(I,K))*RDT
TTNP(I,K)=TTNP(I,K)+TTEND
QTNP(I,K)=QTNP(I,K)+QTEND
ENDDO
ENDDO
! COMPUTE TRIDIAGONAL MATRIX ELEMENTS FOR MOMENTUM
DO I=its,ite
DO K=kts,kte
AU(i,k)=0.
AL(i,k)=0.
AD(i,k)=0.
A1(i,k)=0.
A2(i,k)=0.
ENDDO
ENDDO
DO I=its,ite
AD(I,1)=1.
A1(I,1)=UX(I,KL)-UX(I,KL)/WSPD1(I)*UST(I)*UST(I)/ZQ(I,KL) &
*DT4*(WSPD1(I)/WSPD(I))**2
A2(I,1)=VX(I,KL)-VX(I,KL)/WSPD1(I)*UST(I)*UST(I)/ZQ(I,KL) &
*DT4*(WSPD1(I)/WSPD(I))**2
ENDDO
!
DO K=kte,kts+1,-1
KK=kme-K
DO I=its,ite
DTODSD=DT4/dz8w2d(I,K)
DTODSU=DT4/dz8w2d(I,K-1)
DSIG=z2d(I,K)-z2d(I,K-1)
DSIG=-DSIG
RDZ=1./DZA(I,K-1)
DSDZ2=DSIG*XKZM(I,K)*RDZ*RDZ
AU(I,KK)=-DTODSD*DSDZ2
AL(I,KK)=-DTODSU*DSDZ2
AD(I,KK)=AD(I,KK)-AU(I,KK)
AD(I,KK+1)=1.-AL(I,KK)
A1(I,KK+1)=UX(I,K-1)
A2(I,KK+1)=VX(I,K-1)
ENDDO
ENDDO
! SOLVE TRIDIAGONAL PROBLEM FOR MOMENTUM
CALL TRIDI2
(AL,AD,AU,A1,A2,AU,A1,A2, &
its,ite,kts,kte )
! RECOVER TENDENCIES OF MOMENTUM
DO K=kte,kts,-1
KK=kme-K
DO I=its,ite
UTEND=(A1(I,KK)-UX(I,K))*RDT
VTEND=(A2(I,KK)-VX(I,K))*RDT
UTNP(I,K)=UTNP(I,K)+UTEND
VTNP(I,K)=VTNP(I,K)+VTEND
ENDDO
ENDDO
! COMPUTE TRIDIAGONAL MATRIX ELEMENTS FOR CLOUD
DO I=its,ite
DO K=kts,kte
AU(i,k)=0.
AL(i,k)=0.
AD(i,k)=0.
A1(i,k)=0.
A2(i,k)=0.
ENDDO
ENDDO
! IF(IMOIST.EQ.1)GOTO 690
DO I=its,ite
AD(I,1)=1.
A1(I,1)=QCX(I,KL)
A2(I,1)=QIX(I,KL)
ENDDO
!
DO K=kte,kts+1,-1
KK=kme-K
DO I=its,ite
DTODSD=DT4/dz8w2d(I,K)
DTODSU=DT4/dz8w2d(I,K-1)
DSIG=z2d(I,K)-z2d(I,K-1)
DSIG=-DSIG
RDZ=1./DZA(I,K-1)
A1(I,KK+1)=QCX(I,K-1)
A2(I,KK+1)=QIX(I,K-1)
DSDZ2=DSIG*XKZH(I,K)*RDZ*RDZ
AU(I,KK)=-DTODSD*DSDZ2
AL(I,KK)=-DTODSU*DSDZ2
AD(I,KK)=AD(I,KK)-AU(I,KK)
AD(I,KK+1)=1.-AL(I,KK)
ENDDO
ENDDO
! SOLVE TRIDIAGONAL PROBLEM FOR CLOUD
CALL TRIDI2
(AL,AD,AU,A1,A2,AU,A1,A2, &
its,ite,kts,kte )
!
DO K=kte,kts,-1
KK=kme-K
DO I=its,ite
QCTEND=(A1(I,KK)-QCX(I,K))*RDT
QITEND=(A2(I,KK)-QIX(I,K))*RDT
QCTNP(I,K)=QCTNP(I,K)+QCTEND
QITNP(I,K)=QITNP(I,K)+QITEND
ENDDO
ENDDO
!
!---- END OF VERTICAL DIFFUSION
!
690 CONTINUE
!
!-----CALCULATION OF NEW VALUES DUE TO VERTICAL EXCHANGE PROCESSES IS
! COMPLETED. THE FINAL STEP IS TO ADD THE TENDENCIES CALCULATED
! IN HIRPBL TO THOSE OF MM4.
DO 820 K=kts,kte
NK=kme-K
DO 820 I=its,ite
U2DTEN(I,NK)=UTNP(I,K)
V2DTEN(I,NK)=VTNP(I,K)
820 CONTINUE
!
! IF(J.EQ.1.AND.IN.GT.1)GOTO 860
!SUE JBGN=3
!SUE JEND=JLXM-1
! change when nest
!SUE JBGN=2
!SUE JEND=JLXM
JBGN=jts
JEND=jte
IBGN=its
IEND=ite
! IF(J.LT.JBGN.OR.J.GT.JEND)GOTO 860
!SUE IBGN=3
!SUE IEND=ILXM-1
! change when nest
!SUE IBGN=2
!SUE IEND=ILXM
DO 830 K=kts,kte
NK=kme-K
DO 830 I=IBGN,IEND
T2DTEN(I,NK)=TTNP(I,K)
830 CONTINUE
!
! IF(IDRY.EQ.1)GOTO 860
DO 840 K=kts,kte
NK=kme-K
DO 840 I=IBGN,IEND
QV2DTEN(I,NK)=QTNP(I,K)
840 CONTINUE
! IF(IMOIST.EQ.1)GOTO 860
DO 850 K=kts,kte
NK=kme-K
DO 850 I=IBGN,IEND
QC2DTEN(I,NK)=QCTNP(I,K)
850 CONTINUE
IF(flag_QI .AND. PRESENT( QI2DTEN ) ) THEN
DO K=kts,kte
NK=kme-K
DO I=IBGN,IEND
QI2DTEN(I,NK)=QITNP(I,K)
ENDDO
ENDDO
ENDIF
860 CONTINUE
!
!-----APPLY ASSELIN FILTER TO TGD FOR LARGE TIME STEP:
!
! DO 885 I=its,ite
! TSK(I)=TSK(I)*(PS(I)/100.)**ROVCP
! 885 CONTINUE
!
940 CONTINUE
!
! KPBL IS NEEDED FOR THE FDDA, AND SINCE THERE IS NO LONGER JUST ONE
! LARGE "J LOOP" IT MUST BE STORED AS (I,J)...
!
! USE NEW DIAGNOSED PBL DEPTH (CALCULATED WITH brcr=0.0)
! PBL IS USED FOR OUTPUT AND NEXT-TIME-STEP BELJAARS CALC IN SFCLAY
DO 950 I=its,ite
KPBL1D(I)=KPBL0(I)
PBL(I)=PBL0(I)
950 CONTINUE
END SUBROUTINE MRF2D
!================================================================
SUBROUTINE TRIDI2(CL,CM,CU,R1,R2,AU,A1,A2, & 5,2
its,ite,kts,kte )
!----------------------------------------------------------------
IMPLICIT NONE
!----------------------------------------------------------------
INTEGER, INTENT(IN ) :: its,ite, kts,kte
REAL, DIMENSION( its:ite, kts+1:kte+1 ) , &
INTENT(IN ) :: CL
REAL, DIMENSION( its:ite, kts:kte ) , &
INTENT(IN ) :: CM, &
R1, &
R2
REAL, DIMENSION( its:ite, kts:kte ) , &
INTENT(INOUT) :: AU, &
CU, &
A1, &
A2
REAL :: FK
INTEGER :: I,K,L,N
!----------------------------------------------------------------
L=ite
N=kte
DO I=its,L
FK=1./CM(I,1)
AU(I,1)=FK*CU(I,1)
A1(I,1)=FK*R1(I,1)
A2(I,1)=FK*R2(I,1)
ENDDO
DO K=2,N-1
DO I=its,L
FK=1./(CM(I,K)-CL(I,K)*AU(I,K-1))
AU(I,K)=FK*CU(I,K)
A1(I,K)=FK*(R1(I,K)-CL(I,K)*A1(I,K-1))
A2(I,K)=FK*(R2(I,K)-CL(I,K)*A2(I,K-1))
ENDDO
ENDDO
DO I=its,L
FK=1./(CM(I,N)-CL(I,N)*AU(I,N-1))
A1(I,N)=FK*(R1(I,N)-CL(I,N)*A1(I,N-1))
A2(I,N)=FK*(R2(I,N)-CL(I,N)*A2(I,N-1))
ENDDO
DO K=N-1,kts,-1
DO I=its,L
A1(I,K)=A1(I,K)-AU(I,K)*A1(I,K+1)
A2(I,K)=A2(I,K)-AU(I,K)*A2(I,K+1)
ENDDO
ENDDO
END SUBROUTINE TRIDI2
!===================================================================
SUBROUTINE mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, & 1
RQCBLTEN,RQIBLTEN,P_QI,P_FIRST_SCALAR, &
restart, allowed_to_read , &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
its, ite, jts, jte, kts, kte )
!-------------------------------------------------------------------
IMPLICIT NONE
!-------------------------------------------------------------------
LOGICAL , INTENT(IN) :: restart , allowed_to_read
INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
its, ite, jts, jte, kts, kte
INTEGER , INTENT(IN) :: P_QI,P_FIRST_SCALAR
REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
RUBLTEN, &
RVBLTEN, &
RTHBLTEN, &
RQVBLTEN, &
RQCBLTEN, &
RQIBLTEN
INTEGER :: i, j, k, itf, jtf, ktf
jtf=min0(jte,jde-1)
ktf=min0(kte,kde-1)
itf=min0(ite,ide-1)
IF(.not.restart)THEN
DO j=jts,jtf
DO k=kts,ktf
DO i=its,itf
RUBLTEN(i,k,j)=0.
RVBLTEN(i,k,j)=0.
RTHBLTEN(i,k,j)=0.
RQVBLTEN(i,k,j)=0.
RQCBLTEN(i,k,j)=0.
ENDDO
ENDDO
ENDDO
ENDIF
IF (P_QI .ge. P_FIRST_SCALAR .and. .not.restart) THEN
DO j=jts,jtf
DO k=kts,ktf
DO i=its,itf
RQIBLTEN(i,k,j)=0.
ENDDO
ENDDO
ENDDO
ENDIF
END SUBROUTINE mrfinit
!-------------------------------------------------------------------
END MODULE module_bl_mrf