Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

snow_compaction #158

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion drivers/hrldas/ConfigVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ subroutine ConfigVarInTransfer(noahmp, NoahmpIO)
noahmp%config%nmlist%OptSurfaceDrag = NoahmpIO%IOPT_SFC
noahmp%config%nmlist%OptStomataResistance = NoahmpIO%IOPT_CRS
noahmp%config%nmlist%OptSnowAlbedo = NoahmpIO%IOPT_ALB
noahmp%config%nmlist%OptSnowCompact = NoahmpIO%IOPT_COMPACT
noahmp%config%nmlist%OptCanopyRadiationTransfer = NoahmpIO%IOPT_RAD
noahmp%config%nmlist%OptSnowSoilTempTime = NoahmpIO%IOPT_STC
noahmp%config%nmlist%OptSnowThermConduct = NoahmpIO%IOPT_TKSNO
Expand Down Expand Up @@ -136,7 +137,7 @@ subroutine ConfigVarInTransfer(noahmp, NoahmpIO)
noahmp%config%domain%VegType = NoahmpIO%NATURAL_TABLE ! set rural vegetation type based on table natural
! urban is handled by explicit urban scheme outside Noah-MP
NoahmpIO%GVFMAX(I,J) = 0.96 * 100.0 ! unit: %
endif
endif
endif

