SUBROUTINE REDPRM(VEGTYP, SOILTYP, SLOPETYP, + CFACTR, CMCMAX, RSMAX, TOPT, REFKDT, KDT, SBETA, + SHDFAC, RCMIN, RGL, HS, ZBOT, FRZX, PSISAT, SLOPE, + SNUP, SALP, B, DKSAT, DWSAT, SMCMAX, SMCWLT, SMCREF, + SMCDRY, F1, QUARTZ, FXEXP, RTDIS, SLDPTH, ZSOIL, + NROOT, NSOIL, Z0, CZIL, LAI, CSOIL, PTU) IMPLICIT NONE C This subroutine internally sets (defaults), or optionally reads-in c via namelist I/O, all the soil and vegetation parameters C required for the execusion of the NOAH - LSM c c optional non-default parameters can be read in, accommodating up C to 30 soil, veg, or slope classes, if the default max number of C soil, veg, and/or slope types is reset. c future upgrades of routine REDPRM must expand to incorporate some c of the empirical parameters of the frozen soil and snowpack physics c (such as in routines FRH2O, SNOWPACK, and SNOW_NEW) not yet set in c this REDPRM routine, but rather set in lower level subroutines C Set maximum number of soil-, veg-, and slopetyp in data statement INTEGER MAX_SOILTYP INTEGER MAX_VEGTYP INTEGER MAX_SLOPETYP PARAMETER (MAX_SOILTYP = 30) PARAMETER (MAX_VEGTYP = 30) PARAMETER (MAX_SLOPETYP = 30) C Number of defined soil-, veg-, and slopetyps used INTEGER DEFINED_VEG INTEGER DEFINED_SOIL INTEGER DEFINED_SLOPE DATA DEFINED_VEG/13/ DATA DEFINED_SOIL/9/ DATA DEFINED_SLOPE/9/ C SET-UP SOIL PARAMETERS FOR GIVEN SOIL TYPE C INPUT: SOLTYP: SOIL TYPE (INTEGER INDEX) C OUTPUT: SOIL PARAMETERS: C MAXSMC: MAX SOIL MOISTURE CONTENT (POROSITY) C REFSMC: REFERENCE SOIL MOISTURE (ONSET OF SOIL MOISTURE C STRESS IN TRANSPIRATION) C WLTSMC: WILTING PT SOIL MOISTURE CONTENTS C DRYSMC: AIR DRY SOIL MOIST CONTENT LIMITS C SATPSI: SATURATED SOIL POTENTIAL C SATDK: SATURATED SOIL HYDRAULIC CONDUCTIVITY C BB: THE 'B' PARAMETER C SATDW: SATURATED SOIL DIFFUSIVITY C F11: USED TO COMPUTE SOIL DIFFUSIVITY/CONDUCTIVITY C QUARTZ: SOIL QUARTZ CONTENT C C SOIL TYPES ZOBLER (1986) COSBY ET AL (1984) (quartz cont.(1)) C 1 COARSE LOAMY SAND (0.82) C 2 MEDIUM SILTY CLAY LOAM (0.10) C 3 FINE LIGHT CLAY (0.25) C 4 COARSE-MEDIUM SANDY LOAM (0.60) C 5 COARSE-FINE SANDY CLAY (0.52) C 6 MEDIUM-FINE CLAY LOAM (0.35) C 7 COARSE-MED-FINE SANDY CLAY LOAM (0.60) C 8 ORGANIC LOAM (0.40) C 9 GLACIAL LAND ICE LOAMY SAND (NA using 0.82) REAL BB(MAX_SOILTYP) REAL DRYSMC(MAX_SOILTYP) REAL F11(MAX_SOILTYP) REAL MAXSMC(MAX_SOILTYP) REAL REFSMC(MAX_SOILTYP) REAL SATPSI(MAX_SOILTYP) REAL SATDK(MAX_SOILTYP) REAL SATDW(MAX_SOILTYP) REAL WLTSMC(MAX_SOILTYP) REAL QTZ(MAX_SOILTYP) REAL B REAL DKSAT REAL DWSAT REAL SMCMAX REAL SMCWLT REAL SMCREF REAL SMCDRY REAL PTU REAL F1 REAL QUARTZ REAL REFSMC1 REAL WLTSMC1 DATA MAXSMC/0.421, 0.464, 0.468, 0.434, 0.406, 0.465, & 0.404, 0.439, 0.421, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ DATA SATPSI/0.04, 0.62, 0.47, 0.14, 0.10, 0.26, & 0.14, 0.36, 0.04, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00/ DATA SATDK /1.41E-5, 0.20E-5, 0.10E-5, 0.52E-5, 0.72E-5, & 0.25E-5, 0.45E-5, 0.34E-5, 1.41E-5, 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00/ DATA BB /4.26, 8.72, 11.55, 4.74, 10.73, 8.17, & 6.77, 5.25, 4.26, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00/ DATA QTZ /0.82, 0.10, 0.25, 0.60, 0.52, 0.35, & 0.60, 0.40, 0.82, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00/ C The following 5 parameters are derived later in REDPRM.f C from the soil data, and are just given here for reference C and to force static storage allocation C Dag Lohmann, Feb. 2001 DATA REFSMC/0.283, 0.387, 0.412, 0.312, 0.338, 0.382, & 0.315, 0.329, 0.283, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ DATA WLTSMC/0.029, 0.119, 0.139, 0.047, 0.100, 0.103, & 0.069, 0.066, 0.029, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ DATA DRYSMC/0.029, 0.119, 0.139, 0.047, 0.100, 0.103, & 0.069, 0.066, 0.029, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ DATA SATDW /5.71E-6, 2.33E-5, 1.16E-5, 7.95E-6, 1.90E-5, & 1.14E-5, 1.06E-5, 1.46E-5, 5.71E-6, 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00, & 0.00 , 0.00 , 0.00 , 0.00 , 0.00/ DATA F11 /-0.999, -1.116, -2.137, -0.572, -3.201, -1.302, & -1.519, -0.329, -0.999, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ C####################################################################### C SET-UP VEGETATION PARAMETERS FOR A GIVEN VEGETAION TYPE C C INPUT: VEGTYP = VEGETATION TYPE (INTEGER INDEX) C OUPUT: VEGETATION PARAMETERS C SHDFAC: VEGETATION GREENNESS FRACTION C RCMIN: MIMIMUM STOMATAL RESISTANCE C RGL: PARAMETER USED IN SOLAR RAD TERM OF C CANOPY RESISTANCE FUNCTION C HS: PARAMETER USED IN VAPOR PRESSURE DEFICIT TERM OF C CANOPY RESISTANCE FUNCTION C SNUP: THRESHOLD SNOW DEPTH (IN WATER EQUIVALENT M) THAT C IMPLIES 100% SNOW COVER C C SSIB VEGETATION TYPES (DORMAN AND SELLERS, 1989; JAM) C C 1: BROADLEAF-EVERGREEN TREES (TROPICAL FOREST) C 2: BROADLEAF-DECIDUOUS TREES C 3: BROADLEAF AND NEEDLELEAF TREES (MIXED FOREST) C 4: NEEDLELEAF-EVERGREEN TREES C 5: NEEDLELEAF-DECIDUOUS TREES (LARCH) C 6: BROADLEAF TREES WITH GROUNDCOVER (SAVANNA) C 7: GROUNDCOVER ONLY (PERENNIAL) C 8: BROADLEAF SHRUBS WITH PERENNIAL GROUNDCOVER C 9: BROADLEAF SHRUBS WITH BARE SOIL C 10: DWARF TREES AND SHRUBS WITH GROUNDCOVER (TUNDRA) C 11: BARE SOIL C 12: CULTIVATIONS (THE SAME PARAMETERS AS FOR TYPE 7) C 13: GLACIAL (THE SAME PARAMETERS AS FOR TYPE 11) INTEGER NROOT_DATA(MAX_VEGTYP) REAL RSMTBL(MAX_VEGTYP) REAL RGLTBL(MAX_VEGTYP) REAL HSTBL(MAX_VEGTYP) REAL SNUPX(MAX_VEGTYP) REAL Z0_DATA(MAX_VEGTYP) REAL LAI_DATA(MAX_VEGTYP) INTEGER NROOT REAL SHDFAC REAL RCMIN REAL RGL REAL HS REAL FRZFACT REAL PSISAT REAL SNUP REAL Z0 REAL LAI DATA NROOT_DATA /4,4,4,4,4,4,3,3,3,2,3,3,2,0,0, * 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/ DATA RSMTBL /150.0, 100.0, 125.0, 150.0, 100.0, 70.0, * 40.0, 300.0, 400.0, 150.0, 400.0, 40.0, * 150.0, 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0/ DATA RGLTBL /30.0, 30.0, 30.0, 30.0, 30.0, 65.0, * 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, * 100.0, 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0/ DATA HSTBL /41.69, 54.53, 51.93, 47.35, 47.35, 54.53, * 36.35, 42.00, 42.00, 42.00, 42.00, 36.35, * 42.00, 0.00, 0.00, 0.00, 0.00, 0.00, * 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, * 0.00, 0.00, 0.00, 0.00, 0.00, 0.00/ DATA SNUPX /0.080, 0.080, 0.080, 0.080, 0.080, 0.080, * 0.040, 0.040, 0.040, 0.040, 0.025, 0.040, * 0.025, 0.000, 0.000, 0.000, 0.000, 0.000, * 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, * 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ DATA Z0_DATA /2.653, 0.826, 0.563, 1.089, 0.854, 0.856, * 0.035, 0.238, 0.065, 0.076, 0.011, 0.035, * 0.011, 0.000, 0.000, 0.000, 0.000, 0.000, * 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, * 0.000, 0.000, 0.000, 0.000, 0.000, 0.000/ c DATA LAI_DATA /3.0, 3.0, 3.0, 3.0, 3.0, 3.0, c * 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, c * 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, c * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, c * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0/ DATA LAI_DATA /4.0, 4.0, 4.0, 4.0, 4.0, 4.0, * 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, * 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0, 0.0, 0.0, 0.0, 0.0, 0.0/ C####################################################################### C CLASS PARAMETER 'SLOPETYP' WAS INCLUDED TO ESTIMATE C LINEAR RESERVOIR COEFFICIENT 'SLOPE' TO THE BASEFLOW RUNOFF C OUT OF THE BOTTOM LAYER. LOWEST CLASS (SLOPETYP=0)MEANS C HIGHEST SLOPE PARAMETER= 1 C DEFINITION OF SLOPETYP FROM 'ZOBLER' SLOPE TYPE C SLOPE CLASS PERCENT SLOPE C 1 0-8 C 2 8-30 C 3 > 30 C 4 0-30 C 5 0-8 & > 30 C 6 8-30 & > 30 C 7 0-8, 8-30, > 30 C 9 GLACIAL ICE C BLANK OCEAN/SEA C NOTE: CLASS 9 FROM 'ZOBLER' FILE SHOULD BE REPLACED BY 8 C AND 'BLANK' 9 REAL SLOPE REAL SLOPE_DATA(MAX_SLOPETYP) DATA SLOPE_DATA /0.1, 0.6, 1.0, 0.35, 0.55, 0.8, * 0.63, 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0 , 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0 , 0.0, 0.0, 0.0, 0.0, 0.0, * 0.0 , 0.0, 0.0, 0.0, 0.0, 0.0/ C####################################################################### C Set namelist file name CHARACTER*50 NAMELIST_NAME C####################################################################### C SET UNIVERSAL PARAMETERS (NOT DEPENDENT ON SOIL, VEG, SLOPE TYPE) INTEGER VEGTYP INTEGER SOILTYP INTEGER SLOPETYP INTEGER NSOIL INTEGER I INTEGER BARE DATA BARE /11/ LOGICAL LPARAM DATA LPARAM /.TRUE./ LOGICAL LFIRST DATA LFIRST /.TRUE./ C Parameter used to calculate roughness length of heat REAL CZIL, CZIL_DATA DATA CZIL_DATA /0.2/ c data czil_data /0.1/ C Parameter used to caluculate vegetation effect on soil heat flux REAL SBETA, SBETA_DATA DATA SBETA_DATA /-2.0/ C BARE SOIL EVAPORATION EXPONENT USED IN DEVAP REAL FXEXP, FXEXP_DATA DATA FXEXP_DATA /2.0/ C Soil heat capacity [J/m^3/K] REAL CSOIL, CSOIL_DATA DATA CSOIL_DATA /1.26E+6/ c data csoil_data /2.0e+6/ C SPECIFY SNOW DISTRIBUTION SHAPE PARAMETER C SALP - SHAPE PARAMETER OF DISTRIBUTION FUNCTION C OF SNOW COVER. FROM ANDERSON'S DATA (HYDRO-17) C BEST FIT IS WHEN SALP = 2.6 REAL SALP, SALP_DATA DATA SALP_DATA /2.6/ C KDT IS DEFINED BY REFERENCE REFKDT AND DKSAT C REFDK=2.E-6 IS THE SAT. DK. VALUE FOR THE SOIL TYPE 2 REAL REFDK, REFDK_DATA DATA REFDK_DATA /2.0E-6/ REAL REFKDT, REFKDT_DATA DATA REFKDT_DATA /3.0/ REAL KDT REAL FRZX C FROZEN GROUND PARAMETER, FRZK, DEFINITION C FRZK IS ICE CONTENT THRESHOLD ABOVE WHICH FROZEN SOIL IS IMPERMEABLE C REFERENCE VALUE OF THIS PARAMETER FOR THE LIGHT CLAY SOIL (TYPE=3) C FRZK = 0.15 M REAL FRZK, FRZK_DATA DATA FRZK_DATA /0.15/ REAL RTDIS(NSOIL) REAL SLDPTH(NSOIL) REAL ZSOIL(NSOIL) C Set two canopy water parameters REAL CFACTR, CFACTR_DATA REAL CMCMAX, CMCMAX_DATA DATA CFACTR_DATA /0.5/ DATA CMCMAX_DATA /0.5E-3/ C Set max. stomatal resistance REAL RSMAX, RSMAX_DATA DATA RSMAX_DATA /5000.0/ C Set optimum transpiration air temperature REAL TOPT, TOPT_DATA DATA TOPT_DATA /298.0/ C Specify depth[m] of lower boundary soil temperature REAL ZBOT, ZBOT_DATA DATA ZBOT_DATA /-3.0/ c data zbot_data /-8.0/ C####################################################################### C Namelist definition NAMELIST /SOIL_VEG/ SLOPE_DATA, RSMTBL, RGLTBL, HSTBL, SNUPX, & BB, DRYSMC, F11, MAXSMC, REFSMC, SATPSI, SATDK, SATDW, & WLTSMC, QTZ, LPARAM, ZBOT_DATA, SALP_DATA, CFACTR_DATA, & CMCMAX_DATA, SBETA_DATA, RSMAX_DATA, TOPT_DATA, & REFDK_DATA, FRZK_DATA, BARE, DEFINED_VEG, DEFINED_SOIL, & DEFINED_SLOPE, FXEXP_DATA, NROOT_DATA, REFKDT_DATA, Z0_DATA, & CZIL_DATA, LAI_DATA, CSOIL_DATA C Read namelist file to override default parameters C only once. IF (LFIRST) THEN OPEN(58, FILE = 'namelist_filename.txt') C NAMELIST_NAME must be 50 characters or less. READ(58,'(A)') NAMELIST_NAME CLOSE(58) c WRITE(*,*) 'Namelist Filename is ', NAMELIST_NAME OPEN(59, FILE = NAMELIST_NAME) 50 CONTINUE READ(59, SOIL_VEG, END=100) IF (LPARAM) GOTO 50 100 CONTINUE CLOSE(59) c WRITE(*,NML=SOIL_VEG) LFIRST = .FALSE. IF (DEFINED_SOIL .GT. MAX_SOILTYP) THEN WRITE(*,*) 'Warning: DEFINED_SOIL too large in namelist' STOP 222 END IF IF (DEFINED_VEG .GT. MAX_VEGTYP) THEN WRITE(*,*) 'Warning: DEFINED_VEG too large in namelist' STOP 222 END IF IF (DEFINED_SLOPE .GT. MAX_SLOPETYP) THEN WRITE(*,*) 'Warning: DEFINED_SLOPE too large in namelist' STOP 222 END IF DO I = 1, DEFINED_SOIL SATDW(I) = BB(I)*SATDK(I)*(SATPSI(I)/MAXSMC(I)) F11(I) = ALOG10(SATPSI(I)) + BB(I)*ALOG10(MAXSMC(I)) + 2.0 REFSMC1 = MAXSMC(I)*(5.79E-9/SATDK(I)) & **(1.0/(2.0*BB(I)+3.0)) REFSMC(I) = REFSMC1 + (MAXSMC(I)-REFSMC1) / 3.0 WLTSMC1 = MAXSMC(I) * (200.0/SATPSI(I))**(-1.0/BB(I)) WLTSMC(I) = WLTSMC1 - 0.5 * WLTSMC1 C Current version DRYSMC values that equate to WLTSMC C Future version could let DRYSMC be independently set via namelist DRYSMC(I) = WLTSMC(I) END DO END IF IF (SOILTYP .GT. DEFINED_SOIL) THEN WRITE(*,*) 'Warning: too many soil types' STOP 333 END IF IF (VEGTYP .GT. DEFINED_VEG) THEN WRITE(*,*) 'Warning: too many veg types' STOP 333 END IF IF (SLOPETYP .GT. DEFINED_SLOPE) THEN WRITE(*,*) 'Warning: too many slope types' STOP 333 END IF C SET-UP UNIVERSAL PARAMETERS C (NOT DEPENDENT ON SOILTYP, VEGTYP OR SLOPETYP) ZBOT = ZBOT_DATA SALP = SALP_DATA CFACTR = CFACTR_DATA CMCMAX = CMCMAX_DATA SBETA = SBETA_DATA RSMAX = RSMAX_DATA TOPT = TOPT_DATA REFDK = REFDK_DATA FRZK = FRZK_DATA FXEXP = FXEXP_DATA REFKDT = REFKDT_DATA CZIL = CZIL_DATA CSOIL = CSOIL_DATA C SET-UP SOIL PARAMETERS B = BB(SOILTYP) SMCDRY = DRYSMC(SOILTYP) F1 = F11(SOILTYP) SMCMAX = MAXSMC(SOILTYP) SMCREF = REFSMC(SOILTYP) PSISAT = SATPSI(SOILTYP) DKSAT = SATDK(SOILTYP) DWSAT = SATDW(SOILTYP) SMCWLT = WLTSMC(SOILTYP) QUARTZ = QTZ(SOILTYP) FRZFACT = (SMCMAX / SMCREF) * (0.412 / 0.468) KDT = REFKDT * DKSAT/REFDK C TO ADJUST FRZK PARAMETER TO ACTUAL SOIL TYPE: FRZK * FRZFACT FRZX = FRZK * FRZFACT C SET-UP VEGETATION PARAMETERS NROOT = NROOT_DATA(VEGTYP) SNUP = SNUPX(VEGTYP) RCMIN = RSMTBL(VEGTYP) RGL = RGLTBL(VEGTYP) HS = HSTBL(VEGTYP) Z0 = Z0_DATA(VEGTYP) LAI = LAI_DATA(VEGTYP) IF(VEGTYP .EQ. BARE) SHDFAC = 0.0 IF (NROOT .GT. NSOIL) THEN WRITE(*,*) 'Warning: too many root layers' STOP 333 END IF C CALCULATE ROOT DISTRIBUTION C PRESENT VERSION ASSUMES UNIFORM DISTRIBUTION BASED ON SOIL LAYERS DO I=1,NROOT RTDIS(I) = -SLDPTH(I)/ZSOIL(NROOT) END DO C SET-UP SLOPE PARAMETER SLOPE = SLOPE_DATA(SLOPETYP) C RETURN END