/wrfv2_fire/phys/module_sf_noahmplsm.F
FORTRAN Legacy | 8875 lines | 5630 code | 1321 blank | 1924 comment | 120 complexity | 9bdab95b1e3a0cc9ff0a5e1b9fd0b8d3 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 noahmp_globals
- ! Maybe most of these can be moved to a REDPRM use statement?
- use module_sf_noahlsm, only: &
- & SLCATS, &
- & LUCATS, &
- & CSOIL_DATA, &
- & BB, &
- & SATDK, &
- & SATDW, &
- & F11, &
- & SATPSI, &
- & QTZ, &
- & DRYSMC, &
- & MAXSMC, &
- & REFSMC, &
- & WLTSMC, &
- & RSTBL, &
- & RGLTBL, &
- & HSTBL, &
- & NROTBL, &
- & TOPT_DATA, &
- & RSMAX_DATA, &
- & ZBOT_DATA, &
- & CZIL_DATA, &
- & FRZK_DATA, &
- & SLOPE_DATA, &
- & REFDK_DATA, &
- & REFKDT_DATA
-
- implicit none
- ! ==================================================================================================
- !------------------------------------------------------------------------------------------!
- ! Physical Constants: !
- !------------------------------------------------------------------------------------------!
- REAL, PARAMETER :: GRAV = 9.80616 !acceleration due to gravity (m/s2)
- REAL, PARAMETER :: SB = 5.67E-08 !Stefan-Boltzmann constant (w/m2/k4)
- REAL, PARAMETER :: VKC = 0.40 !von Karman constant
- REAL, PARAMETER :: TFRZ = 273.16 !freezing/melting point (k)
- REAL, PARAMETER :: HSUB = 2.8440E06 !latent heat of sublimation (j/kg)
- REAL, PARAMETER :: HVAP = 2.5104E06 !latent heat of vaporization (j/kg)
- REAL, PARAMETER :: HFUS = 0.3336E06 !latent heat of fusion (j/kg)
- REAL, PARAMETER :: CWAT = 4.188E06 !specific heat capacity of water (j/m3/k)
- REAL, PARAMETER :: CICE = 2.094E06 !specific heat capacity of ice (j/m3/k)
- REAL, PARAMETER :: CPAIR = 1004.64 !heat capacity dry air at const pres (j/kg/k)
- REAL, PARAMETER :: TKWAT = 0.6 !thermal conductivity of water (w/m/k)
- REAL, PARAMETER :: TKICE = 2.2 !thermal conductivity of ice (w/m/k)
- REAL, PARAMETER :: TKAIR = 0.023 !thermal conductivity of air (w/m/k)
- REAL, PARAMETER :: RAIR = 287.04 !gas constant for dry air (j/kg/k)
- REAL, PARAMETER :: RW = 461.269 !gas constant for water vapor (j/kg/k)
- REAL, PARAMETER :: DENH2O = 1000. !density of water (kg/m3)
- REAL, PARAMETER :: DENICE = 917. !density of ice (kg/m3)
- !------------------------------------------------------------------------------------------!
- ! From the VEGPARM.TBL tables, as functions of vegetation category.
- !------------------------------------------------------------------------------------------!
- INTEGER :: NROOT !rooting depth [as the number of layers] ( Assigned in REDPRM )
- REAL :: RGL !parameter used in radiation stress function ( Assigned in REDPRM )
- REAL :: RSMIN !minimum Canopy Resistance [s/m] ( Assigned in REDPRM )
- REAL :: HS !parameter used in vapor pressure deficit function ( Assigned in REDPRM )
- REAL :: RSMAX !maximum stomatal resistance ( Assigned in REDPRM )
- REAL :: TOPT !optimum transpiration air temperature.
- !KWM CHARACTER(LEN=256) :: LUTYPE
- !KWM INTEGER :: LUCATS, BARE
- !KWM INTEGER, PARAMETER :: NLUS=50
- !KWM INTEGER, DIMENSION(1:NLUS) :: NROTBL
- !KWM REAL, DIMENSION(1:NLUS) :: RSTBL, RGLTBL, HSTBL
- !KWM REAL :: TOPT_DATA,RSMAX_DATA
- ! not further used in this version (niu):
- !KWM REAL, DIMENSION(1:NLUS) :: SNUPTBL, LAITBL, &
- !KWM ALBTBL, SHDTBL, MAXALB
- !KWM REAL :: CMCMAX_DATA,CFACTR_DATA,SBETA_DATA,&
- !KWM SALP_DATA ,SMLOW_DATA ,SMHIGH_DATA
- !KWM REAL, DIMENSION(NLUS) :: LAIMINTBL !KWM
- !KWM REAL, DIMENSION(NLUS) :: LAIMAXTBL !KWM
- !KWM REAL, DIMENSION(NLUS) :: EMISSMINTBL !KWM
- !KWM REAL, DIMENSION(NLUS) :: EMISSMAXTBL !KWM
- !KWM REAL, DIMENSION(NLUS) :: ALBEDOMINTBL !KWM
- !KWM REAL, DIMENSION(NLUS) :: ALBEDOMAXTBL !KWM
- !KWM REAL, DIMENSION(NLUS) :: Z0MINTBL !KWM
- !KWM REAL, DIMENSION(NLUS) :: Z0MAXTBL !KWM
- !------------------------------------------------------------------------------------------!
- ! From the SOILPARM.TBL tables, as functions of soil category.
- !------------------------------------------------------------------------------------------!
- REAL :: BEXP !B parameter ( Assigned in REDPRM )
- REAL :: SMCDRY !dry soil moisture threshold where direct evap from top
- !layer ends (volumetric) ( Assigned in REDPRM )
- REAL :: F1 !soil thermal diffusivity/conductivity coef ( Assigned in REDPRM )
- REAL :: SMCMAX !porosity, saturated value of soil moisture (volumetric)
- REAL :: SMCREF !reference soil moisture (field capacity) (volumetric) ( Assigned in REDPRM )
- REAL :: PSISAT !saturated soil matric potential ( Assigned in REDPRM )
- REAL :: DKSAT !saturated soil hydraulic conductivity ( Assigned in REDPRM )
- REAL :: DWSAT !saturated soil hydraulic diffusivity ( Assigned in REDPRM )
- REAL :: SMCWLT !wilting point soil moisture (volumetric) ( Assigned in REDPRM )
- REAL :: QUARTZ !soil quartz content ( Assigned in REDPRM )
- !KWM CHARACTER*4 SLTYPE
- !KWM INTEGER :: SLCATS
- !KWM INTEGER, PARAMETER :: NSLTYPE=30
- !KWM REAL, DIMENSION (1:NSLTYPE) :: BB,DRYSMC,F11, &
- !KWM MAXSMC, REFSMC,SATPSI,SATDK,SATDW, WLTSMC,QTZ
- !------------------------------------------------------------------------------------------!
- ! From the GENPARM.TBL file
- !------------------------------------------------------------------------------------------!
- REAL :: SLOPE !slope index (0 - 1) ( Assigned in REDPRM )
- REAL :: CSOIL !vol. soil heat capacity [j/m3/K] ( Assigned in REDPRM )
- REAL :: ZBOT !Depth (m) of lower boundary soil temperature ( Assigned in REDPRM )
- REAL :: CZIL !Calculate roughness length of heat ( Assigned in REDPRM )
- REAL :: KDT !used in compute maximum infiltration rate (in INFIL) ( Assigned in REDPRM )
- REAL :: FRZX !used in compute maximum infiltration rate (in INFIL) ( Assigned in REDPRM )
- ! LSM GENERAL PARAMETERS
- !KWM INTEGER :: SLPCATS
- !KWM INTEGER, PARAMETER :: NSLOPE=30
- !KWM REAL, DIMENSION (1:NSLOPE) :: SLOPE_DATA
- !KWM REAL :: FXEXP_DATA,CSOIL_DATA,REFDK_DATA , &
- !KWM REFKDT_DATA,FRZK_DATA ,ZBOT_DATA ,CZIL_DATA
- ! =====================================options for different schemes================================
- ! options for dynamic vegetation:
- ! 1 -> off (use table LAI; use FVEG = SHDFAC from input)
- ! 2 -> on (together with OPT_CRS = 1)
- ! 3 -> off (use table LAI; calculate FVEG)
- ! 4 -> off (use table LAI; use maximum vegetation fraction)
- INTEGER :: DVEG != 2 !
- ! options for canopy stomatal resistance
- ! 1-> Ball-Berry; 2->Jarvis
- INTEGER :: OPT_CRS != 1 !(must 1 when DVEG = 2)
- ! options for soil moisture factor for stomatal resistance
- ! 1-> Noah (soil moisture)
- ! 2-> CLM (matric potential)
- ! 3-> SSiB (matric potential)
- INTEGER :: OPT_BTR != 1 !(suggested 1)
- ! options for runoff and groundwater
- ! 1 -> TOPMODEL with groundwater (Niu et al. 2007 JGR) ;
- ! 2 -> TOPMODEL with an equilibrium water table (Niu et al. 2005 JGR) ;
- ! 3 -> original surface and subsurface runoff (free drainage)
- ! 4 -> BATS surface and subsurface runoff (free drainage)
- INTEGER :: OPT_RUN != 1 !(suggested 1)
- ! options for surface layer drag coeff (CH & CM)
- ! 1->M-O ; 2->original Noah (Chen97); 3->MYJ consistent; 4->YSU consistent.
- INTEGER :: OPT_SFC != 1 !(1 or 2 or 3 or 4)
- ! options for supercooled liquid water (or ice fraction)
- ! 1-> no iteration (Niu and Yang, 2006 JHM); 2: Koren's iteration
- INTEGER :: OPT_FRZ != 1 !(1 or 2)
- ! options for frozen soil permeability
- ! 1 -> linear effects, more permeable (Niu and Yang, 2006, JHM)
- ! 2 -> nonlinear effects, less permeable (old)
- INTEGER :: OPT_INF != 1 !(suggested 1)
- ! options for radiation transfer
- ! 1 -> modified two-stream (gap = F(solar angle, 3D structure ...)<1-FVEG)
- ! 2 -> two-stream applied to grid-cell (gap = 0)
- ! 3 -> two-stream applied to vegetated fraction (gap=1-FVEG)
- INTEGER :: OPT_RAD != 1 !(suggested 1)
- ! options for ground snow surface albedo
- ! 1-> BATS; 2 -> CLASS
- INTEGER :: OPT_ALB != 2 !(suggested 2)
- ! options for partitioning precipitation into rainfall & snowfall
- ! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP<TFRZ+2.2 ; 3-> SFCTMP<TFRZ
- INTEGER :: OPT_SNF != 1 !(suggested 1)
- ! options for lower boundary condition of soil temperature
- ! 1 -> zero heat flux from bottom (ZBOT and TBOT not used)
- ! 2 -> TBOT at ZBOT (8m) read from a file (original Noah)
- INTEGER :: OPT_TBOT != 2 !(suggested 2)
- ! options for snow/soil temperature time scheme (only layer 1)
- ! 1 -> semi-implicit; 2 -> full implicit (original Noah)
- INTEGER :: OPT_STC != 1 !(suggested 1)
- ! ==================================================================================================
- ! runoff parameters used for SIMTOP and SIMGM:
- REAL, PARAMETER :: TIMEAN = 10.5 !gridcell mean topgraphic index (global mean)
- REAL, PARAMETER :: FSATMX = 0.38 !maximum surface saturated fraction (global mean)
- ! adjustable parameters for snow processes
- REAL, PARAMETER :: M = 1.0 ! 2.50 !melting factor (-)
- REAL, PARAMETER :: Z0SNO = 0.002 !snow surface roughness length (m) (0.002)
- REAL, PARAMETER :: SSI = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03)
- REAL, PARAMETER :: SWEMX = 1.00 !new snow mass to fully cover old snow (mm)
- !equivalent to 10mm depth (density = 100 kg/m3)
- ! NOTES: things to add or improve
- ! 1. lake model: explicit representation of lake water storage, sunlight through lake
- ! with different purity, turbulent mixing of surface laker water, snow on frozen lake, etc.
- ! 2. shallow snow wihtout a layer: melting energy
- ! 3. urban model to be added.
- ! 4. irrigation
- !------------------------------------------------------------------------------------------!
- END MODULE NOAHMP_GLOBALS
- !------------------------------------------------------------------------------------------!
- !------------------------------------------------------------------------------------------!
- MODULE NOAHMP_VEG_PARAMETERS
- IMPLICIT NONE
- INTEGER, PARAMETER :: MAX_VEG_PARAMS = 33
- INTEGER, PARAMETER :: MVT = 27
- INTEGER, PARAMETER :: MBAND = 2
- INTEGER, PRIVATE :: ISURBAN
- INTEGER :: ISWATER
- INTEGER :: ISBARREN
- INTEGER :: ISSNOW
- INTEGER :: EBLFOREST
- REAL :: CH2OP(MVT) !maximum intercepted h2o per unit lai+sai (mm)
- REAL :: DLEAF(MVT) !characteristic leaf dimension (m)
- REAL :: Z0MVT(MVT) !momentum roughness length (m)
- REAL :: HVT(MVT) !top of canopy (m)
- REAL :: HVB(MVT) !bottom of canopy (m)
- REAL :: DEN(MVT) !tree density (no. of trunks per m2)
- REAL :: RC(MVT) !tree crown radius (m)
- REAL :: SAIM(MVT,12) !monthly stem area index, one-sided
- REAL :: LAIM(MVT,12) !monthly leaf area index, one-sided
- REAL :: SLA(MVT) !single-side leaf area per Kg [m2/kg]
- REAL :: DILEFC(MVT) !coeficient for leaf stress death [1/s]
- REAL :: DILEFW(MVT) !coeficient for leaf stress death [1/s]
- REAL :: FRAGR(MVT) !fraction of growth respiration !original was 0.3
- REAL :: LTOVRC(MVT) !leaf turnover [1/s]
- REAL :: C3PSN(MVT) !photosynthetic pathway: 0. = c4, 1. = c3
- REAL :: KC25(MVT) !co2 michaelis-menten constant at 25c (pa)
- REAL :: AKC(MVT) !q10 for kc25
- REAL :: KO25(MVT) !o2 michaelis-menten constant at 25c (pa)
- REAL :: AKO(MVT) !q10 for ko25
- REAL :: VCMX25(MVT) !maximum rate of carboxylation at 25c (umol co2/m**2/s)
- REAL :: AVCMX(MVT) !q10 for vcmx25
- REAL :: BP(MVT) !minimum leaf conductance (umol/m**2/s)
- REAL :: MP(MVT) !slope of conductance-to-photosynthesis relationship
- REAL :: QE25(MVT) !quantum efficiency at 25c (umol co2 / umol photon)
- REAL :: AQE(MVT) !q10 for qe25
- REAL :: RMF25(MVT) !leaf maintenance respiration at 25c (umol co2/m**2/s)
- REAL :: RMS25(MVT) !stem maintenance respiration at 25c (umol co2/kg bio/s)
- REAL :: RMR25(MVT) !root maintenance respiration at 25c (umol co2/kg bio/s)
- REAL :: ARM(MVT) !q10 for maintenance respiration
- REAL :: FOLNMX(MVT) !foliage nitrogen concentration when f(n)=1 (%)
- REAL :: TMIN(MVT) !minimum temperature for photosynthesis (k)
- REAL :: XL(MVT) !leaf/stem orientation index
- REAL :: RHOL(MVT,MBAND) !leaf reflectance: 1=vis, 2=nir
- REAL :: RHOS(MVT,MBAND) !stem reflectance: 1=vis, 2=nir
- REAL :: TAUL(MVT,MBAND) !leaf transmittance: 1=vis, 2=nir
- REAL :: TAUS(MVT,MBAND) !stem transmittance: 1=vis, 2=nir
- REAL :: MRP(MVT) !microbial respiration parameter (umol co2 /kg c/ s)
- REAL :: CWPVT(MVT) !empirical canopy wind parameter
- REAL :: WRRAT(MVT) !wood to non-wood ratio
- REAL :: WDPOOL(MVT) !wood pool (switch 1 or 0) depending on woody or not [-]
- REAL :: TDLEF(MVT) !characteristic T for leaf freezing [K]
- INTEGER :: IK,IM
- REAL :: TMP10(MVT*MBAND)
- REAL :: TMP11(MVT*MBAND)
- REAL :: TMP12(MVT*MBAND)
- REAL :: TMP13(MVT*MBAND)
- REAL :: TMP14(MVT*12)
- REAL :: TMP15(MVT*12)
- REAL :: TMP16(MVT*5)
- real slarea(MVT)
- real eps(MVT,5)
- CONTAINS
- subroutine read_mp_veg_parameters(DATASET_IDENTIFIER)
- implicit none
- character(len=*), intent(in) :: DATASET_IDENTIFIER
- integer :: ierr
- ! Temporary arrays used in reshaping namelist arrays
- REAL :: TMP10(MVT*MBAND)
- REAL :: TMP11(MVT*MBAND)
- REAL :: TMP12(MVT*MBAND)
- REAL :: TMP13(MVT*MBAND)
- REAL :: TMP14(MVT*12)
- REAL :: TMP15(MVT*12)
- REAL :: TMP16(MVT*5)
- integer :: NVEG
- character(len=256) :: VEG_DATASET_DESCRIPTION
- NAMELIST / noah_mp_usgs_veg_categories / VEG_DATASET_DESCRIPTION, NVEG
- NAMELIST / noah_mp_usgs_parameters / ISURBAN, ISWATER, ISBARREN, ISSNOW, EBLFOREST, &
- CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, RHOL, RHOS, TAUL, TAUS, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, &
- LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, FOLNMX, WDPOOL, WRRAT, MRP, &
- SAIM, LAIM, SLAREA, EPS
- NAMELIST / noah_mp_modis_veg_categories / VEG_DATASET_DESCRIPTION, NVEG
- NAMELIST / noah_mp_modis_parameters / ISURBAN, ISWATER, ISBARREN, ISSNOW, EBLFOREST, &
- CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, RHOL, RHOS, TAUL, TAUS, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, &
- LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, FOLNMX, WDPOOL, WRRAT, MRP, &
- SAIM, LAIM, SLAREA, EPS
- ! Initialize our variables to bad values, so that if the namelist read fails, we come to a screeching halt as soon as we try to use anything.
- CH2OP = -1.E36
- DLEAF = -1.E36
- Z0MVT = -1.E36
- HVT = -1.E36
- HVB = -1.E36
- DEN = -1.E36
- RC = -1.E36
- RHOL = -1.E36
- RHOS = -1.E36
- TAUL = -1.E36
- TAUS = -1.E36
- XL = -1.E36
- CWPVT = -1.E36
- C3PSN = -1.E36
- KC25 = -1.E36
- AKC = -1.E36
- KO25 = -1.E36
- AKO = -1.E36
- AVCMX = -1.E36
- AQE = -1.E36
- LTOVRC = -1.E36
- DILEFC = -1.E36
- DILEFW = -1.E36
- RMF25 = -1.E36
- SLA = -1.E36
- FRAGR = -1.E36
- TMIN = -1.E36
- VCMX25 = -1.E36
- TDLEF = -1.E36
- BP = -1.E36
- MP = -1.E36
- QE25 = -1.E36
- RMS25 = -1.E36
- RMR25 = -1.E36
- ARM = -1.E36
- FOLNMX = -1.E36
- WDPOOL = -1.E36
- WRRAT = -1.E36
- MRP = -1.E36
- SAIM = -1.E36
- LAIM = -1.E36
- SLAREA = -1.E36
- EPS = -1.E36
- open(15, file="MPTABLE.TBL", status='old', form='formatted', action='read', iostat=ierr)
- if (ierr /= 0) then
- write(*,'("****** Error ******************************************************")')
- write(*,'("Cannot find file MPTABLE.TBL")')
- write(*,'("STOP")')
- write(*,'("*******************************************************************")')
- call wrf_error_fatal("STOP in Noah-MP read_mp_veg_parameters")
- endif
- if ( trim(DATASET_IDENTIFIER) == "USGS" ) then
- read(15,noah_mp_usgs_veg_categories)
- read(15,noah_mp_usgs_parameters)
- else if ( trim(DATASET_IDENTIFIER) == "MODIFIED_IGBP_MODIS_NOAH" ) then
- read(15,noah_mp_modis_veg_categories)
- read(15,noah_mp_modis_parameters)
- else
- write(*,'("Unrecognized DATASET_IDENTIFIER in subroutine READ_MP_VEG_PARAMETERS")')
- write(*,'("DATASET_IDENTIFIER = ''", A, "''")') trim(DATASET_IDENTIFIER)
- call wrf_error_fatal("STOP in Noah-MP read_mp_veg_parameters")
- endif
- close(15)
- ! Problem. Namelist reading of 2-d arrays doesn't work well when the arrays are declared with larger dimension than the
- ! variables in the provided namelist. So we need to reshape the 2-d arrays after we've read them.
- if ( MVT > NVEG ) then
- !
- ! Reshape the 2-d arrays:
- !
- TMP10 = reshape( RHOL, (/ MVT*size(RHOL,2) /))
- TMP11 = reshape( RHOS, (/ MVT*size(RHOS,2) /))
- TMP12 = reshape( TAUL, (/ MVT*size(TAUL,2) /))
- TMP13 = reshape( TAUS, (/ MVT*size(TAUS,2) /))
- TMP14 = reshape( SAIM, (/ MVT*size(SAIM,2) /))
- TMP15 = reshape( LAIM, (/ MVT*size(LAIM,2) /))
- TMP16 = reshape( EPS, (/ MVT*size(EPS ,2) /))
- RHOL(1:NVEG,:) = reshape( TMP10, (/ NVEG, size(RHOL,2) /))
- RHOS(1:NVEG,:) = reshape( TMP11, (/ NVEG, size(RHOS,2) /))
- TAUL(1:NVEG,:) = reshape( TMP12, (/ NVEG, size(TAUL,2) /))
- TAUS(1:NVEG,:) = reshape( TMP13, (/ NVEG, size(TAUS,2) /))
- SAIM(1:NVEG,:) = reshape( TMP14, (/ NVEG, size(SAIM,2) /))
- LAIM(1:NVEG,:) = reshape( TMP15, (/ NVEG, size(LAIM,2) /))
- EPS(1:NVEG,:) = reshape( TMP16, (/ NVEG, size(EPS,2) /))
- RHOL(NVEG+1:MVT,:) = -1.E36
- RHOS(NVEG+1:MVT,:) = -1.E36
- TAUL(NVEG+1:MVT,:) = -1.E36
- TAUS(NVEG+1:MVT,:) = -1.E36
- SAIM(NVEG+1:MVT,:) = -1.E36
- LAIM(NVEG+1:MVT,:) = -1.E36
- EPS( NVEG+1:MVT,:) = -1.E36
- endif
- end subroutine read_mp_veg_parameters
- END MODULE NOAHMP_VEG_PARAMETERS
- ! ==================================================================================================
- ! ==================================================================================================
- MODULE NOAHMP_RAD_PARAMETERS
- IMPLICIT NONE
-
- INTEGER I ! loop index
- INTEGER, PARAMETER :: MSC = 9
- INTEGER, PARAMETER :: MBAND = 2
- REAL :: ALBSAT(MSC,MBAND) !saturated soil albedos: 1=vis, 2=nir
- REAL :: ALBDRY(MSC,MBAND) !dry soil albedos: 1=vis, 2=nir
- REAL :: ALBICE(MBAND) !albedo land ice: 1=vis, 2=nir
- REAL :: ALBLAK(MBAND) !albedo frozen lakes: 1=vis, 2=nir
- REAL :: OMEGAS(MBAND) !two-stream parameter omega for snow
- REAL :: BETADS !two-stream parameter betad for snow
- REAL :: BETAIS !two-stream parameter betad for snow
- REAL :: EG(2) !emissivity
- ! saturated soil albedos: 1=vis, 2=nir
- DATA(ALBSAT(I,1),I=1,8)/0.15,0.11,0.10,0.09,0.08,0.07,0.06,0.05/
- DATA(ALBSAT(I,2),I=1,8)/0.30,0.22,0.20,0.18,0.16,0.14,0.12,0.10/
- ! dry soil albedos: 1=vis, 2=nir
- DATA(ALBDRY(I,1),I=1,8)/0.27,0.22,0.20,0.18,0.16,0.14,0.12,0.10/
- DATA(ALBDRY(I,2),I=1,8)/0.54,0.44,0.40,0.36,0.32,0.28,0.24,0.20/
- ! albedo land ice: 1=vis, 2=nir
- DATA (ALBICE(I),I=1,MBAND) /0.80, 0.55/
- ! albedo frozen lakes: 1=vis, 2=nir
- DATA (ALBLAK(I),I=1,MBAND) /0.60, 0.40/
- ! omega,betad,betai for snow
- DATA (OMEGAS(I),I=1,MBAND) /0.8, 0.4/
- DATA BETADS, BETAIS /0.5, 0.5/
- ! emissivity ground surface
- DATA EG /0.97, 0.98/ ! 1-soil;2-lake
- END MODULE NOAHMP_RAD_PARAMETERS
- ! ==================================================================================================
- MODULE NOAHMP_ROUTINES
- USE NOAHMP_GLOBALS
- IMPLICIT NONE
- public :: noahmp_options
- public :: NOAHMP_SFLX
- public :: REDPRM
- public :: FRH2O
- private :: ATM
- private :: PHENOLOGY
- private :: ENERGY
- private :: THERMOPROP
- private :: CSNOW
- private :: TDFCND
- private :: RADIATION
- private :: ALBEDO
- private :: SNOW_AGE
- private :: SNOWALB_BATS
- private :: SNOWALB_CLASS
- private :: GROUNDALB
- private :: TWOSTREAM
- private :: SURRAD
- private :: VEGE_FLUX
- private :: SFCDIF1
- private :: SFCDIF2
- private :: STOMATA
- private :: CANRES
- private :: ESAT
- private :: RAGRB
- private :: BARE_FLUX
- private :: TSNOSOI
- private :: HRT
- private :: HSTEP
- private :: ROSR12
- private :: PHASECHANGE
- private :: WATER
- private :: CANWATER
- private :: SNOWWATER
- private :: SNOWFALL
- private :: COMBINE
- private :: DIVIDE
- private :: COMBO
- private :: COMPACT
- private :: SNOWH2O
- private :: SOILWATER
- private :: ZWTEQ
- private :: INFIL
- private :: SRT
- private :: WDFCND1
- private :: WDFCND2
- ! private :: INFIL
- private :: SSTEP
- private :: GROUNDWATER
- private :: CARBON
- private :: CO2FLUX
- ! private :: BVOCFLUX
- ! private :: CH4FLUX
- private :: ERROR
- contains
- !
- ! ==================================================================================================
- SUBROUTINE NOAHMP_SFLX (&
- & ILOC , JLOC , LAT , YEARLEN , JULIAN , COSZ , & ! IN : Time/Space-related
- & DT , DX , DZ8W , NSOIL , ZSOIL , NSNOW , & ! IN : Model configuration
- & SHDFAC , SHDMAX , VEGTYP , ISURBAN , ICE , IST , & ! IN : Vegetation/Soil characteristics
- & ISC , & ! IN : Vegetation/Soil characteristics
- & IZ0TLND , & ! IN : User options
- & SFCTMP , SFCPRS , PSFC , UU , VV , Q2 , & ! IN : Forcing
- & QC , SOLDN , LWDN , PRCP , TBOT , CO2AIR , & ! IN : Forcing
- & O2AIR , FOLN , FICEOLD , PBLH , & ! IN : Forcing
- & ZLVL , ALBOLD , SNEQVO , & ! IN/OUT :
- & STC , SH2O , SMC , TAH , EAH , FWET , & ! IN/OUT :
- & CANLIQ , CANICE , TV , TG , QSFC , QSNOW , & ! IN/OUT :
- & ISNOW , ZSNSO , SNOWH , SNEQV , SNICE , SNLIQ , & ! IN/OUT :
- & ZWT , WA , WT , WSLAKE , LFMASS , RTMASS , & ! IN/OUT :
- & STMASS , WOOD , STBLCP , FASTCP , LAI , SAI , & ! IN/OUT :
- & CM , CH , CHSTAR , & ! IN/OUT :
- & FSA , FSR , FIRA , FSH , SSOIL , FCEV , & ! OUT :
- & FGEV , FCTR , ECAN , ETRAN , EDIR , TRAD , & ! OUT :
- & TS , TGB , TGV , T2MV , T2MB , TSTAR , & ! OUT :
- & Q1 , Q2V , Q2B , RUNSRF , RUNSUB , APAR , & ! OUT :
- & PSN , SAV , SAG , FSNO , NEE , GPP , & ! OUT :
- & NPP , FVEG , ALBEDO , QMELT , PONDING , PONDING1, & ! OUT :
- & PONDING2, RSSUN , RSSHA , BGAP , WGAP , GAP , & ! OUT :
- & ERRWAT , CHV , CHB , EMISSI) ! OUT :
- ! --------------------------------------------------------------------------------------------------
- ! Initial code: Guo-Yue Niu, Oct. 2007
- ! --------------------------------------------------------------------------------------------------
- USE NOAHMP_VEG_PARAMETERS
- USE NOAHMP_RAD_PARAMETERS
- ! --------------------------------------------------------------------------------------------------
- implicit none
- ! --------------------------------------------------------------------------------------------------
- ! input
- INTEGER , INTENT(IN) :: ICE !ice (ice = 1)
- INTEGER , INTENT(IN) :: IST !surface type 1->soil; 2->lake
- INTEGER , INTENT(IN) :: VEGTYP !vegetation type
- INTEGER , INTENT(IN) :: ISC !soil color type (1-lighest; 8-darkest)
- INTEGER , INTENT(IN) :: NSNOW !maximum no. of snow layers
- INTEGER , INTENT(IN) :: NSOIL !no. of soil layers
- INTEGER , INTENT(IN) :: ILOC !grid index
- INTEGER , INTENT(IN) :: JLOC !grid index
- REAL , INTENT(IN) :: DT !time step [sec]
- REAL, DIMENSION( 1:NSOIL), INTENT(IN) :: ZSOIL !layer-bottom depth from soil surf (m)
- REAL , INTENT(IN) :: Q2 !mixing ratio (kg/kg) lowest model layer
- REAL , INTENT(IN) :: SFCTMP !surface air temperature [K]
- REAL , INTENT(IN) :: UU !wind speed in eastward dir (m/s)
- REAL , INTENT(IN) :: VV !wind speed in northward dir (m/s)
- REAL , INTENT(IN) :: SOLDN !downward shortwave radiation (w/m2)
- REAL , INTENT(IN) :: PRCP !precipitation rate (kg m-2 s-1)
- REAL , INTENT(IN) :: LWDN !downward longwave radiation (w/m2)
- REAL , INTENT(IN) :: SFCPRS !pressure (pa)
- REAL , INTENT(INOUT) :: ZLVL !reference height (m)
- REAL , INTENT(IN) :: COSZ !cosine solar zenith angle [0-1]
- REAL , INTENT(IN) :: TBOT !bottom condition for soil temp. [K]
- REAL , INTENT(IN) :: FOLN !foliage nitrogen (%) [1-saturated]
- REAL , INTENT(IN) :: SHDFAC !green vegetation fraction [0.0-1.0]
- INTEGER , INTENT(IN) :: YEARLEN!Number of days in the particular year.
- REAL , INTENT(IN) :: JULIAN !Julian day of year (floating point)
- REAL , INTENT(IN) :: LAT !latitude (radians)
- REAL, DIMENSION(-NSNOW+1: 0), INTENT(IN) :: FICEOLD!ice fraction at last timestep
- !jref:start; in
- INTEGER , INTENT(IN) :: ISURBAN
- INTEGER , INTENT(IN) :: IZ0TLND
- REAL , INTENT(IN) :: QC !cloud water mixing ratio
- REAL , INTENT(IN) :: PBLH !planetary boundary layer height
- REAL , INTENT(INOUT) :: QSFC !mixing ratio at lowest model layer
- REAL , INTENT(IN) :: PSFC !pressure at lowest model layer
- REAL , INTENT(IN) :: DZ8W !thickness of lowest layer
- REAL , INTENT(IN) :: DX
- REAL , INTENT(IN) :: SHDMAX !yearly max vegetation fraction
- !jref:end
- ! input/output : need arbitary intial values
- REAL , INTENT(INOUT) :: QSNOW !snowfall [mm/s]
- REAL , INTENT(INOUT) :: FWET !wetted or snowed fraction of canopy (-)
- REAL , INTENT(INOUT) :: SNEQVO !snow mass at last time step (mm)
- REAL , INTENT(INOUT) :: EAH !canopy air vapor pressure (pa)
- REAL , INTENT(INOUT) :: TAH !canopy air tmeperature (k)
- REAL , INTENT(INOUT) :: ALBOLD !snow albedo at last time step (CLASS type)
- REAL , INTENT(INOUT) :: CM !momentum drag coefficient
- REAL , INTENT(INOUT) :: CH !sensible heat exchange coefficient
- ! prognostic variables
- INTEGER , INTENT(INOUT) :: ISNOW !actual no. of snow layers [-]
- REAL , INTENT(INOUT) :: CANLIQ !intercepted liquid water (mm)
- REAL , INTENT(INOUT) :: CANICE !intercepted ice mass (mm)
- REAL , INTENT(INOUT) :: SNEQV !snow water eqv. [mm]
- REAL, DIMENSION( 1:NSOIL), INTENT(INOUT) :: SMC !soil moisture (ice + liq.) [m3/m3]
- REAL, DIMENSION(-NSNOW+1:NSOIL), INTENT(INOUT) :: ZSNSO !layer-bottom depth from snow surf [m]
- REAL , INTENT(INOUT) :: SNOWH !snow height [m]
- REAL, DIMENSION(-NSNOW+1: 0), INTENT(INOUT) :: SNICE !snow layer ice [mm]
- REAL, DIMENSION(-NSNOW+1: 0), INTENT(INOUT) :: SNLIQ !snow layer liquid water [mm]
- REAL , INTENT(INOUT) :: TV !vegetation temperature (k)
- REAL , INTENT(INOUT) :: TG !ground temperature (k)
- REAL, DIMENSION(-NSNOW+1:NSOIL), INTENT(INOUT) :: STC !snow/soil temperature [k]
- REAL, DIMENSION( 1:NSOIL), INTENT(INOUT) :: SH2O !liquid soil moisture [m3/m3]
- REAL , INTENT(INOUT) :: ZWT !depth to water table [m]
- REAL , INTENT(INOUT) :: WA !water storage in aquifer [mm]
- REAL , INTENT(INOUT) :: WT !water in aquifer&saturated soil [mm]
- REAL , INTENT(INOUT) :: WSLAKE !lake water storage (can be neg.) (mm)
- ! output
- REAL , INTENT(OUT) :: FSA !total absorbed solar radiation (w/m2)
- REAL , INTENT(OUT) :: FSR !total reflected solar radiation (w/m2)
- REAL , INTENT(OUT) :: FIRA !total net LW rad (w/m2) [+ to atm]
- REAL , INTENT(OUT) :: FSH !total sensible heat (w/m2) [+ to atm]
- REAL , INTENT(OUT) :: FCEV !canopy evap heat (w/m2) [+ to atm]
- REAL , INTENT(OUT) :: FGEV !ground evap heat (w/m2) [+ to atm]
- REAL , INTENT(OUT) :: FCTR !transpiration heat (w/m2) [+ to atm]
- REAL , INTENT(OUT) :: SSOIL !ground heat flux (w/m2) [+ to soil]
- REAL , INTENT(OUT) :: TRAD !surface radiative temperature (k)
- REAL , INTENT(OUT) :: TS !surface temperature (k)
- REAL , INTENT(OUT) :: ECAN !evaporation of intercepted water (mm/s)
- REAL , INTENT(OUT) :: ETRAN !transpiration rate (mm/s)
- REAL , INTENT(OUT) :: EDIR !soil surface evaporation rate (mm/s]
- REAL , INTENT(OUT) :: RUNSRF !surface runoff [mm/s]
- REAL , INTENT(OUT) :: RUNSUB !baseflow (saturation excess) [mm/s]
- REAL , INTENT(OUT) :: PSN !total photosynthesis (umol co2/m2/s) [+]
- REAL , INTENT(OUT) :: APAR !photosyn active energy by canopy (w/m2)
- REAL , INTENT(OUT) :: SAV !solar rad absorbed by veg. (w/m2)
- REAL , INTENT(OUT) :: SAG !solar rad absorbed by ground (w/m2)
- REAL , INTENT(OUT) :: FSNO !snow cover fraction on the ground (-)
- REAL , INTENT(OUT) :: FVEG !green vegetation fraction [0.0-1.0]
- REAL , INTENT(OUT) :: ALBEDO !surface albedo [-]
- REAL , INTENT(OUT) :: ERRWAT !water error [kg m{-2}]
- REAL , INTENT(OUT) :: QMELT !snowmelt [mm/s]
- REAL , INTENT(OUT) :: PONDING!surface ponding [mm]
- REAL , INTENT(OUT) :: PONDING1!surface ponding [mm]
- REAL , INTENT(OUT) :: PONDING2!surface ponding [mm]
- !jref:start; output
- REAL , INTENT(OUT) :: CHSTAR !effective exchange coefficient
- REAL , INTENT(OUT) :: TSTAR !effective skin temperature
- REAL , INTENT(OUT) :: T2MV !2-m air temperature over vegetated part [k]
- REAL , INTENT(OUT) :: T2MB !2-m air temperature over bare ground part [k]
- REAL, INTENT(OUT) :: RSSUN !sunlit leaf stomatal resistance (s/m)
- REAL, INTENT(OUT) :: RSSHA !shaded leaf stomatal resistance (s/m)
- REAL, INTENT(OUT) :: BGAP
- REAL, INTENT(OUT) :: WGAP
- REAL, INTENT(OUT) :: GAP
- REAL, INTENT(OUT) :: TGV
- REAL, INTENT(OUT) :: TGB
- REAL, INTENT(OUT) :: Q1
- REAL, INTENT(OUT) :: EMISSI
- !jref:end
- ! local
- INTEGER :: IZ !do-loop index
- INTEGER, DIMENSION(-NSNOW+1:NSOIL) :: IMELT !phase change index [1-melt; 2-freeze]
- REAL :: CMC !intercepted water (CANICE+CANLIQ) (mm)
- REAL :: TAUX !wind stress: e-w (n/m2)
- REAL :: TAUY !wind stress: n-s (n/m2)
- REAL :: RHOAIR !density air (kg/m3)
- ! REAL, DIMENSION( 1: 5) :: VOCFLX !voc fluxes [ug C m-2 h-1]
- REAL, DIMENSION(-NSNOW+1:NSOIL) :: DZSNSO !snow/soil layer thickness [m]
- REAL :: THAIR !potential temperature (k)
- REAL :: QAIR !specific humidity (kg/kg) (q2/(1+q2))
- REAL :: EAIR !vapor pressure air (pa)
- REAL, DIMENSION( 1: 2) :: SOLAD !incoming direct solar rad (w/m2)
- REAL, DIMENSION( 1: 2) :: SOLAI !incoming diffuse solar rad (w/m2)
- REAL :: QPRECC !convective precipitation (mm/s)
- REAL :: QPRECL !large-scale precipitation (mm/s)
- REAL :: IGS !growing season index (0=off, 1=on)
- REAL :: ELAI !leaf area index, after burying by snow
- REAL :: ESAI !stem area index, after burying by snow
- REAL :: BEVAP !soil water evaporation factor (0 - 1)
- REAL, DIMENSION( 1:NSOIL) :: BTRANI !Soil water transpiration factor (0 - 1)
- REAL :: BTRAN !soil water transpiration factor (0 - 1)
- REAL :: HTOP !top of canopy layer (m)
- REAL :: QIN !groundwater recharge [mm/s]
- REAL :: QDIS !groundwater discharge [mm/s]
- REAL, DIMENSION( 1:NSOIL) :: SICE !soil ice content (m3/m3)
- REAL, DIMENSION(-NSNOW+1: 0) :: SNICEV !partial volume ice of snow [m3/m3]
- REAL, DIMENSION(-NSNOW+1: 0) :: SNLIQV !partial volume liq of snow [m3/m3]
- REAL, DIMENSION(-NSNOW+1: 0) :: EPORE !effective porosity [m3/m3]
- REAL :: TOTSC !total soil carbon (g/m2)
- REAL :: TOTLB !total living carbon (g/m2)
- REAL :: T2M !2-meter air temperature (k)
- REAL :: QDEW !ground surface dew rate [mm/s]
- REAL :: QVAP !ground surface evap. rate [mm/s]
- REAL :: LATHEA !latent heat [j/kg]
- REAL :: SWDOWN !downward solar [w/m2]
- REAL :: BEG_WB !water storage at begin of a step [mm]
- !jref:start
- REAL :: FSRV
- REAL :: FSRG
- REAL,INTENT(OUT) :: Q2V
- REAL,INTENT(OUT) :: Q2B
- REAL :: Q2E
- REAL :: QFX
- REAL,INTENT(OUT) :: CHV !sensible heat exchange coefficient over vegetated fraction
- REAL,INTENT(OUT) :: CHB !sensible heat exchange coefficient over bare-ground
- !jref:end
- ! carbon
- ! inputs
- REAL , INTENT(IN) :: CO2AIR !atmospheric co2 concentration (pa)
- REAL , INTENT(IN) :: O2AIR !atmospheric o2 concentration (pa)
- ! inputs and outputs : prognostic variables
- REAL , INTENT(INOUT) :: LFMASS !leaf mass [g/m2]
- REAL , INTENT(INOUT) :: RTMASS !mass of fine roots [g/m2]
- REAL , INTENT(INOUT) :: STMASS !stem mass [g/m2]
- REAL , INTENT(INOUT) :: WOOD !mass of wood (incl. woody roots) [g/m2]
- REAL , INTENT(INOUT) :: STBLCP !stable carbon in deep soil [g/m2]
- REAL , INTENT(INOUT) :: FASTCP !short-lived carbon, shallow soil [g/m2]
- REAL , INTENT(INOUT) :: LAI !leaf area index [-]
- REAL , INTENT(INOUT) :: SAI !stem area index [-]
- ! outputs
- REAL , INTENT(OUT) :: NEE !net ecosys exchange (g/m2/s CO2)
- REAL , INTENT(OUT) :: GPP !net instantaneous assimilation [g/m2/s C]
- REAL , INTENT(OUT) :: NPP !net primary productivity [g/m2/s C]
- REAL :: AUTORS !net ecosystem respiration (g/m2/s C)
- REAL :: HETERS !organic respiration (g/m2/s C)
- REAL :: TROOT !root-zone averaged temperature (k)
- ! INTENT (OUT) variables need to be assigned a value. These normally get assigned values
- ! only if DVEG == 2.
- nee = 0.0
- npp = 0.0
- gpp = 0.0
- ! --------------------------------------------------------------------------------------------------
- ! re-process atmospheric forcing
- CALL ATM (SFCPRS ,SFCTMP ,Q2 ,PRCP ,SOLDN ,COSZ ,THAIR , &
- QAIR ,EAIR ,RHOAIR ,QPRECC ,QPRECL ,SOLAD ,SOLAI , &
- SWDOWN )
- ! snow/soil layer thickness (m)
- DO IZ = ISNOW+1, NSOIL
- IF(IZ == ISNOW+1) THEN
- DZSNSO(IZ) = - ZSNSO(IZ)
- ELSE
- DZSNSO(IZ) = ZSNSO(IZ-1) - ZSNSO(IZ)
- END IF
- END DO
- ! root-zone temperature
- TROOT = 0.
- DO IZ=1,NROOT
- TROOT = TROOT + STC(IZ)*DZSNSO(IZ)/(-ZSOIL(NROOT))
- ENDDO
- ! total water storage for water balance check
-
- IF(IST == 1) THEN
- BEG_WB = CANLIQ + CANICE + SNEQV + WA
- DO IZ = 1,NSOIL
- BEG_WB = BEG_WB + SMC(IZ) * DZSNSO(IZ) * 1000.
- END DO
- END IF
- ! vegetation phenology
- CALL PHENOLOGY (VEGTYP , SNOWH , TV , LAT , YEARLEN , JULIAN , & !in
- LAI , SAI , TROOT , HTOP , ELAI , ESAI ,IGS)
- !input GVF should be consistent with LAI
- IF(DVEG == 1) THEN
- FVEG = SHDFAC
- IF(FVEG <= 0.05) FVEG = 0.05
- ELSE IF (DVEG == 2 .or. DVEG == 3) THEN
- FVEG = 1.-EXP(-0.52*(LAI+SAI))
- IF(FVEG <= 0.05) FVEG = 0.05
- ELSE IF (DVEG == 4) THEN
- FVEG = SHDMAX
- IF(FVEG <= 0.05) FVEG = 0.05
- ELSE
- WRITE(*,*) "-------- FATAL CALLED IN SFLX -----------"
- CALL wrf_error_fatal("Namelist parameter DVEG unknown")
- ENDIF
- ! CALL PHENOLOGY (VEGTYP,IMONTH ,IDAY ,SNOWH ,TV ,LAT , & !in
- ! LAI ,SAI ,TROOT , & !in
- ! HTOP ,ELAI ,ESAI ,IGS ) !out
- ! compute energy budget (momentum & energy fluxes and phase changes)
- CALL ENERGY (ICE ,VEGTYP ,IST ,ISC ,NSNOW ,NSOIL , & !in
- ISNOW ,NROOT ,DT ,RHOAIR ,SFCPRS ,QAIR , & !in
- SFCTMP ,THAIR ,LWDN ,UU ,VV ,ZLVL , & !in
- CO2AIR ,O2AIR ,SOLAD ,SOLAI ,COSZ ,IGS , & !in
- EAIR ,HTOP ,TBOT ,ZBOT ,ZSNSO ,ZSOIL , & !in
- ELAI ,ESAI ,CSOIL ,FWET ,FOLN , & !in
- FVEG , & !in
- QSNOW ,DZSNSO ,LAT ,CANLIQ ,CANICE ,iloc, jloc , & !in
- IMELT ,SNICEV ,SNLIQV ,EPORE ,T2M ,FSNO , & !out
- SAV ,SAG ,QMELT ,FSA ,FSR ,TAUX , & !out
- TAUY ,FIRA ,FSH ,FCEV ,FGEV ,FCTR , & !out
- TRAD ,PSN ,APAR ,SSOIL ,BTRANI ,BTRAN , & !out
- PONDING,TS ,LATHEA , & !out
- TV ,TG ,STC ,SNOWH ,EAH ,TAH , & !inout
- SNEQVO ,SNEQV ,SH2O ,SMC ,SNICE ,SNLIQ , & !inout
- ALBOLD ,CM ,CH ,DX ,DZ8W ,Q2 , & !inout
- !jref:start
- QC ,PBLH ,QSFC ,PSFC ,ISURBAN,IZ0TLND, & !in
- CHSTAR ,TSTAR ,T2MV ,T2MB ,FSRV , &
- FSRG ,RSSUN ,RSSHA ,BGAP ,WGAP, GAP,TGV,TGB,&
- Q1 ,Q2V ,Q2B ,Q2E ,CHV ,CHB , & !out
- EMISSI) !out
- !jref:end
- SICE(:) = MAX(0.0, SMC(:) - SH2O(:))
- SNEQVO = SNEQV
- QVAP = MAX( FGEV/LATHEA, 0.) ! positive part of fgev
- QDEW = ABS( MIN(FGEV/LATHEA, 0.)) ! negative part of fgev
- EDIR = QVAP - QDEW
- ! compute water budgets (water storages, ET components, and runoff)
- CALL WATER (VEGTYP ,NSNOW ,NSOIL ,IMELT ,DT ,UU , & !in
- VV ,FCEV ,FCTR ,QPRECC ,QPRECL ,ELAI , & !in
- ESAI ,SFCTMP ,QVAP ,QDEW ,ZSOIL ,BTRANI , & !in
- FICEOLD,PONDING,TG ,IST ,FVEG ,iloc,jloc , & !in
- ISNOW ,CANLIQ ,CANICE ,TV ,SNOWH ,SNEQV , & !inout
- SNICE ,SNLIQ ,STC ,ZSNSO ,SH2O ,SMC , & !inout
- SICE ,ZWT ,WA ,WT ,DZSNSO ,WSLAKE , & !inout
- CMC ,ECAN ,ETRAN ,FWET ,RUNSRF ,RUNSUB , & !out
- QIN ,QDIS ,QSNOW ,PONDING1 ,PONDING2,&
- ISURBAN) !out
- ! write(*,'(a20,10F15.5)') 'SFLX:RUNOFF=',RUNSRF*DT,RUNSUB*DT,EDIR*DT
- ! compute carbon budgets (carbon storages and co2 & bvoc fluxes)
- IF (DVEG == 2) THEN
- CALL CARBON (NSNOW ,NSOIL ,VEGTYP ,NROOT ,DT ,ZSOIL , & !in
- DZSNSO ,STC ,SMC ,TV ,TG ,PSN , & !in
- FOLN ,SMCMAX ,BTRAN ,APAR ,FVEG ,IGS , & !in
- TROOT ,IST ,LAT ,iloc ,jloc , & !in
- LFMASS ,RTMASS ,STMASS ,WOOD ,STBLCP ,FASTCP , & !inout
- GPP ,NPP ,NEE ,AUTORS ,HETERS ,TOTSC , & !out
- TOTLB ,LAI ,SAI ) !out
- END IF
- ! water and energy balance check
- CALL ERROR (SWDOWN ,FSA ,FSR ,FIRA ,FSH ,FCEV , & !in
- FGEV ,FCTR ,SSOIL ,BEG_WB ,CANLIQ ,CANICE , & !in
- SNEQV ,WA ,SMC ,DZSNSO ,PRCP ,ECAN , & !in
- ETRAN ,EDIR ,RUNSRF ,RUNSUB ,DT ,NSOIL , & !in
- NSNOW ,IST ,ERRWAT ,ILOC , JLOC ,FVEG , &
- SAV ,SAG ,FSRV ,FSRG) !in ( Except ERRWAT, which is out )
- ! urban - jref
- QFX = ETRAN + ECAN + EDIR
- IF ( VEGTYP == ISURBAN ) THEN
- QSFC = (QFX/RHOAIR*CHSTAR) + QAIR
- Q2B = QSFC
- END IF
- IF(SWDOWN.NE.0.) THEN
- ALBEDO = FSR / SWDOWN
- ELSE
- ALBEDO = -999.9
- END IF
-
- END SUBROUTINE NOAHMP_SFLX
- ! ==================================================================================================
- SUBROUTINE ATM (SFCPRS ,SFCTMP ,Q2 ,PRCP ,SOLDN ,COSZ ,THAIR , &
- QAIR ,EAIR ,RHOAIR ,QPRECC ,QPRECL ,SOLAD ,SOLAI , &
- SWDOWN )
- ! --------------------------------------------------------------------------------------------------
- ! re-process atmospheric forcing
- ! --------------------------------------------------------------------------------------------------
- IMPLICIT NONE
- ! --------------------------------------------------------------------------------------------------
- ! inputs
- REAL , INTENT(IN) :: SFCPRS !pressure (pa)
- REAL , INTENT(IN) :: SFCTMP !surface air temperature [k]
- REAL , INTENT(IN) :: Q2 !mixing ratio (kg/kg)
- REAL , INTENT(IN) :: SOLDN !downward shortwave radiation (w/m2)
- REAL , INTENT(IN) :: PRCP !precipitation rate (kg m-2 s-1)
- REAL , INTENT(IN) :: COSZ !cosine solar zenith angle [0-1]
- ! outputs
- REAL , INTENT(OUT) :: THAIR !potential temperature (k)
- REAL , INTENT(OUT) :: QAIR !specific humidity (kg/kg) (q2/(1+q2))
- REAL , INTENT(OUT) :: EAIR !vapor pressure air (pa)
- REAL, DIMENSION( 1: 2), INTENT(OUT) :: SOLAD !incoming direct solar radiation (w/m2)
- REAL, DIMENSION( 1: 2), INTENT(OUT) :: SOLAI !incoming diffuse solar radiation (w/m2)
- REAL , INTENT(OUT) :: QPRECC !convective precipitation (mm/s)
- REAL , INTENT(OUT) :: QPRECL !large-scale precipitation (mm/s)
- REAL , INTENT(OUT) :: RHOAIR !density air (kg/m3)
- REAL , INTENT(OUT) :: SWDOWN !downward solar filtered by sun angle [w/m2]
- !locals
- REAL :: PAIR !atm bottom level pressure (pa)
- ! --------------------------------------------------------------------------------------------------
- !jref: seems like PAIR should be P1000mb??
- PAIR = SFCPRS ! atm bottom level pressure (pa)
- THAIR = SFCTMP * (SFCPRS/PAIR)**(RAIR/CPAIR)
- !jref: mixing ratio to specific
- QAIR = Q2 / (1.0+Q2) ! mixing ratio to specific humidity [kg/kg]
- ! QAIR = Q2 ! GLDAS forcing: Q2 = specific humidity [kg/kg]
- EAIR = QAIR*SFCPRS / (0.622+0.378*QAIR)
- RHOAIR = (SFCPRS-0.378*EAIR) / (RAIR*SFCTMP)
- QPRECC = 0.10 * PRCP ! should be from the atmospheric model
- QPRECL = 0.90 * PRCP ! should be from the atmospheric model
- IF(COSZ <= 0.) THEN
- SWDOWN = 0.
- ELSE
- SWDOWN = SOLDN
- END IF
- SOLAD(1) = SWDOWN*0.7*0.5 ! direct vis
- SOLAD(2) = SWDOWN*0.7*0.5 ! direct nir
- SOLAI(1) = SWDOWN*0.3*0.5 ! diffuse vis
- SOLAI(2) = SWDOWN*0.3*0.5 ! diffuse nir
- END SUBROUTINE ATM
- ! ==================================================================================================
- ! --------------------------------------------------------------------------------------------------
- SUBROUTINE PHENOLOGY (VEGTYP , SNOWH , TV , LAT , YEARLEN , JULIAN , & !in
- LAI , SAI , TROOT , HTOP , ELAI , ESAI , IGS)
- ! --------------------------------------------------------------------------------------------------
- ! vegetation phenology considering vegeation canopy being buries by snow and evolution in time
- ! --------------------------------------------------------------------------------------------------
- USE NOAHMP_VEG_PARAMETERS
- ! --------------------------------------------------------------------------------------------------
- IMPLICIT NONE
- ! --------------------------------------------------------------------------------------------------
- ! inputs
- INTEGER , INTENT(IN ) :: VEGTYP !vegetation type
- REAL , INTENT(IN ) :: SNOWH !snow height [m]
- REAL , INTENT(IN ) :: TV …
Large files files are truncated, but you can click here to view the full file