! treatment for crop point
Expand Down
7 changes: 7 additions & 0 deletions drivers/hrldas/NoahmpIOVarType.F90
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ module NoahmpIOVarType
integer :: IOPT_INF ! frozen soil permeability (1-> NY06; 2->Koren99)
integer :: IOPT_RAD ! radiation transfer (1->gap=F(3D,cosz); 2->gap=0; 3->gap=1-Fveg)
integer :: IOPT_ALB ! snow surface albedo (1->BATS; 2->CLASS)
integer :: IOPT_COMPACT ! snow surface compaction (1->ANDERSON1976; 2->Abolafia-Rosenzweig2024)
integer :: IOPT_SNF ! rainfall & snowfall (1-Jordan91; 2->BATS; 3->Noah)
integer :: IOPT_TKSNO ! snow thermal conductivity: 1 -> Stieglitz(yen,1965) scheme (default), 2 -> Anderson, 1976 scheme, 3 -> constant, 4 -> Verseghy (1991) scheme, 5 -> Douvill(Yen, 1981) scheme
integer :: IOPT_TBOT ! lower boundary of soil temperature (1->zero-flux; 2->Noah)
Expand Down Expand Up @@ -781,6 +782,12 @@ module NoahmpIOVarType
real(kind=kind_noahmp) :: C5_SNOWCOMPACT_TABLE ! snow desctructive metamorphism compaction parameter3
real(kind=kind_noahmp) :: DM_SNOWCOMPACT_TABLE ! upper Limit on destructive metamorphism compaction [kg/m3]
real(kind=kind_noahmp) :: ETA0_SNOWCOMPACT_TABLE ! snow viscosity coefficient [kg-s/m2]
real(kind=kind_noahmp) :: SNOWCOMPACTm_TABLE ! snow compaction m parameter for linear sfc temp fitting from AR2024
real(kind=kind_noahmp) :: SNOWCOMPACTb_TABLE ! snow compaction b parameter for linear sfc temp fitting from AR2024
real(kind=kind_noahmp) :: SNOWCOMPACT_PSFC1_TABLE ! lower constrain for SnowCompactBurdenFac for high pressure bin from AR2024
real(kind=kind_noahmp) :: SNOWCOMPACT_PSFC2_TABLE ! lower constrain for SnowCompactBurdenFac for mid pressure bin from AR2024
real(kind=kind_noahmp) :: SNOWCOMPACT_PSFC3_TABLE ! lower constrain for SnowCompactBurdenFac for low pressure bin from AR2024
real(kind=kind_noahmp) :: SNOWCOMPACT_Upper_TABLE ! upper constraint on SnowCompactBurdenFac from AR2024
real(kind=kind_noahmp) :: SNLIQMAXFRAC_TABLE ! maximum liquid water fraction in snow
real(kind=kind_noahmp) :: SWEMAXGLA_TABLE ! Maximum SWE allowed at glaciers (mm)
real(kind=kind_noahmp) :: WSLMAX_TABLE ! maximum lake water storage (mm)
Expand Down
4 changes: 3 additions & 1 deletion drivers/hrldas/NoahmpReadNamelistMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ subroutine NoahmpReadNamelist(NoahmpIO)
integer :: frozen_soil_option = 1
integer :: radiative_transfer_option = 3
integer :: snow_albedo_option = 1
integer :: snow_compaction_option = 2
integer :: snow_thermal_conductivity = 1
integer :: pcp_partition_option = 1
integer :: tbot_option = 2
Expand Down Expand Up @@ -123,7 +124,7 @@ subroutine NoahmpReadNamelist(NoahmpIO)
forcing_name_LW,forcing_name_SW,forcing_name_PR,forcing_name_SN, &
dynamic_veg_option, canopy_stomatal_resistance_option, &
btr_option, surface_drag_option, supercooled_water_option, &
frozen_soil_option, radiative_transfer_option, snow_albedo_option, &
frozen_soil_option, radiative_transfer_option, snow_albedo_option, snow_compaction_option, &
snow_thermal_conductivity, surface_runoff_option, subsurface_runoff_option, &
pcp_partition_option, tbot_option, temp_time_scheme_option, &
glacier_option, surface_resistance_option, &
Expand Down Expand Up @@ -330,6 +331,7 @@ subroutine NoahmpReadNamelist(NoahmpIO)
NoahmpIO%IOPT_INF = frozen_soil_option
NoahmpIO%IOPT_RAD = radiative_transfer_option
NoahmpIO%IOPT_ALB = snow_albedo_option
NoahmpIO%IOPT_COMPACT = snow_compaction_option
NoahmpIO%IOPT_SNF = pcp_partition_option
NoahmpIO%IOPT_TKSNO = snow_thermal_conductivity
NoahmpIO%IOPT_TBOT = tbot_option
Expand Down
21 changes: 19 additions & 2 deletions drivers/hrldas/NoahmpReadTableMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,19 @@ subroutine NoahmpReadTable(NoahmpIO)
GRAIN_GROWTH, EXTRA_GROWTH, DIRT_SOOT, BATS_COSZ, BATS_VIS_NEW, &
BATS_NIR_NEW, BATS_VIS_AGE, BATS_NIR_AGE, BATS_VIS_DIR, BATS_NIR_DIR, &
RSURF_SNOW, RSURF_EXP, C2_SNOWCOMPACT, C3_SNOWCOMPACT, C4_SNOWCOMPACT, &
C5_SNOWCOMPACT, DM_SNOWCOMPACT, ETA0_SNOWCOMPACT, SNLIQMAXFRAC, SWEMAXGLA, &
C5_SNOWCOMPACT, DM_SNOWCOMPACT, ETA0_SNOWCOMPACT, SNOWCOMPACTm,SNOWCOMPACTb, &
SNOWCOMPACT_PSFC1, SNOWCOMPACT_PSFC2, SNOWCOMPACT_PSFC3, SNOWCOMPACT_Upper, &
SNLIQMAXFRAC, SWEMAXGLA, &
WSLMAX, ROUS, CMIC, SNOWDEN_MAX, CLASS_ALB_REF, CLASS_SNO_AGE, CLASS_ALB_NEW,&
PSIWLT, Z0SOIL, Z0LAKE
namelist / noahmp_global_parameters / CO2, O2, TIMEAN, FSATMX, Z0SNO, SSI, SNOW_RET_FAC ,SNOW_EMIS, SWEMX, TAU0, &
GRAIN_GROWTH, EXTRA_GROWTH, DIRT_SOOT, BATS_COSZ, BATS_VIS_NEW, &
BATS_NIR_NEW, BATS_VIS_AGE, BATS_NIR_AGE, BATS_VIS_DIR, BATS_NIR_DIR, &
RSURF_SNOW, RSURF_EXP, C2_SNOWCOMPACT, C3_SNOWCOMPACT, C4_SNOWCOMPACT, &
C5_SNOWCOMPACT, DM_SNOWCOMPACT, ETA0_SNOWCOMPACT, SNLIQMAXFRAC, SWEMAXGLA, &
C5_SNOWCOMPACT, DM_SNOWCOMPACT, ETA0_SNOWCOMPACT, SNOWCOMPACTm,SNOWCOMPACTb, &
SNOWCOMPACT_PSFC1, SNOWCOMPACT_PSFC2, SNOWCOMPACT_PSFC3, SNOWCOMPACT_Upper, &
SNLIQMAXFRAC, SWEMAXGLA, &
SNLIQMAXFRAC, SWEMAXGLA, &
WSLMAX, ROUS, CMIC, SNOWDEN_MAX, CLASS_ALB_REF, CLASS_SNO_AGE, CLASS_ALB_NEW,&
PSIWLT, Z0SOIL, Z0LAKE

