/wrfv2_fire/phys/module_sf_pxlsm.F
FORTRAN Legacy | 1703 lines | 900 code | 218 blank | 585 comment | 8 complexity | f2952415ca981168cd0e25858a38680d MD5 | raw file
Possible License(s): AGPL-1.0
Large files files are truncated, but you can click here to view the full file
- MODULE module_sf_pxlsm
-
- USE module_model_constants
- USE module_sf_pxlsm_data
- INTEGER, PARAMETER :: NSOLD=20
- REAL, PARAMETER :: RD = 287.04, CPD = 1004.67, &
- CPH2O = 4.218E+3, CPICE = 2.106E+3, &
- LSUBF = 3.335E+5, SIGMA = 5.67E-8, &
- ROVCP = RD / CPD
-
- REAL, PARAMETER :: CRANKP = 0.5 ! CRANK-NIC PARAMETER
- REAL, PARAMETER :: RIC = 0.25 ! critical Richardson number
- REAL, PARAMETER :: DENW = 1000.0 ! water density in KG/M3
- REAL, PARAMETER :: TAUINV = 1.0 / 86400.0 ! 1/1DAY(SEC)
- REAL, PARAMETER :: T2TFAC = 1.0 / 10.0 ! Bottom soil temp response factor
- REAL, PARAMETER :: PI = 3.1415926
- REAL, PARAMETER :: PR0 = 0.95
- REAL, PARAMETER :: CZO = 0.032
- REAL, PARAMETER :: OZO = 1.E-4
- CONTAINS
- !
- !-------------------------------------------------------------------------
- !-------------------------------------------------------------------------
- SUBROUTINE pxlsm(U3D, V3D, DZ8W, QV3D,T3D,TH3D, RHO, &
- PSFC, GSW, GLW, RAINBL, EMISS, &
- ITIMESTEP, NSOIL, DT, ANAL_INTERVAL, &
- XLAND, XICE, ALBBCK, ALBEDO, SNOALB, &
- SMOIS, TSLB, MAVAIL, TA2, QA2, &
- ZS,DZS, PSIH, &
- LANDUSEF,SOILCTOP,SOILCBOT,VEGFRA,VEGF_PX, &
- ISLTYP,RA,RS,LAI,NLCAT,NSCAT, &
- HFX,QFX,LH,TSK,SST,ZNT,CANWAT, &
- GRDFLX,SHDMIN,SHDMAX, &
- SNOWC,PBLH,RMOL,UST,CAPG,DTBL, &
- T2_NDG_OLD, T2_NDG_NEW, &
- Q2_NDG_OLD, Q2_NDG_NEW, &
- SN_NDG_OLD, SN_NDG_NEW, SNOW, SNOWH,SNOWNCV,&
- T2OBS, Q2OBS, PXLSM_SMOIS_INIT, &
- PXLSM_SOIL_NUDGE, &
- ids,ide, jds,jde, kds,kde, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte )
- !-------------------------------------------------------------------------
- ! THIS MODULE CONTAINS THE PLEIM-XIU LAND-SURFACE MODEL (PX-LSM).
- ! IT IS DESIGNED TO SIMULATE CHARACTERISTICS OF THE LAND SURFACE AND
- ! VEGETATION AND EXCHANGE WITH THE PLANETARY BOUNDARY LAYER (PBL). THE
- ! SOIL MOISTURE MODEL IS BASED ON THE ISBA SCHEME DEVELOPED BY NOILHAN
- ! AND PLANTON (1989) AND JACQUEMIN AND NOILHAN (1990) AND INCLUDES
- ! PROGNOSTIC EQUATIONS FOR SOIL MOISTURE AND SOIL TEMPERATURE IN TWO
- ! LAYERS (1 CM AND 1 M) AS WELL AS CANOPY WATER CONTENT. SURFACE
- ! MOISTURE FLUXES ARE MODELED BY 3 PATHWAYS: SOIL EVAPORATION, CANOPY
- ! EVAPORATION, AND VEGETATIVE EVAPOTRANSPIRRATION.
- ! EVAPOTRANSPIRATION DIRECTLY FROM THE ROOT ZONE SOIL LAYER IS MODELED
- ! VIA A CANOPY RESISTANCE ANALOG ALGORITHM WHERE STOMATAL CONDUCTANCE
- ! IS CONTROLLED BY SOLAR RADIATION, AIR TEMPERATURE, AIR HUMIDITY, AND
- ! ROOT ZONE SOIL MOISTURE. REQUIRED VEGETATION CHARACTERISTICS DERIVED
- ! FROM THE USGS LANDUSE DATA INCLUDE: LEAF AREA INDEX, FRACTIONAL VEGETATION
- ! COVERAGE, ROUGHNESS LENGTH, AND MINIMUM STOMATAL RESISTANCE. AN INDIRECT
- ! NUDGING SCHEME ADJUSTS SOIL MOISTURE ACCORDING TO DIFFERENCES BETWEEN
- ! MODELED TEMPERATURE AND HUMIDITY AND ANALYSED SURFACE FIELDS.
- !
- ! References:
- ! Pleim and Xiu, 1995: Development and testing of a surface flux and planetary
- ! boundary layer model for application in mesoscale models.
- ! J. Appl. Meteoro., Vol. 34, 16-32.
- ! Xiu and Pleim, 2001: Development of a land surface model. Part I: Application
- ! in a mesoscale meteorological model. J. Appl. Meteoro.,
- ! Vol. 40, 192-209.
- ! Pleim and Xiu, 2003: Development of a land surface model. Part II: Data
- ! assimilation. J. Appl. Meteoro., Vol. 42, 1811-1822.
- !
- ! Pleim and Gilliam, 2009: An Indirect Data Assimilation Scheme for Deep Soil Temperature in the
- ! Pleim–Xiu Land Surface Model. J. Appl. Meteor. Climatol., 48, 1362–1376.
- !
- ! Gilliam and Pleim, 2010: Performance assessment of new land-surface and planetary boundary layer
- ! physics in the WRF-ARW. Journal of Applied Meteorology and Climatology, 49, 760-774.
- ! REVISION HISTORY:
- ! AX 4/2005 - developed the initial WRF version based on the MM5 PX LSM
- ! RG 2/2008 - Completed testing of the intial working version of PX LSM, released in WRFV3.0 early 2008
- ! DW 8/2011 - Landuse specific versions of PX (USGS/NLCD/MODIS) were unified into a single code with
- ! landuse characteristics defined in module_sf_pxsfclay.F.
- ! RG 12/2011 - Basic code clean, removed commented out debug statements, lined up columns, etc.
- ! RG 01/2012 - Removed FIRSTIME Logic that computes PX Landuse characteristics at first time step only. This resulted
- ! in different solutions when OpenMP was used and would not work with moving domains.
- !
- !--------------------------------------------------------------------------------------------------------------
- !--------------------------------------------------------------------------------------------------------------
- ! ARGUMENT LIST:
- !
- !... Inputs:
- !-- U3D 3D u-velocity interpolated to theta points (m/s)
- !-- V3D 3D v-velocity interpolated to theta points (m/s)
- !-- DZ8W dz between full levels (m)
- !-- QV3D 3D mixing ratio
- !-- T3D Temperature (K)
- !-- TH3D Theta (K)
- !-- RHO 3D dry air density (kg/m^3)
- !-- PSFC surface pressure (Pa)
- !-- GSW downward short wave flux at ground surface (W/m^2)
- !-- GLW downward long wave flux at ground surface (W/m^2)
- !-- RAINBL Timestep rainfall
- !-- EMISS surface emissivity (between 0 and 1)
- !-- ITIMESTEP time step number
- !-- NSOIL number of soil layers
- !-- DT time step (second)
- !-- ANAL_INTERVAL Interval of analyses used for soil moisture and temperature nudging
- !-- XLAND land mask (1 for land, 2 for water)
- !-- XICE Sea ice
- !-- ALBBCK Background Albedo
- !-- ALBEDO surface albedo with snow cover effects
- !-- SNOALB Albedo of snow
- !-- SMOIS total soil moisture content (volumetric fraction)
- !-- TSLB soil temp (k)
- !-- MAVAIL Moisture availibility of soil
- !-- TA2 2-m temperature
- !-- QA2 2-m mixing ratio
- !-- SVPT0 constant for saturation vapor pressure (K)
- !-- SVP1 constant for saturation vapor pressure (kPa)
- !-- SVP2 constant for saturation vapor pressure (dimensionless)
- !-- SVP3 constant for saturation vapor pressure (K)
- !-- ZS depths of centers of soil layers
- !-- DZS thicknesses of soil layers
- !-- PSIH similarity stability function for heat
- !-- LANDUSEF Landuse fraction
- !-- SOILCTOP Top soil fraction
- !-- SOILCBOT Bottom soil fraction
- !-- VEGFRA Vegetation fraction
- !-- VEGF_PX Veg fraction recomputed and used by PX LSM
- !-- ISLTYP Soil type
- !-- RA Aerodynamic resistence
- !-- RS Stomatal resistence
- !-- LAI Leaf area index (weighted according to fractional landuse)
- !-- NLCAT Number of landuse categories
- !-- NSCAT Number of soil categories
- !-- HFX net upward heat flux at the surface (W/m^2)
- !-- QFX net upward moisture flux at the surface (kg/m^2/s)
- !-- LH net upward latent heat flux at surface (W/m^2)
- !-- TSK surface skin temperature (K)
- !-- SST sea surface temperature
- !-- ZNT rougness length
- !-- CANWAT Canopy water (mm)
- !-- GRDFLX Ground heat flux
- !-- SFCEVP Evaportation from surface
- !-- SHDMIN Minimum annual vegetation fraction for each grid cell
- !-- SHDMAX Maximum annual vegetation fraction for each grid cell
- !-- SNOWC flag indicating snow coverage (1 for snow cover)
- !-- PBLH PBL height (m)
- !-- RMOL 1/L Reciprocal of Monin-Obukhov length
- !-- UST u* in similarity theory (m/s)
- !-- CAPG heat capacity for soil (J/K/m^3)
- !-- DTBL time step of boundary layer calls
- !-- T2_NDG_OLD Analysis temperature prior to current time
- !-- T2_NDG_NEW Analysis temperature ahead of current time
- !-- Q2_NDG_OLD Analysis mixing ratio prior to current time
- !-- Q2_NDG_NEW Analysis mixing ratio ahead of current time
- !-- SN_NDG_OLD Analysis snow water prior to current time
- !-- SN_NDG_NEW Analysis snow water ahead of current time
- !-- SNOW Snow water equivalent
- !-- SNOWH Physical snow depth
- !-- SNOWNCV Time step accumulated snow
- !-- T2OBS Analysis temperature interpolated from prior and next in time analysese
- !-- Q2OBS Analysis moisture interpolated from prior and next in time analysese
- !-- PXLSM_SMOIS_INIT Flag to intialize deep soil moisture to a value derived from moisture availiability.
- !-- PXLSM_SOIL_NUDGE Flag to use soil moisture and temperature nudging in the PX LSM
- ! This is typically done for the first simulation.
- !-- 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
- !-- 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
- !... Outputs:
- IMPLICIT NONE
- !.......Arguments
- ! DECLARATIONS - INTEGER
- INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte
- INTEGER, INTENT(IN) :: NSOIL, ITIMESTEP, NLCAT, NSCAT, &
- ANAL_INTERVAL, PXLSM_SMOIS_INIT, PXLSM_SOIL_NUDGE
- REAL, INTENT(IN ) :: DT,DTBL
- INTEGER, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ISLTYP
- ! DECLARATIONS - REAL
- REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN) :: U3D, V3D, RHO, &
- T3D, TH3D, DZ8W, QV3D
- REAL, DIMENSION(1:NSOIL), INTENT(IN)::ZS,DZS
- REAL, DIMENSION( ims:ime , 1:NSOIL, jms:jme ), INTENT(INOUT) :: SMOIS, TSLB
- REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: RA, RS, LAI, ZNT
- REAL, DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: GRDFLX, TSK, TA2, QA2
- REAL, DIMENSION( ims:ime , 1:NLCAT, jms:jme ), INTENT(IN):: LANDUSEF
- REAL, DIMENSION( ims:ime , 1:NSCAT, jms:jme ), INTENT(IN):: SOILCTOP, SOILCBOT
- REAL, DIMENSION( ims:ime, jms:jme ), &
- INTENT(IN) :: PSFC, GSW, GLW, RAINBL, &
- EMISS, SNOALB, &
- ALBBCK, SHDMIN, SHDMAX, &
- PBLH, RMOL, SNOWNCV, &
- UST, MAVAIL, SST
- REAL, DIMENSION( ims:ime, jms:jme ), &
- INTENT(IN) :: T2_NDG_OLD, T2_NDG_NEW, &
- Q2_NDG_OLD, Q2_NDG_NEW, &
- SN_NDG_OLD, SN_NDG_NEW
- REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: T2OBS, Q2OBS
-
- REAL, DIMENSION( ims:ime, jms:jme ), &
- INTENT(INOUT) :: CAPG,CANWAT, QFX, HFX, LH, &
- PSIH,VEGFRA, VEGF_PX, SNOW, &
- SNOWH, SNOWC, ALBEDO, XLAND, XICE
- LOGICAL :: radiation
- !-------------------------------------------------------------------------
- ! ---------- Local Variables --------------------------------
- !---- PARAMETERS
- INTEGER, PARAMETER :: NSTPS = 11 ! max. soil types
- REAL, PARAMETER :: DTPBLX = 40.0 ! Max PX timestep = 40 sec
-
- !---- INTEGERS
- INTEGER, DIMENSION( 1: NSTPS ) :: JP
- INTEGER:: J, I, NS, NUDGE, ISTI, WEIGHT
- INTEGER:: NTSPS, IT
- !---- REALS
- REAL, DIMENSION( ims:ime, jms:jme ) :: XLAI, XLAIMN, RSTMIN, &
- XVEG, XVEGMN, XSNUP, &
- XALB
-
- REAL, DIMENSION( ims:ime, jms:jme ) :: RADNET, EG, ER, ETR, QST
- REAL:: SFCPRS,TA1,DENS1,QV1,ZLVL,SOLDN,LWDN, &
- EMISSI,PRECIP,THETA1,VAPPRS,QSBT, &
- WG,W2,WR,TG,T2,USTAR,MOLX,Z0, &
- RAIR,CPAIR,IFLAND,ISNOW, &
- ES,QSS,BETAP, &
- RH2_OLD, RH2_NEW, T2_OLD, T2_NEW, &
- CORE, CORB, TIME_BETWEEN_ANALYSIS, &
- G1000, ALN10,RH2OBS, HU, SNOBS, &
- FWSAT,FWFC,FWWLT,FB,FCGSAT,FJP,FAS, &
- FSEAS, T2I, HC_SNOW, SNOW_FRA,SNOWALB, &
- QST12,ZFUNC,ZF1,ZA2,QV2, DT_FDDA,CURTIME, &
- FC2R,FC1SAT, DTPBL
- CHARACTER (LEN = 5) :: LAND_USE_TYPE
- !-------------------------------------------------------------------------
- !-------------------------------Executable starts here--------------------
- !
- ! Determine Landuse Dataset by the number of categories
- IF (NLCAT == 50) THEN
- LAND_USE_TYPE = 'NLCD'
- ELSE IF (NLCAT == 20) THEN
- LAND_USE_TYPE = 'MODIS'
- ELSE IF (NLCAT == 24) THEN
- LAND_USE_TYPE = 'USGS'
- ELSE
- PRINT *, 'Error: Unknown Land Use Category'
- STOP
- END IF
- ALN10 = ALOG(10.0)
- G1000 = g*1.0E-3 ! G/1000
- WEIGHT = 0
- DT_FDDA = ANAL_INTERVAL * 1.0 ! Convert DT of Analysis to real
- !-----------------------------------------------------------------------------------
- ! Compute vegetation and land-use characteristics by land-use fraction weighting
- ! These parameters include LAI, VEGF, ZNT, ALBEDO, RS, etc.
- CALL VEGELAND(LANDUSEF, VEGFRA, SHDMIN, SHDMAX, &
- SOILCTOP, SOILCBOT, NLCAT, NSCAT, &
- ZNT,XLAI,XLAIMN,RSTMIN,XVEG,XVEGMN,XSNUP, &
- XLAND, XALB, &
- ids,ide, jds,jde, kds,kde, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte, LAND_USE_TYPE )
- !-----------------------------------------------------------------------------------
- !--- Compute time relatve to old and new analysis time for timestep interpolation
- CURTIME = (ITIMESTEP-1) * DT
- TIME_BETWEEN_ANALYSIS = MOD(CURTIME,DT_FDDA)
- IF (TIME_BETWEEN_ANALYSIS .EQ. 0.0) THEN
- CORB = 1.0
- CORE = 0.0
- ELSE
- CORE = TIME_BETWEEN_ANALYSIS / DT_FDDA
- CORB = 1.0 - CORE
- ENDIF
- !-----------------------------------------------------------------------------------
- !-----------------------------------------------------------------------------------
- ! Main loop over individual grid cells
- DO J = jts,jte !-- J LOOP
- DO I = its,ite !-- I LOOP
-
- IFLAND = XLAND(I,J)
- ! Compute soil properties via weighting of fractional components
- IF (IFLAND .LT. 1.5 ) THEN
- !---------------------------------------------------------
- CALL SOILPROP (SOILCBOT(I,:,J), WEIGHT, &
- ITIMESTEP, MAVAIL(I,J), &
- PXLSM_SMOIS_INIT, &
- FWSAT,FWFC,FWWLT,FB,FCGSAT, &
- FJP,FAS,FC2R,FC1SAT,ISTI,SMOIS(I,2,J) )
- !----------------------------------------------------------
- ISLTYP(I,J) = ISTI
- ELSE
- ISLTYP(I,J) = 14 ! STATSGO type for water
- ENDIF
- !-- Variables Sub. SURFPX needs
- SFCPRS = PSFC(i,j) / 1000.0 ! surface pressure in cb
- TA1 = T3D(i,1,j) ! air temperature at first layer
- DENS1 = RHO(I,1,J) ! air density at first layer
- QV1 = QV3D(i,1,j) ! water vapor mixing ratio at first layer
- QV2 = QV3D(i,2,j)
- ZLVL = 0.5 * DZ8W(i,1,j) ! thickness of lowest half level
- ZF1 = DZ8W(i,1,j)
- ZA2 = ZF1 + 0.5 * DZ8W(i,2,j)
- LWDN = GLW(I,J) ! longwave radiation
- EMISSI = EMISS(I,J) ! emissivity
- PRECIP = MAX ( 1.0E-3*RAINBL(i,j)/DTBL,0.0) ! accumulated precip. rate during DT (=dtpbl)
- ! convert RAINBL from mm to m for PXLSM
- WR = 1.0E-3*CANWAT(I,J) ! convert CANWAT from mm to m for PXLSM
- THETA1 = TH3D(i,1,j) ! potential temp at first layer
- SNOBS = SNOW(I,J) ! Set snow cover to existing model value
- ! this is overwritten below if snow analysis is availiable
- ! otherwise snow cover remains constant through simulation
-
- IF(PXLSM_SOIL_NUDGE .EQ. 1) THEN
- !-- 2 m Temp and RH for Nudging
- T2_OLD = T2_NDG_OLD(I,J)
- T2_NEW = T2_NDG_NEW(I,J)
- VAPPRS = SVP1 * EXP(SVP2 * (T2_OLD - SVPT0) / ( T2_OLD - SVP3))
- QSBT = EP_2 * VAPPRS / (SFCPRS - VAPPRS)
- RH2_OLD = Q2_NDG_OLD(I,J) / QSBT
- VAPPRS = SVP1 * EXP(SVP2 * (T2_NEW - SVPT0) / (T2_NEW - SVP3))
- QSBT = EP_2 * VAPPRS / (SFCPRS - VAPPRS)
- RH2_NEW = Q2_NDG_NEW(I,J) / QSBT
- RH2OBS = CORB * RH2_OLD + CORE * RH2_NEW
- T2OBS(I,J) = CORB * T2_OLD + CORE * T2_NEW
- Q2OBS(I,J) = CORB * Q2_NDG_OLD(I,J) + CORE * Q2_NDG_NEW(I,J)
- SNOBS = CORB * SN_NDG_OLD(I,J) + CORE * SN_NDG_NEW(I,J)
- ENDIF
- USTAR = MAX(UST(I,J),0.005)
-
- IF (IFLAND .GT. 1.5) THEN ! if over water
- ZNT(I,J) = CZO * UST(I,J) * UST(I,J) / G + OZO
- ENDIF
-
- Z0 = ZNT(I,J)
- CPAIR = CPD * (1.0 + 0.84 * QV1) ! J/(K KG)
- !-------------------------------------------------------------
- ! Compute fractional snow area and snow albedo
- CALL PXSNOW (ITIMESTEP, SNOBS, SNOWNCV(I,J), SNOW(I,J), &
- SNOWH(I,J), XSNUP(I,J), XALB(i,j), &
- SNOALB(I,J),VEGF_PX(I,J), SHDMIN(I,J), &
- HC_SNOW, SNOW_FRA, SNOWC(I,J), ALBEDO(I,J) )
- !-------------------------------------------------------------
-
- !-------------------------------------------------------------
- ! Sea Ice from analysis and water cells that are very cold, but more than 50% water
- ! are converted to ice/snow for more reasonable treatment.
- IF( (XICE(I,J).GE.0.5) .OR. &
- (SST(I,J).LE.270.0.AND.XLAND(I,J).GT.1.50) ) THEN
- XLAND(I,J) = 1.0
- IFLAND = 1.0
- ZNT(I,J) = 0.001 ! Ice
- SMOIS(I,1,J) = 1.0 ! FWSAT
- SMOIS(I,2,J) = 1.0 ! FWSAT
- XICE(I,J) = 1.0
- ALBEDO(I,J) = 0.7
- SNOWC(I,J) = 1.0
- SNOW_FRA = 1.0
- VEGF_PX(I,J) = 0.0
- LAI(I,J) = 0.0
- ENDIF
- !-------------------------------------------------------------
- !-------------------------------------------------------------
- !-- Note that when IFGROW = 0 is selected in Vegeland then max and min
- !-- LAI and Veg are the same
- T2I = TSLB(I,2,J)
- ! FSEAS = AMAX1(1.0 - 0.0016 * (298.0 - T2I) ** 2,0.0) ! BATS
- FSEAS = AMAX1(1.0 - 0.015625 * (290.0 - T2I) ** 2,0.0) ! JP97
- IF (T2I .GE. 290.0) FSEAS = 1.0
-
- LAI(I,J) = XLAIMN(I,J) + FSEAS*(XLAI(I,J) - XLAIMN(I,J))
- VEGF_PX(I,J) = XVEGMN(I,J) + FSEAS*(XVEG(I,J) - XVEGMN(I,J))
-
- ! Ensure veg algorithms not used for water
- IF (IFLAND .GT. 1.5) THEN
- VEGF_PX(I,J) = 0.0
- ENDIF
- !-------------------------------------------------------------
- SOLDN = GSW(I,J) / (1.0 - ALBEDO(I,J)) ! downward shortwave radiaton
- ISNOW = SNOWC(I,J)
- NUDGE=PXLSM_SOIL_NUDGE
- IF ( J .LE. 2 .OR. J .GE. (jde-1) ) NUDGE=0
- IF ( I .LE. 2 .OR. I .GE. (ide-1) ) NUDGE=0
-
- IF ( RMOL(I,J) .GT. 0.0 ) THEN
- MOLX = AMIN1(1/RMOL(I,J),1000.0)
- ELSE IF ( RMOL(I,J) .LT. 0.0 ) THEN
- MOLX = AMAX1(1/RMOL(I,J),-1000.0)
- ELSE
- MOLX = 1000
- ENDIF
-
- ZFUNC = ZF1 * (1.0 - ZF1 / MAX(100.,PBLH(I,J))) ** 2
- QST12 = KARMAN * ZFUNC*(QV2-QV1) / (ZA2-ZLVL)
-
- !--- LSM sub-time loop too prevent dt > 40 sec
- NTSPS = INT(DT / (DTPBLX + 0.000001) + 1.0)
- DTPBL = DT / NTSPS
- DO IT=1,NTSPS
-
- !... SATURATION VAPOR PRESSURE (MB)
- IF ( TSLB(I,1,J) .LE. SVPT0 ) THEN ! For ground that is below freezing
- ES = SVP1 * EXP(22.514 - 6.15E3 / TSLB(I,1,J)) ! cb
- ELSE
- ES = SVP1 * EXP(SVP2 * (TSLB(I,1,J) - SVPT0) / (TSLB(I,1,J) - SVP3))
- ENDIF
- QSS = ES * 0.622 / (SFCPRS - ES)
-
- !... beta method, Lee & Pielke (JAM,May1992)
- BETAP = 1.0
- IF (IFLAND .LT. 1.5 .AND. ISNOW .LT. 0.5 .AND. SMOIS(I,1,J) .LE. FWFC) THEN
- BETAP = 0.25 * (1.0 - COS(SMOIS(I,1,J) / FWFC * PI)) ** 2
- ENDIF
-
- !-------------------------------------------------------------------------
- CALL SURFPX (DTPBL, IFLAND, SNOWC(I,J), NUDGE, XICE(I,J), & !in
- SOLDN, GSW(I,J), LWDN, EMISSI, ZLVL, & !in
- MOLX, Z0, USTAR, & !in
- SFCPRS, DENS1, QV1, QSS, TA1, & !in
- THETA1, PRECIP, & !in
- CPAIR, PSIH(I,J), & !in
- RH2OBS,T2OBS(I,J), & !in
- VEGF_PX(I,J), ISTI, LAI(I,J), BETAP, & !in
- RSTMIN(I,J), HC_SNOW, SNOW_FRA, & !in
- FWWLT, FWFC, FCGSAT, FWSAT, FB, & !in
- FC1SAT,FC2R,FAS,FJP,DZS(1),DZS(2),QST12, & !in
- RADNET(I,J), GRDFLX(I,J), HFX(I,J), QFX(I,J), LH(I,J), & !out
- EG(I,J), ER(I,J), ETR(I,J), & !out
- QST(I,J), CAPG(I,J), RS(I,J), RA(I,J), & !out
- TSLB(I,1,J), TSLB(I,2,J), & !out
- SMOIS(I,1,J), SMOIS(I,2,J), WR, TA2(I,J), QA2(I,J), &
- LAND_USE_TYPE )
- !-------------------------------------------------------------------------
-
- END DO ! Time internal PX time loop
- TSK(I,J) = TSLB(I,1,J) ! Skin temp set to 1 cm soil temperature in PX for now
- CANWAT(I,J) = WR * 1000. ! convert WR back to mm for CANWAT
-
- ENDDO ! END MIAN I LOOP
- ENDDO ! END MAIN J LOOP
-
- !------------------------------------------------------
- END SUBROUTINE pxlsm
- !-------------------------------------------------------------------------
- !-------------------------------------------------------------------------
- !-------------------------------------------------------------------------
- !-------------------------------------------------------------------------
- SUBROUTINE VEGELAND( landusef, vegfra, &
- shdmin, shdmax, &
- soilctop, soilcbot, nlcat, nscat, &
- znt, xlai, xlaimn, rstmin, xveg, xvegmn, &
- xsnup, xland, xalb, &
- ids,ide, jds,jde, kds,kde, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte, &
- LAND_USE_TYPE )
- !-------------------------------------------------------------------------
- !
- ! CALLED FROM Sub. bl_init in module_physics.init.F
- !
- ! THIS PROGRAM PROCESSES THE USGS LANDUSE DATA
- ! WHICH HAS BEEN GRIDDED BY THE WPS SYSTEM
- ! AND PRODUCES 2-D FIELDS OF LU RELATED PARAMETERS
- ! FOR USE IN THE PX SURFACE MODEL
- !
- !
- ! REVISION HISTORY:
- ! AX Oct 2004 - developed WRF version based on VEGELAND in the MM5 PX LSM
- ! RG Dec 2006 - revised for WRFV2.1.2
- ! JP Dec 2007 - revised for WRFV3 - removed IFGROW options
- !-------------------------------------------------------------------------
- !-------------------------------------------------------------------------
-
- IMPLICIT NONE
- !...
- INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte
-
- INTEGER , INTENT(IN) :: NSCAT, NLCAT
- REAL, DIMENSION( ims:ime , 1:NLCAT, jms:jme ), INTENT(IN) :: LANDUSEF
- REAL, DIMENSION( ims:ime , 1:NSCAT, jms:jme ), INTENT(IN) :: SOILCTOP, SOILCBOT
-
- REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: VEGFRA, SHDMIN, SHDMAX
- REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ZNT
- REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: XLAI, XLAIMN, RSTMIN, XALB, &
- XVEG, XVEGMN, XSNUP, XLAND
- CHARACTER (LEN = 5), INTENT(IN) :: LAND_USE_TYPE
-
- !... local variables
- INTEGER :: itf, jtf, k, j, i
- REAL :: SUMLAI, SUMLMN, SUMRSI, SUMLZ0, SUMVEG, SUMVMN, ALAI, VEGF, SUMSNUP
- REAL :: VFMX, VFMN, VSEAS, FAREA, FWAT, ZNOTC, SUMALB
- REAL, DIMENSION( NLCAT ) :: LAIMX, LAIMN, Z0, VEG, VEGMN, SNUP
- REAL, PARAMETER :: ZNOTCMN = 5.0 ! CM, MIN Zo FOR CROPS
- REAL, PARAMETER :: ZNOTCMX = 15.0 ! CM, MAX Zo FOR CROPS
- REAL, SAVE, DIMENSION(:), POINTER :: RSMIN, Z00, VEG0, VEGMN0, LAI0, LAIMN0, SNUP0, ALBF
- !---- INITIALIZE PARAMETERS
- INTEGER, SAVE :: KWAT
- INTEGER, SAVE :: LIMIT1, LIMIT2
- ! Initialize LU characteristics by LU Dataset
- IF (LAND_USE_TYPE == 'USGS') THEN
- KWAT = 16
- RSMIN => RSMIN_USGS
- Z00 => Z00_USGS
- VEG0 => VEG0_USGS
- VEGMN0 => VEGMN0_USGS
- LAI0 => LAI0_USGS
- LAIMN0 => LAIMN0_USGS
- SNUP0 => SNUP0_USGS
- ALBF => ALBF_USGS
- LIMIT1 = 2
- LIMIT1 = 6
- ELSE IF (LAND_USE_TYPE == 'NLCD') THEN
- KWAT = 1
- RSMIN => RSMIN_NLCD
- Z00 => Z00_NLCD
- VEG0 => VEG0_NLCD
- VEGMN0 => VEGMN0_NLCD
- LAI0 => LAI0_NLCD
- LAIMN0 => LAIMN0_NLCD
- SNUP0 => SNUP0_NLCD
- ALBF => ALBF_NLCD
- LIMIT1 = 20
- LIMIT1 = 43
- ELSE IF (LAND_USE_TYPE == 'MODIS') THEN
- KWAT = 17
- RSMIN => RSMIN_MODIS
- Z00 => Z00_MODIS
- VEG0 => VEG0_MODIS
- VEGMN0 => VEGMN0_MODIS
- LAI0 => LAI0_MODIS
- LAIMN0 => LAIMN0_MODIS
- SNUP0 => SNUP0_MODIS
- ALBF => ALBF_MODIS
- LIMIT1 = 12
- LIMIT1 = 14
- END IF
- !--------------------------------------------------------------------
- DO J = jts,jte
- DO I = its,ite
- XLAI(I,J) = 0.0
- XLAIMN(I,J) = 0.0
- RSTMIN(I,J) = 9999.0
- XVEG(I,J) = 0.0
- XVEGMN(I,J) = 0.0
- XSNUP(I,J) = 0.0
- XALB(I,J) = 0.0
- ENDDO ! END LOOP THROUGH GRID CELLS
- ENDDO ! END LOOP THROUGH GRID CELLS
- !--------------------------------------------------------------------
- DO J = jts,jte
- DO I = its,ite
-
- !-- Initialize 2 and 3-D veg parameters to be caculated
- DO K=1,NLCAT
- LAIMX(K) = LAI0(K)
- LAIMN(K) = LAIMN0(K)
- Z0(K) = Z00(K)
- VEG(K) = VEG0(K)
- VEGMN(K) = VEGMN0(K)
- SNUP(K) = SNUP0(K)
- ENDDO
- !-- INITIALIZE SUMS
- SUMLAI = 0.0
- SUMLMN = 0.0
- SUMRSI = 0.0
- SUMLZ0 = 0.0
- SUMVEG = 0.0
- SUMVMN = 0.0
- ALAI = 0.0
- SUMSNUP= 0.0
- SUMALB = 0.0
- !-- ESTIMATE CROP EMERGANCE DATE FROM VEGFRAC
- VFMX = SHDMAX(I,J)
- VFMN = SHDMIN(I,J)
- VEGF = VEGFRA(I,J)
-
- !-- Computations for VEGETATION CELLS ONLY
- IF(VFMX.GT.0.0.AND.LANDUSEF(I,KWAT,J).LT.1.00) THEN
- VSEAS = VEGF/VFMX
- IF(VSEAS.GT.1.0.OR.VSEAS.LT.0.0) THEN
- VSEAS = MIN(VSEAS,1.0)
- VSEAS = MAX(VSEAS,0.0)
- ENDIF
- ZNOTC = ZNOTCMN * (1-VSEAS) + ZNOTCMX * VSEAS ! Zo FOR CROPS
- DO K = 1, NLCAT
- IF (LAND_USE_TYPE == 'MODIS') THEN
- !-- USE THE VEGFRAC DATA ONLY FOR CROPS
- IF (K.EQ.12 .OR. K.EQ.14) THEN
- LAIMX(K) = LAIMN0(K) * (1-VSEAS) + LAI0(K) * VSEAS
- LAIMN(K) = LAIMX(K)
- VEG(K) = VEGMN0(K) * (1-VSEAS) + VEG0(K) * VSEAS
- VEGMN(K) = VEG(K)
- !-- SEASONALLY VARY Zo FOR MODIS DryCrop (k=12)
- IF (K .EQ. 12) THEN
- Z0(K) = ZNOTC
- !-- CrGrM (k=14) USE AVG WITH GRASS AND FOREST
- ELSE IF (K .EQ.14) THEN
- Z0(K) = 0.5 * (ZNOTC + Z00(K))
- ENDIF
- ENDIF
- ELSE IF (LAND_USE_TYPE == 'NLCD') THEN
- !-- USE THE VEGFRAC DATA ONLY FOR CROPS
- IF (K.EQ.20 .OR. K.EQ.43 .OR. K.EQ.45) THEN
- LAIMX(K) = LAIMN0(K) * (1-VSEAS) + LAI0(K) * VSEAS
- LAIMN(K) = LAIMX(K)
- VEG(K) = VEGMN0(K) * (1-VSEAS) + VEG0(K) * VSEAS
- VEGMN(K) = VEG(K)
- !-- SEASONALLY VARY Zo FOR DryCrop (k=20) OR Irigated Crop (k=43) OR Mix Crop (k=4)
- IF (K.EQ.20 .OR. K.EQ.43) THEN
- Z0(K) = ZNOTC
- !-- CrNatM (k=45) USE AVG WITH GRASS AND FOREST
- ELSE IF (K.EQ.45) THEN
- Z0(K) = 0.5 * (ZNOTC + Z00(K))
- ENDIF
- ENDIF
- ELSE IF (LAND_USE_TYPE == 'USGS') THEN
- !-- USE THE VEGFRAC DATA ONLY FOR CROPS
- IF (K .GE. 2 .AND. K .LE. 6) THEN
- LAIMX(K) = LAIMN0(K) * (1-VSEAS) + LAI0(K) * VSEAS
- LAIMN(K) = LAIMX(K)
- VEG(K) = VEGMN0(K) * (1-VSEAS) + VEG0(K) * VSEAS
- VEGMN(K) = VEG(K)
- !-- SEASONALLY VARY Zo FOR DryCrop (k=2) OR Irigated Crop (k=3) OR Mix Crop (k=4)
- IF (K .GE. 2 .AND. K .LE. 4) THEN
- Z0(K) = ZNOTC
- !-- CrGrM (k=5) or CrWdM (k=6) USE AVG WITH GRASS AND FOREST
- ELSE IF (K .GE.5 .AND. K .LE. 6) THEN
- Z0(K) = 0.5 * (ZNOTC + Z00(K))
- ENDIF
- ENDIF
- END IF
- ENDDO
- ENDIF !-- IF cell is vegetation
- !-------------------------------------
- !-- LOOP THROUGH LANDUSE Fraction and compute totals
- DO K = 1, NLCAT
- FAREA = LANDUSEF(I,K,J)
- SUMLAI = SUMLAI + LAIMX(K) * FAREA
- SUMLMN = SUMLMN + LAIMN(K) * FAREA
- ALAI = ALAI + FAREA
- SUMRSI = SUMRSI + FAREA * LAIMX(K) / RSMIN(K)
- SUMLZ0 = SUMLZ0 + FAREA * ALOG(Z0(K))
- SUMVEG = SUMVEG + FAREA * VEG(K)
- SUMVMN = SUMVMN + FAREA * VEGMN(K)
- SUMSNUP= SUMSNUP+ FAREA * SNUP(K)
- SUMALB = SUMALB + FAREA * ALBF(K)
- ENDDO
- !-- CHECK FOR WATER
- FWAT = LANDUSEF(I,KWAT,J)
- IF (FWAT .GT. 0.999) THEN
- XLAI(I,J) = LAIMX(KWAT)
- XLAIMN(I,J) = LAIMN(KWAT)
- RSTMIN(I,J) = RSMIN(KWAT)
- ZNT(I,J) = Z0(KWAT)
- XVEG(I,J) = VEG(KWAT)
- XVEGMN(I,J) = VEGMN(KWAT)
- XSNUP(I,J) = SNUP(KWAT)
- XALB(I,J) = ALBF(KWAT)
- ELSE
- IF (FWAT .GT. 0.10) THEN
- ALAI = ALAI - FWAT
- SUMLZ0 = SUMLZ0 - FWAT * ALOG(Z0(KWAT))
- ENDIF
- XLAI(I,J) = SUMLAI / ALAI
- XLAIMN(I,J) = SUMLMN / ALAI
- RSTMIN(I,J) = SUMLAI / SUMRSI
- ZNT(I,J) = EXP(SUMLZ0/ALAI)
- XVEG(I,J) = SUMVEG / ALAI
- XVEGMN(I,J) = SUMVMN / ALAI
- XSNUP(I,J) = SUMSNUP/ALAI
- XALB(I,J) = SUMALB/ALAI
- ENDIF
- IF (FWAT .GT. 0.50) THEN
- ZNT(I,J) = Z0(KWAT)
- XALB(I,J)= ALBF(KWAT)
- ENDIF
- ZNT(I,J) = ZNT(I,J) * 0.01 !CONVERT TO M
- XVEG(I,J) = XVEG(I,J) * 0.01 !CONVERT TO FRAC
- XVEGMN(I,J) = XVEGMN(I,J) * 0.01
- XLAND(I,J) = 1.0 + FWAT
- XALB(I,J) = XALB(I,J) * 0.01
-
- ENDDO ! END LOOP THROUGH GRID CELLS
- ENDDO ! END LOOP THROUGH GRID CELLS
- !--------------------------------------------------------------------
- END SUBROUTINE vegeland
- !------------------------------------------------------------------------------
- !------------------------------------------------------------------------------
- SUBROUTINE SURFPX(DTPBL, IFLAND, ISNOW, NUDGEX, XICE1, & !in
- SOLDN, GSW, LWDN, EMISSI, Z1, & !in
- MOL, ZNT, UST, & !in
- PSURF, DENS1, QV1, QSS, TA1, & !in
- THETA1, PRECIP, & !in
- CPAIR, PSIH, & !in
- RH2OBS, T2OBS, & !in
- VEGFRC, ISTI, LAI, BETAP, & !in
- RSTMIN, HC_SNOW, SNOW_FRA, & !in
- WWLT, WFC, CGSAT, WSAT, B, & !in
- C1SAT, C2R, AS, JP, DS1, DS2,QST12, & !in
- RADNET, GRDFLX, HFX, QFX, LH, EG, ER, ETR, & !out
- QST, CAPG, RS, RA, TG, T2, & !out
- WG, W2, WR, TA2, QA2, LAND_USE_TYPE ) !out
- !------------------------------------------------------------------------------
- !
- ! FUNCTION:
- ! THIS SUBROUTINE COMPUTES SOIL MOISTURE AND TEMPERATURE TENDENCIES
- ! BY SOLVING THE PROGNOSTIC EQUATIONS IN PX95.
- !
- ! SUBROUTINES CALLED:
- ! SUB. QFLUX compute the soil and canopy evaporation, and transpiration
- ! SUB. SMASS compute nudging coefficients for soil moisture and temp nudging
- !
- ! ARGUMENTS:
- ! DTPBL: TIME STEP OF THE MINOR LOOP FOR THE LAND-SURFACE/PBL MODEL
- ! IFLAND: INDEX WHICH INDICATES THE TYPE OF SURFACE,=1,LAND;=2,SEA
- ! ISNOW: SNOW (=1) OR NOT (=0)
- ! NUDGE: SWITCH FOR SOIL MOISTURE NUDGING
- ! SOLDN: SHORT-WAVE RADIATION
- ! LWDN: LONG-WAVE RADIATION
- ! EMISSI: EMISSIVITY
- ! Z1: HEIGHT OF THE LOWEST HALF LAYER
- ! MOL: MONIN-OBUKOV LENGH (M)
- ! ZNT: ROUGHNESS LENGTH (M)
- ! UST: FRICTION VELOCITY (M/S)
- ! TST: Turbulent moisture scale
- ! RA: AERODYNAMIC RESISTENCE
- ! PSURF: P AT SURFACE (CB)
- ! DENS1: AIR DENSITY AT THE FIRST HALF LAYER
- ! QV1: Air humidity at first half layer
- ! QSS: Saturation mixing ratio at ground
- ! TA1: Air temperature at first half layer
- ! THETA1: Potential temperature at first half layer
- ! PRECIP: Precipitation rate in m/s
- ! STBOLT: STEFAN BOLTZMANN'S CONSTANT
- ! KARMAN: VON KARMAN CONSTANT
- ! CPAIR: Specific heat of moist air (M^2 S^-2 K^-1)
- ! TAUINV: 1/1DAY(SEC)
- ! VEGFRC: Vegetation coverage
- ! ISTI: soil type
- ! LAI: Leaf area index
- ! BETAP: Coefficient for bare soil evaporation
- ! THZ1OB: Observed TEMP FROM ANAL OF OBS TEMPS AT SCREEN HT
- ! RHOBS: Observed relative humidity at SCREEN HT
- ! RSTMIN Minimum Stomatol resistence
- !... Outputs from SURFPX
- ! RADNET: Net radiation
- ! HFX: SENSIBLE HEAT FLUX (W / M^2)
- ! QFX: TOTAL EVAP FLUX (KG / M^2 S)
- ! GRDFLX: Ground heat flux (W / M^2)
- ! QST: Turbulent moisture scale
- ! CAPG: THERMAL CAPACITY OF GROUND SLAB (J/M^2/K)
- ! RS: Surface resistence
- ! RA: Surface aerodynamic resistence
- ! EG: evaporation from ground (bare soil)
- ! ER: evaporation from canopy
- ! ETR: transpiration from vegetation
- ! TA2: diagnostic 2-m temperature from surface layer and lsm
- !
- !... Updated variables in this subroutine
- ! TG: Soil temperature at first soil layer
- ! T2: Soil temperature in root zone
- ! WG: Soil moisture at first soil layer
- ! W2: Soil moisture at root zone
- ! WR: Canopy water content in m
- !
- ! REVISION HISTORY:
- ! AX 2/2005 - developed WRF version based on the MM5 PX LSM
- !
- !------------------------------------------------------------------------------
- !------------------------------------------------------------------------------
- IMPLICIT NONE
- !.......Arguments
- !.. Integer
- INTEGER , INTENT(IN) :: ISTI, NUDGEX
- !... Real
- REAL , INTENT(IN) :: DTPBL, DS1, DS2
- REAL , INTENT(IN) :: IFLAND, ISNOW, XICE1
- REAL , INTENT(IN) :: SOLDN, GSW, LWDN, EMISSI, Z1
- REAL , INTENT(IN) :: ZNT
- REAL , INTENT(IN) :: PSURF, DENS1, QV1, QSS, TA1, THETA1, PRECIP
- REAL , INTENT(IN) :: CPAIR
- REAL , INTENT(IN) :: VEGFRC, LAI
- REAL , INTENT(IN) :: RSTMIN, HC_SNOW, SNOW_FRA
- REAL , INTENT(IN) :: WWLT, WFC, CGSAT, WSAT, B, C1SAT, C2R, AS, JP
- REAL , INTENT(IN) :: RH2OBS,T2OBS
- REAL , INTENT(IN) :: QST12
- REAL , INTENT(OUT) :: RADNET, EG, ER, ETR
- REAL , INTENT(OUT) :: QST, CAPG, RS, TA2, QA2
- REAL , INTENT(INOUT) :: TG, T2, WG, W2, WR, UST, RA, BETAP
- REAL , INTENT(INOUT) :: GRDFLX, QFX, HFX, LH, PSIH, MOL
- CHARACTER (LEN = 5), INTENT(IN) :: LAND_USE_TYPE
- !... Local Variables
- !... Real
- REAL :: HF, LV, CQ4
- REAL :: RAH, RAW, ET, W2CG, CG, CT, SOILFLX, CPOT, THETAG
- REAL :: ZOL, ZOBOL, ZNTOL, Y, Y0, PSIH15, YNT
- REAL :: WGNUDG, W2NUDG, ALPH1, ALPH2, BET1, BET2, T1P5
- REAL :: CQ1, CQ2, CQ3, COEFFNP1, COEFFN, TSNEW, TSHLF, T2NEW
- REAL :: ROFF, WRMAX, PC, DWR, PNET, TENDWR, WRNEW
- REAL :: COF1, CFNP1WR, CFNWR, PG, FASS
- REAL :: TENDW2, W2NEW, W2HLF, W2REL, C1, C2, WEQ, CFNP1, CFN, WGNEW
- REAL :: ALN10, TMP1, TMP2, TMP3, AA, AB, TST, RBH, CTVEG
- REAL :: QST1,PHIH,PSIOB
- REAL :: T2NUD, T2NUDF
- REAL :: VAPPRS, QSBT, RH2MOD
- !... Parameters
- REAL :: ZOBS, GAMAH, BETAH, SIGF, BH, CT_SNOW
- REAL, PARAMETER :: CV = 8.0E-6 ! K-M2/J
- PARAMETER (ZOBS = 1.5) ! height for observed screen temp., (m)
- PARAMETER (BH = 15.7)
- PARAMETER (GAMAH = 16. ) !11.6)
- PARAMETER (BETAH = 5.0 ) !8.21)
- PARAMETER (SIGF = 0.5) ! rain interception see LSM (can be 0-1)
- !PARAMETER (CT_SNOW = 5.54E-5)
- ! New value of CT_SNOW calibrated using multilayer soil model where csnow=6.9E5 J/(m3 K)
- ! from NCAR CSM
- PARAMETER (CT_SNOW = 2.0E-5)
- ALN10 = ALOG(10.0)
- RADNET = SOLDN - (EMISSI *(STBOLT *TG **4 - LWDN)) ! NET RADIATION
- !--------------------------------------------------------------------
- CPOT= (100.0 / PSURF) ** ROVCP ! rcp is global constant(module_model_constants)
- THETAG = TG * CPOT
- ZOL = Z1/MOL
- ZOBOL = ZOBS/MOL
- ZNTOL = ZNT/MOL
- !-----------------------------------------------------------------------------------------
- IF (MOL .LT. 0.0) THEN
- Y = ( 1.0 - GAMAH * ZOL ) ** 0.5
- Y0 = ( 1.0 - GAMAH * ZOBOL ) ** 0.5
- YNT = ( 1.0 - GAMAH * ZNTOL ) ** 0.5
- PSIH15 = 2.0 * ALOG((Y + 1.0) / (Y0 + 1.0))
- PSIH = 2.0 * ALOG((Y + 1.0) / (YNT + 1.0))
- PSIOB = 2.0 * ALOG((Y0 + 1.0) / (YNT + 1.0))
- PHIH = 1.0 / Y
- ELSE
- IF((ZOL-ZNTOL).LE.1.0) THEN
- PSIH = -BETAH*(ZOL-ZNTOL)
- ELSE
- PSIH = 1.-BETAH-(ZOL-ZNTOL)
- ENDIF
- IF ((ZOBOL - ZNTOL) .LE. 1.0) THEN
- PSIOB = -BETAH * (ZOBOL - ZNTOL)
- ELSE
- PSIOB = 1.0 - BETAH - (ZOBOL - ZNTOL)
- ENDIF
- PSIH15 = PSIH - PSIOB
- IF(ZOL.LE.1.0) THEN
- PHIH = 1.0 + BETAH * ZOL
- ELSE
- PHIH = BETAH + ZOL
- ENDIF
- ENDIF
- !-----------------------------------------------------------------------------------------
- !-- ADD RA AND RB FOR HEAT AND MOISTURE
- !... RB FOR HEAT = 5 /UST
- !... RB FOR WATER VAPOR = 5*(0.599/0.709)^2/3 /UST = 4.503/UST
- RA=PR0* ( ALOG(Z1/ZNT) - PSIH )/(KARMAN*UST)
- RAH = RA + 5.0 / UST
- RAW = RA + 4.503 / UST
- !--------------------------------------------------------------------
- !-- COMPUTE MOISTURE FLUX
- CALL QFLUX( DENS1, QV1, TA1, SOLDN, RAW, QSS, &
- VEGFRC, ISNOW, ISTI, IFLAND, LAI, BETAP, &
- WG, W2, WR, &
- RSTMIN, WWLT, WFC, &
- EG, ER, ETR, CQ4, RS, FASS)
- !--------------------------------------------------------------------
- !--------------------------------------------------------------------
- !..........Total evaporation (ET)
- ET = EG + ER + ETR
- QST = -ET / (DENS1 * UST)
-
- LV = 2.83E6 !-- LATENT HEAT OF SUBLIMATION AT 0C FROM STULL(1988)
- IF (ISNOW .LT. 0.5.AND.TG.GT.273.15) &
- LV = (2.501 - 0.00237 * (TG - 273.15)) * 1.E6 !-- FROM STULL(1988) in J/KG
-
- IF (IFLAND .LT. 1.5 ) QFX = ET !-- Recaculate QFX over land to account for P-X LSM EG, ER and ETR
- LH = LV * QFX
- !-----------------------------------------------------------------------------------------
- !-----------------------------------------------------------------------------------------
- ! Surface sensible heat flux
- TST = (THETA1 - THETAG ) / (UST*RAH)
- HF = UST * TST
- HFX = AMAX1(-DENS1 * CPAIR * HF, -250.0) ! using -250. from MM5
- !-----------------------------------------------------------------------------------------
- !-----------------------------------------------------------------------------------------
- ! Compute the diagnosed 2m Q and T consistent with PX LSM
- QST1 = 0.5*(QST+QST12/PHIH)
- TA2 = (THETAG + TST * (PR0 / KARMAN * (ALOG(ZOBS / ZNT) - PSIOB)+5.))/CPOT
- QA2 = QV1 - QST1 * PR0/ KARMAN * (ALOG(Z1 / ZOBS) - PSIH15)
- IF ((LAND_USE_TYPE == 'NLCD') .OR. (LAND_USE_TYPE == 'USGS')) THEN
- IF (QA2.LE.0.0) QA2 = QV1
- END IF
- !-- Relative humidity
- VAPPRS = SVP1 * EXP(SVP2 * (TA2 - SVPT0) / (TA2 - SVP3))
- QSBT = EP_2 * VAPPRS / (PSURF - VAPPRS)
- RH2MOD = QA2 / QSBT
- !-----------------------------------------------------------------------------------------
- IF (IFLAND .LT. 1.5 ) THEN
- W2CG = AMAX1(W2,WWLT)
- CG = CGSAT * 1.0E-6 * (WSAT/ W2CG) ** &
- (0.5 * B / ALN10)
- CT = 1./((1-VEGFRC)/CG + VEGFRC/CV)
- CT = 1./(SNOW_FRA/CT_SNOW + (1-SNOW_FRA)/CT)
- CAPG = 1.0/CT
- SOILFLX = 2.0 * PI * TAUINV * (TG - T2)
- GRDFLX = SOILFLX / CT
- ENDIF
- !-----------------------------------------------------------------------------------------
- !--------------------------------------------------------------------
- !-- ASSIMILATION --- COMPUTE SOIL MOISTURE NUDGING FROM TA2 and RH2
- !-------COMPUTE ASSIMILATION COEFFICIENTS FOR ALL I
- IF (IFLAND .LT. 1.5) THEN
- IF (NUDGEX .EQ. 0) THEN !-- NO NUDGING CASE
- WGNUDG = 0.0
- W2NUDG = 0.0
- T2NUD = 0.0
- ELSE !-- NUDGING CASE
-
- CALL SMASS (ISTI, FASS, SOLDN, VEGFRC, RA, WWLT, WFC, &
- ALPH1, ALPH2, BET1, BET2, T2NUDF)
- !--COMPUTE MODEL RH
- WGNUDG = ALPH1 * (T2OBS - TA2) + ALPH2 * (RH2OBS - RH2MOD) * 100
- W2NUDG = BET1 * (T2OBS - TA2) + BET…
Large files files are truncated, but you can click here to view the full file