Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
cbbf9ff
Merge pull request #22 from NCAR/develop
cenlinhe Nov 30, 2021
2e8ab9d
Merge pull request #23 from NCAR/develop
cenlinhe Dec 1, 2021
ab71a06
Update README.md
cenlinhe Dec 1, 2021
5abb3e7
re-structure driver directory
cenlinhe Dec 7, 2021
7396027
Merge pull request #26 from NCAR/develop
cenlinhe Jan 8, 2022
5eeddb8
Merge pull request #27 from NCAR/develop
cenlinhe Jan 10, 2022
3d82c45
Merge pull request #28 from NCAR/develop
cenlinhe Jan 13, 2022
aed82e1
Merge pull request #29 from NCAR/develop
cenlinhe Jan 14, 2022
f80b216
Merge pull request #31 from NCAR/develop
cenlinhe Jan 28, 2022
f837ac4
Merge pull request #36 from NCAR/develop
cenlinhe Mar 17, 2022
35b30b9
Merge pull request #39 from NCAR/develop
cenlinhe Mar 21, 2022
8b860ef
Merge pull request #42 from NCAR/develop
cenlinhe Mar 23, 2022
b0ec68c
Merge pull request #43 from NCAR/develop
cenlinhe Mar 31, 2022
a85b864
Merge pull request #45 from NCAR/develop
cenlinhe Apr 5, 2022
2fe8bf9
Merge pull request #48 from NCAR/develop
cenlinhe Sep 8, 2022
5bc08ad
Merge pull request #50 from NCAR/develop
cenlinhe Oct 3, 2022
e87559e
Merge pull request #52 from NCAR/develop
cenlinhe Oct 14, 2022
43bcf9d
Merge pull request #54 from NCAR/develop
cenlinhe Nov 20, 2022
ba1699d
Merge pull request #57 from NCAR/develop
cenlinhe Dec 1, 2022
4b7870f
Merge pull request #60 from NCAR/develop
cenlinhe Dec 23, 2022
7ee673e
Merge pull request #62 from NCAR/develop
cenlinhe Dec 23, 2022
9bec47b
release of Noah-MP version 5.0
cenlinhe Mar 10, 2023
e4a7ba7
release of Noah-MP version 5.0
cenlinhe Mar 10, 2023
8ef2ce5
Merge pull request #68 from NCAR/develop
cenlinhe Mar 10, 2023
0336915
Merge pull request #69 from NCAR/develop
cenlinhe Mar 10, 2023
1976239
Merge pull request #70 from NCAR/develop
cenlinhe Mar 10, 2023
a46e0b6
Merge pull request #71 from NCAR/develop
cenlinhe Mar 10, 2023
f01630e
Merge pull request #72 from NCAR/develop
cenlinhe Mar 14, 2023
fd0f6de
Merge pull request #74 from NCAR/develop
cenlinhe Mar 15, 2023
1a0cd57
Merge pull request #77 from NCAR/develop
cenlinhe Apr 13, 2023
bad7d70
Merge pull request #79 from NCAR/develop
cenlinhe May 6, 2023
6934a96
Merge pull request #81 from NCAR/develop
cenlinhe May 6, 2023
3cd2bcd
Merge pull request #89 from NCAR/develop
cenlinhe Jun 7, 2023
ba9f679
Merge pull request #94 from NCAR/develop
cenlinhe Jun 10, 2023
48329b3
Update README.md
cenlinhe Sep 8, 2023
0d7ba21
Update README.md
cenlinhe Sep 8, 2023
0cb07b5
Update README.md
cenlinhe Sep 8, 2023
32231c2
Update README.md
cenlinhe Sep 8, 2023
151daf8
Update README.md
cenlinhe Sep 8, 2023
2459ba8
Update README.md
cenlinhe Sep 8, 2023
e0d2064
bug fix for snow layer combine
cenlinhe Sep 19, 2023
a7dd399
bug fix for VegFrac scaling, issue #91-92
cenlinhe Sep 19, 2023
43b82b8
Merge branch 'master' into develop
cenlinhe Sep 19, 2023
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
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
![image](https://user-images.githubusercontent.com/43385564/236596277-45d492e7-79fd-4006-83e2-3044106afd94.png)
![noahmp_logo_update](https://github.com/NCAR/noahmp/assets/43385564/1fb47fc2-99bd-4360-9ed0-6d5656c29626)


[![DOI](https://zenodo.org/badge/236657733.svg)](https://zenodo.org/badge/latestdoi/236657733)


# Noah-MP Community Model Repository
# Noah-MP<sup>®</sup> Community Model Repository


Noah-MP is a widely-used state-of-the-art land surface model used in many research and operational weather/climate models (e.g., HRLDAS, WRF, MPAS, WRF-Hydro/NWM, NOAA/UFS, NASA/LIS, etc.).
Noah-MP<sup>®</sup> is a widely-used state-of-the-art land surface model used in many research and operational weather/climate models (e.g., HRLDAS, WRF, MPAS, WRF-Hydro/NWM, NOAA/UFS, NASA/LIS, etc.).

This is the official Noah-MP land surface model unified repository for code downloading and contribution. Noah-MP is a community open-source model developed with the contributions from the entire scientific community. For development, maintenance, and release of the community Noah-MP GitHub code, please contact: Cenlin He (cenlinhe@ucar.edu) and Fei Chen (feichen@ucar.edu).

Expand All @@ -27,7 +26,7 @@ Technical documentation freely available at http://dx.doi.org/10.5065/ew8g-yr95

**Original Noah-MP model description paper**: Niu, G. Y., Yang, Z. L., Mitchell, K. E., Chen, F., Ek, M. B., Barlage, M., ... & Xia, Y. (2011). The community Noah land surface model with multiparameterization options (Noah‐MP): 1. Model description and evaluation with local‐scale measurements. Journal of Geophysical Research: Atmospheres, 116(D12).

**Noah-MP version 5.0 model description paper**: He, C., Valayamkunnath, P., Barlage, M., Chen, F., Gochis, D., Cabell, R., Schneider, T., Rasmussen, R., Niu, G.-Y., Yang, Z.-L., Niyogi, D., and Ek, M.: Modernizing the open-source community Noah-MP land surface model (version 5.0) with enhanced modularity, interoperability, and applicability, EGUsphere [preprint], https://doi.org/10.5194/egusphere-2023-675, 2023.
**Noah-MP version 5.0 model description paper**: He, C., Valayamkunnath, P., Barlage, M., Chen, F., Gochis, D., Cabell, R., Schneider, T., Rasmussen, R., Niu, G.-Y., Yang, Z.-L., Niyogi, D., and Ek, M.: Modernizing the open-source community Noah with multi-parameterization options (Noah-MP) land surface model (version 5.0) with enhanced modularity, interoperability, and applicability, Geosci. Model Dev., 16, 5131–5151, https://doi.org/10.5194/gmd-16-5131-2023, 2023.


## Noah-MP GitHub structure
Expand Down
5 changes: 3 additions & 2 deletions src/CanopyHydrologyMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ subroutine CanopyHydrology(noahmp)
LeafAreaIndEff => noahmp%energy%state%LeafAreaIndEff ,& ! in, leaf area index, after burying by snow
StemAreaIndEff => noahmp%energy%state%StemAreaIndEff ,& ! in, stem area index, after burying by snow
FlagFrozenCanopy => noahmp%energy%state%FlagFrozenCanopy ,& ! in, used to define latent heat pathway
VegFrac => noahmp%energy%state%VegFrac ,& ! in, greeness vegetation fraction
SnowfallDensity => noahmp%water%state%SnowfallDensity ,& ! in, bulk density of snowfall [kg/m3]
CanopyLiqHoldCap => noahmp%water%param%CanopyLiqHoldCap ,& ! in, maximum intercepted liquid water per unit veg area index [mm]
CanopyLiqWater => noahmp%water%state%CanopyLiqWater ,& ! inout, intercepted canopy liquid water [mm]
Expand Down Expand Up @@ -67,7 +68,7 @@ subroutine CanopyHydrology(noahmp)

! canopy liquid water
! maximum canopy intercepted water
CanopyLiqWaterMax = CanopyLiqHoldCap * (LeafAreaIndEff + StemAreaIndEff)
CanopyLiqWaterMax = VegFrac * CanopyLiqHoldCap * (LeafAreaIndEff + StemAreaIndEff)

! canopy evaporation, transpiration, and dew
if ( FlagFrozenCanopy .eqv. .false. ) then ! Barlage: change to FlagFrozenCanopy
Expand All @@ -92,7 +93,7 @@ subroutine CanopyHydrology(noahmp)

! canopy ice
! maximum canopy intercepted ice
CanopyIceMax = 6.6 * (0.27 + 46.0/SnowfallDensity) * (LeafAreaIndEff + StemAreaIndEff)
CanopyIceMax = VegFrac * 6.6 * (0.27 + 46.0/SnowfallDensity) * (LeafAreaIndEff + StemAreaIndEff)

! canopy sublimation and frost
SublimCanopyIce = min( CanopyIce/MainTimeStep, SublimCanopyIce )
Expand Down
4 changes: 2 additions & 2 deletions src/CanopyWaterInterceptMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ subroutine CanopyWaterIntercept(noahmp)

! ----------------------- canopy liquid water ------------------------------
! maximum canopy water
CanopyLiqWaterMax = CanopyLiqHoldCap * (LeafAreaIndEff + StemAreaIndEff)
CanopyLiqWaterMax = VegFrac * CanopyLiqHoldCap * (LeafAreaIndEff + StemAreaIndEff)

! average rain interception and throughfall
if ( (LeafAreaIndEff+StemAreaIndEff) > 0.0 ) then
Expand All @@ -102,7 +102,7 @@ subroutine CanopyWaterIntercept(noahmp)

! ----------------------- canopy ice ------------------------------
! maximum canopy ice
CanopyIceMax = 6.6 * (0.27 + 46.0/SnowfallDensity) * (LeafAreaIndEff + StemAreaIndEff)
CanopyIceMax = VegFrac * 6.6 * (0.27 + 46.0/SnowfallDensity) * (LeafAreaIndEff + StemAreaIndEff)

! average snow interception and throughfall
if ( (LeafAreaIndEff+StemAreaIndEff) > 0.0 ) then
Expand Down
5 changes: 3 additions & 2 deletions src/ResistanceCanopyStomataBallBerryMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ subroutine ResistanceCanopyStomataBallBerry(noahmp, IndexShade)
PressureAtmosO2 => noahmp%energy%state%PressureAtmosO2 ,& ! in, atmospheric o2 pressure [Pa]
PressureAtmosCO2 => noahmp%energy%state%PressureAtmosCO2 ,& ! in, atmospheric co2 pressure [Pa]
ResistanceLeafBoundary => noahmp%energy%state%ResistanceLeafBoundary ,& ! in, leaf boundary layer resistance [s/m]
VegFrac => noahmp%energy%state%VegFrac ,& ! in, greeness vegetation fraction
RadPhotoActAbsSunlit => noahmp%energy%flux%RadPhotoActAbsSunlit ,& ! in, average absorbed par for sunlit leaves [W/m2]
RadPhotoActAbsShade => noahmp%energy%flux%RadPhotoActAbsShade ,& ! in, average absorbed par for shaded leaves [W/m2]
ResistanceStomataSunlit => noahmp%energy%state%ResistanceStomataSunlit ,& ! out, sunlit leaf stomatal resistance [s/m]
Expand All @@ -99,8 +100,8 @@ subroutine ResistanceCanopyStomataBallBerry(noahmp, IndexShade)
CF = PressureAirRefHeight / (8.314 * TemperatureAirRefHeight) * 1.0e06 ! unit conversion factor
ResistanceStomataTmp = 1.0 / ConductanceLeafMin * CF
PhotosynLeafTmp = 0.0
if ( IndexShade == 0 ) RadPhotoActAbsTmp = RadPhotoActAbsSunlit ! Sunlit case
if ( IndexShade == 1 ) RadPhotoActAbsTmp = RadPhotoActAbsShade ! Shaded case
if ( IndexShade == 0 ) RadPhotoActAbsTmp = RadPhotoActAbsSunlit / max(VegFrac,1.0e-6) ! Sunlit case
if ( IndexShade == 1 ) RadPhotoActAbsTmp = RadPhotoActAbsShade / max(VegFrac,1.0e-6) ! Shaded case

! only compute when there is radiation absorption
if ( RadPhotoActAbsTmp > 0.0 ) then
Expand Down
5 changes: 3 additions & 2 deletions src/ResistanceCanopyStomataJarvisMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ subroutine ResistanceCanopyStomataJarvis(noahmp, IndexShade)
VaporPresDeficitFac => noahmp%energy%param%VaporPresDeficitFac ,& ! in, Parameter used in vapor pressure deficit function
TemperatureCanopy => noahmp%energy%state%TemperatureCanopy ,& ! in, vegetation temperature [K]
PressureVaporCanAir => noahmp%energy%state%PressureVaporCanAir ,& ! in, canopy air vapor pressure [Pa]
VegFrac => noahmp%energy%state%VegFrac ,& ! in, greeness vegetation fraction
RadPhotoActAbsSunlit => noahmp%energy%flux%RadPhotoActAbsSunlit ,& ! in, average absorbed par for sunlit leaves [W/m2]
RadPhotoActAbsShade => noahmp%energy%flux%RadPhotoActAbsShade ,& ! in, average absorbed par for shaded leaves [W/m2]
ResistanceStomataSunlit => noahmp%energy%state%ResistanceStomataSunlit ,& ! out, sunlit leaf stomatal resistance [s/m]
Expand All @@ -67,8 +68,8 @@ subroutine ResistanceCanopyStomataJarvis(noahmp, IndexShade)
ResistanceTemp = 0.0
ResistanceVapDef = 0.0
ResistanceStomataTmp = 0.0
if ( IndexShade == 0 ) RadPhotoActAbsTmp = RadPhotoActAbsSunlit ! Sunlit case
if ( IndexShade == 1 ) RadPhotoActAbsTmp = RadPhotoActAbsShade ! Shaded case
if ( IndexShade == 0 ) RadPhotoActAbsTmp = RadPhotoActAbsSunlit / max(VegFrac,1.0e-6) ! Sunlit case
if ( IndexShade == 1 ) RadPhotoActAbsTmp = RadPhotoActAbsShade / max(VegFrac,1.0e-6) ! Shaded case

! compute MixingRatioTmp and MixingRatioSat
SpecHumidityTmp = 0.622 * PressureVaporCanAir / (PressureAirRefHeight - 0.378*PressureVaporCanAir) ! specific humidity
Expand Down
2 changes: 1 addition & 1 deletion src/SnowLayerCombineMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ subroutine SnowLayerCombine(noahmp)
SnowIce(J+1) = SnowIce(J+1) + SnowIce(J)
ThicknessSnowSoilLayer(J+1) = ThicknessSnowSoilLayer(J+1) + ThicknessSnowSoilLayer(J)
else
if ( NumSnowLayerOld < -1 ) then ! MB/KM: change to NumSnowLayerNeg
if ( NumSnowLayerNeg < -1 ) then ! MB/KM: change to NumSnowLayerNeg
SnowLiqWater(J-1) = SnowLiqWater(J-1) + SnowLiqWater(J)
SnowIce(J-1) = SnowIce(J-1) + SnowIce(J)
ThicknessSnowSoilLayer(J-1) = ThicknessSnowSoilLayer(J-1) + ThicknessSnowSoilLayer(J)
Expand Down