Expand Down Expand Up @@ -509,6 +514,12 @@ subroutine NoahmpReadTable(NoahmpIO)
NoahmpIO%C5_SNOWCOMPACT_TABLE = undefined_real
NoahmpIO%DM_SNOWCOMPACT_TABLE = undefined_real
NoahmpIO%ETA0_SNOWCOMPACT_TABLE = undefined_real
NoahmpIO%SNOWCOMPACTm_TABLE = undefined_real
NoahmpIO%SNOWCOMPACTb_TABLE = undefined_real
NoahmpIO%SNOWCOMPACT_PSFC1_TABLE = undefined_real
NoahmpIO%SNOWCOMPACT_PSFC2_TABLE = undefined_real
NoahmpIO%SNOWCOMPACT_PSFC3_TABLE = undefined_real
NoahmpIO%SNOWCOMPACT_Upper_TABLE = undefined_real
NoahmpIO%SNLIQMAXFRAC_TABLE = undefined_real
NoahmpIO%SWEMAXGLA_TABLE = undefined_real
NoahmpIO%WSLMAX_TABLE = undefined_real
Expand Down Expand Up @@ -905,6 +916,12 @@ subroutine NoahmpReadTable(NoahmpIO)
NoahmpIO%C5_SNOWCOMPACT_TABLE = C5_SNOWCOMPACT
NoahmpIO%DM_SNOWCOMPACT_TABLE = DM_SNOWCOMPACT
NoahmpIO%ETA0_SNOWCOMPACT_TABLE = ETA0_SNOWCOMPACT
NoahmpIO%SNOWCOMPACTm_TABLE = SNOWCOMPACTm
NoahmpIO%SNOWCOMPACTb_TABLE = SNOWCOMPACTb
NoahmpIO%SNOWCOMPACT_PSFC1_TABLE = SNOWCOMPACT_PSFC1
NoahmpIO%SNOWCOMPACT_PSFC2_TABLE = SNOWCOMPACT_PSFC2
NoahmpIO%SNOWCOMPACT_PSFC3_TABLE = SNOWCOMPACT_PSFC3
NoahmpIO%SNOWCOMPACT_Upper_TABLE = SNOWCOMPACT_Upper
NoahmpIO%SNLIQMAXFRAC_TABLE = SNLIQMAXFRAC
NoahmpIO%SWEMAXGLA_TABLE = SWEMAXGLA
NoahmpIO%WSLMAX_TABLE = WSLMAX
Expand Down
6 changes: 6 additions & 0 deletions drivers/hrldas/WaterVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ subroutine WaterVarInTransfer(noahmp, NoahmpIO)
noahmp%water%param%SnowCompactAgingFac3 = NoahmpIO%C5_SNOWCOMPACT_TABLE
noahmp%water%param%SnowCompactAgingMax = NoahmpIO%DM_SNOWCOMPACT_TABLE
noahmp%water%param%SnowViscosityCoeff = NoahmpIO%ETA0_SNOWCOMPACT_TABLE
noahmp%water%param%SnowCompactm = NoahmpIO%SNOWCOMPACTm_TABLE
noahmp%water%param%SnowCompactb = NoahmpIO%SNOWCOMPACTb_TABLE
noahmp%water%param%SnowCompactPSFC1 = NoahmpIO%SNOWCOMPACT_PSFC1_TABLE
noahmp%water%param%SnowCompactPSFC2 = NoahmpIO%SNOWCOMPACT_PSFC2_TABLE
noahmp%water%param%SnowCompactPSFC3 = NoahmpIO%SNOWCOMPACT_PSFC3_TABLE
noahmp%water%param%BurdenFacUpper = NoahmpIO%SNOWCOMPACT_Upper_TABLE
noahmp%water%param%SnowLiqFracMax = NoahmpIO%SNLIQMAXFRAC_TABLE
noahmp%water%param%SnowLiqHoldCap = NoahmpIO%SSI_TABLE
noahmp%water%param%SnowLiqReleaseFac = NoahmpIO%SNOW_RET_FAC_TABLE
Expand Down
7 changes: 7 additions & 0 deletions parameters/NoahmpTable.TBL
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,12 @@
C5_SNOWCOMPACT = 2.0 ! snow desctructive metamorphism compaction parameter3
DM_SNOWCOMPACT = 100.0 ! upper Limit on destructive metamorphism compaction [kg/m3]
ETA0_SNOWCOMPACT = 1.33e+6 ! snow viscosity coefficient [kg-s/m2], Anderson1979: 0.52e6~1.38e6; 1.33e+6 optimized based on SNOTEL obs (He et al. 2021 JGR)
SNOWCOMPACTm = -0.00069503 ! snow compaction m parameter for linear sfc temp fitting from AR2024
SNOWCOMPACTb = 0.20606699 ! snow compaction b parameter for linear sfc temp fitting from AR2024
SNOWCOMPACT_PSFC1 = 0.017 ! lower constrain for SnowCompactBurdenFac for high pressure bin from AR2024
SNOWCOMPACT_PSFC2 = 0.018 ! lower constrain for SnowCompactBurdenFac for mid pressure bin from AR2024
SNOWCOMPACT_PSFC3 = 0.019 ! lower constrain for SnowCompactBurdenFac for low pressure bin from AR2024
SNOWCOMPACT_Upper = 0.0315 ! upper constraint on SnowCompactBurdenFac from AR2024
SNLIQMAXFRAC = 0.4 ! maximum liquid water fraction in snow
SWEMAXGLA = 5000.0 ! Maximum SWE allowed at glaciers (mm)
SNOWDEN_MAX = 120.0 ! maximum fresh snowfall density (kg/m3)
Expand All @@ -460,6 +466,7 @@
CLASS_ALB_NEW = 0.84 ! fresh snow albedo in CLASS scheme
RSURF_SNOW = 50.0 ! surface resistence for snow [s/m]
Z0SNO = 0.002 ! snow surface roughness length (m)

! other soil and hydrological parameters
RSURF_EXP = 5.0 ! exponent in the shape parameter for soil resistance option 1
WSLMAX = 5000.0 ! maximum lake water storage (mm)
Expand Down
1 change: 1 addition & 0 deletions src/ConfigVarInitMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ subroutine ConfigVarInitDefault(noahmp)
noahmp%config%nmlist%OptSurfaceDrag = undefined_int
noahmp%config%nmlist%OptStomataResistance = undefined_int
noahmp%config%nmlist%OptSnowAlbedo = undefined_int
noahmp%config%nmlist%OptSnowCompact = undefined_int
noahmp%config%nmlist%OptCanopyRadiationTransfer = undefined_int
noahmp%config%nmlist%OptSnowSoilTempTime = undefined_int
noahmp%config%nmlist%OptSnowThermConduct = undefined_int
Expand Down
4 changes: 4 additions & 0 deletions src/ConfigVarType.F90
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ module ConfigVarType
! 1 -> include phase change of ice (default)
! 2 -> ice treatment more like original Noah

integer :: OptSnowCompact ! options for ground snow compaction
! 1 -> original scheme from Anderson (1976)
! 2 -> enhanced scheme from Abolafia-Rosenzweig et al. (2024)

end type namelist_type


Expand Down
6 changes: 4 additions & 2 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ OBJS = ConstantDefineMod.o \
SnowLayerDivideMod.o \
SnowLayerWaterComboMod.o \
SnowpackCompactionMod.o \
SnowpackCompactionARMod.o \
SnowpackHydrologyMod.o \
SnowWaterMainMod.o \
SoilHydraulicPropertyMod.o \
Expand Down Expand Up @@ -205,10 +206,11 @@ SnowLayerDivideMod.o: ../utility/Machine.o NoahmpVarType.o Const
SnowLayerWaterComboMod.o
SnowLayerWaterComboMod.o: ../utility/Machine.o ConstantDefineMod.o
SnowpackCompactionMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o
SnowpackCompactionARMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o
SnowpackHydrologyMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o \
SnowLayerCombineMod.o
SnowWaterMainMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o \
SnowfallBelowCanopyMod.o SnowpackCompactionMod.o SnowLayerDivideMod.o \
SnowfallBelowCanopyMod.o SnowpackCompactionMod.o SnowpackCompactionARMod.o SnowLayerDivideMod.o \
SnowLayerCombineMod.o SnowpackHydrologyMod.o
SoilHydraulicPropertyMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o
SoilMoistureSolverMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o \
Expand Down Expand Up @@ -339,7 +341,7 @@ PsychrometricVariableGlacierMod.o: ../utility/Machine.o NoahmpVarType.o Co
ResistanceGroundEvaporationGlacierMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o
SnowCoverGlacierMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o
SnowWaterMainGlacierMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o SnowfallBelowCanopyMod.o \
SnowpackCompactionMod.o SnowLayerCombineMod.o SnowLayerDivideMod.o \
SnowpackCompactionMod.o SnowpackCompactionARMod.o SnowLayerCombineMod.o SnowLayerDivideMod.o \
SnowpackHydrologyGlacierMod.o
SnowpackHydrologyGlacierMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o SnowLayerCombineMod.o
SurfaceAlbedoGlacierMod.o: ../utility/Machine.o NoahmpVarType.o ConstantDefineMod.o SnowAgingBatsMod.o \
Expand Down
5 changes: 4 additions & 1 deletion src/SnowWaterMainMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module SnowWaterMainMod
use ConstantDefineMod
use SnowfallBelowCanopyMod, only : SnowfallAfterCanopyIntercept
use SnowpackCompactionMod, only : SnowpackCompaction
use SnowpackCompactionARMod, only : SnowpackCompactionAR
use SnowLayerCombineMod, only : SnowLayerCombine
use SnowLayerDivideMod, only : SnowLayerDivide
use SnowpackHydrologyMod, only : SnowpackHydrology
Expand Down Expand Up @@ -39,6 +40,7 @@ subroutine SnowWaterMain(noahmp)
MainTimeStep => noahmp%config%domain%MainTimeStep ,& ! in, noahmp main time step [s]
DepthSoilLayer => noahmp%config%domain%DepthSoilLayer ,& ! in, depth [m] of layer-bottom from soil surface
SnoWatEqvMaxGlacier => noahmp%water%param%SnoWatEqvMaxGlacier ,& ! in, Maximum SWE allowed at glaciers [mm]
OptSnowCompact => noahmp%config%nmlist%OptSnowCompact ,& ! in, options for ground snow compaction
ThicknessSnowSoilLayer => noahmp%config%domain%ThicknessSnowSoilLayer ,& ! inout, thickness of snow/soil layers [m]
DepthSnowSoilLayer => noahmp%config%domain%DepthSnowSoilLayer ,& ! inout, depth of snow/soil layer-bottom [m]
NumSnowLayerNeg => noahmp%config%domain%NumSnowLayerNeg ,& ! inout, actual number of snow layers (negative)
Expand All @@ -64,7 +66,8 @@ subroutine SnowWaterMain(noahmp)
! do following snow layer compaction, combination, and division only for multi-layer snowpack

! snowpack compaction
if ( NumSnowLayerNeg < 0 ) call SnowpackCompaction(noahmp)
if ( NumSnowLayerNeg < 0 .and. OptSnowCompact == 1) call SnowpackCompaction(noahmp)
if ( NumSnowLayerNeg < 0 .and. OptSnowCompact == 2) call SnowpackCompactionAR(noahmp)

! snow layer combination
if ( NumSnowLayerNeg < 0 ) call SnowLayerCombine(noahmp)
Expand Down
Loading