Commit 41a1357
Add CLM ET formulation improvements: PFT photosynthesis, canopy interception, Medlyn stomata (parflow#712)
## Summary
Fixes CLM3-era ET suppression by addressing four high-priority gaps
identified in the gap analysis (Jefferson et al. 2017, Lawrence et al.
2019):
- **PFT-dependent photosynthesis:** Vcmax 39–62 for forests (vs
hardcoded 33), C4 pathway for grasses/crops, with improved stomata (dark
respiration, smooth colimitation, niter=5). Activated automatically when
`vcmx25` is present in `drv_vegp.dat`.
- **Configurable canopy interception:** `InterceptionFpiMax` (default
0.25) and `FwetExponent` (default 0.6667) keys for CLM3 scheme tuning.
- **CLM5 tanh canopy interception:** `InterceptionScheme=CLM5Tanh` with
`InterceptionTanhAlpha` replaces CLM3's 0.25 ceiling with `fpi = alpha *
tanh(LAI+SAI)`, approaching 1.0 for LAI>2.
- **Medlyn stomatal conductance:** `StomataScheme=Medlyn` uses VPD-based
conductance (Medlyn et al. 2011) with PFT-dependent `g1_medlyn` values
in `drv_vegp.dat`.
All changes are backward-compatible: default key values and existing
`drv_vegp.dat` files reproduce original CLM3 behavior bit-for-bit.
## New PF Keys (5)
| Key | Default | Description |
|-----|---------|-------------|
| `Solver.CLM.InterceptionFpiMax` | 0.25 | Max interception fraction
(CLM3 scheme) |
| `Solver.CLM.FwetExponent` | 0.6667 | Wet canopy fraction exponent |
| `Solver.CLM.StomataScheme` | BallBerry | `BallBerry` or `Medlyn` |
| `Solver.CLM.InterceptionScheme` | CLM3 | `CLM3` or `CLM5Tanh` |
| `Solver.CLM.InterceptionTanhAlpha` | 1.0 | CLM5 tanh scaling
coefficient |
## New drv_vegp.dat parameters (7)
`vcmx25`, `c3psn`, `mp`, `bp`, `qe25`, `folnmx`, `g1_medlyn` — provided
via `drv_vegp_pft.dat`
Presence of `vcmx25` in vegp auto-sets `photosyn_custom=.true.` →
activates improved stomata physics (Rd, smooth colimitation, niter=5).
Old vegp files without these params → original CLM3 defaults →
bit-for-bit.
## Backward compatibility
- `photosyn_custom` boolean flag in `drv_readvegpf.F90` gates improved
stomata (not `isnan()`)
- Guarded fpi/fwet expressions use original Fortran literals at default
key values
- Original CLM3 stomata loop preserved verbatim in separate code path
- `InterceptionScheme` defaults to `CLM3` → existing fpi code path
unchanged
- New struct fields at END of `clm1d` to preserve existing field offsets
## Commits
1. `c0001aaf` — Add CLM ET formulation improvements: PFT photosynthesis,
canopy interception, Medlyn stomata
2. `9e09d14f` — Fix Black formatting in clm_et_interception.py
3. `58065fa3` — Fix uninitialized folnvt on custom photosynthesis path
4. `f272dfda` — Add CLM5 tanh canopy interception scheme
(InterceptionScheme key)
5. `b2969dbb` — Fix Uncrustify formatting in parflow_proto_f.h
## References
- Jefferson, J.L., Maxwell, R.M., and Constantine, P.G. (2017).
Exploring the sensitivity of photosynthesis and
stomatal resistance parameters in a land surface model. *J.
Hydrometeorol.* 18, 897–915.
- Lawrence, D.M., et al. (2019). The Community Land Model version 5.
*JAMES*, 11, 4245–4287.
- Medlyn, B.E., et al. (2011). Reconciling the optimal and empirical
approaches to modelling stomatal conductance. *Global Change Biol.* 17,
2134–2144.
- Collatz, G.J., et al. (1991). Physiological and environmental
regulation of stomatal conductance, photosynthesis and transpiration.
*Agric. For. Meteorol.* 54, 107–136.
## Test plan
- [x] All existing CLM tests pass bit-for-bit (clm, clm_snow_defaults, 8
snow tests)
- [x] 4 new CI tests: `clm_et_pft_photosynthesis`,
`clm_et_interception`, `clm_et_medlyn`, `clm_et_tanh_interception`
- [x] Validated against 8 AmeriFlux tower sites (latent heat flux)
- [x] Uncrustify (C) and Black (Python) formatting verified
- [x] CI pipeline passes on Linux
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Create at:
parflow/parflow@master...feature/clm_et
---------
Co-authored-by: Reed <rmaxwell@mines.edu>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Steven Smith <smith84@llnl.gov>1 parent 3454f34 commit 41a1357
104 files changed
Lines changed: 2240 additions & 69 deletions
File tree
- docs/user_manual
- pf-keys/definitions
- pfsimulator
- clm
- parflow_lib
- test
- correct_output
- clm_et_canopy_clumping
- clm_et_interception
- clm_et_medlyn
- clm_et_pft_photosynthesis
- clm_et_tanh_interception
- python/clm
- clm_input
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6839 | 6839 | | |
6840 | 6840 | | |
6841 | 6841 | | |
| 6842 | + | |
| 6843 | + | |
| 6844 | + | |
| 6845 | + | |
| 6846 | + | |
| 6847 | + | |
| 6848 | + | |
| 6849 | + | |
| 6850 | + | |
| 6851 | + | |
| 6852 | + | |
| 6853 | + | |
| 6854 | + | |
| 6855 | + | |
| 6856 | + | |
| 6857 | + | |
| 6858 | + | |
| 6859 | + | |
| 6860 | + | |
| 6861 | + | |
| 6862 | + | |
| 6863 | + | |
| 6864 | + | |
| 6865 | + | |
| 6866 | + | |
| 6867 | + | |
| 6868 | + | |
| 6869 | + | |
| 6870 | + | |
| 6871 | + | |
| 6872 | + | |
| 6873 | + | |
| 6874 | + | |
| 6875 | + | |
| 6876 | + | |
| 6877 | + | |
| 6878 | + | |
| 6879 | + | |
| 6880 | + | |
| 6881 | + | |
| 6882 | + | |
| 6883 | + | |
| 6884 | + | |
| 6885 | + | |
| 6886 | + | |
| 6887 | + | |
| 6888 | + | |
| 6889 | + | |
| 6890 | + | |
| 6891 | + | |
| 6892 | + | |
| 6893 | + | |
| 6894 | + | |
| 6895 | + | |
| 6896 | + | |
| 6897 | + | |
| 6898 | + | |
| 6899 | + | |
| 6900 | + | |
| 6901 | + | |
| 6902 | + | |
| 6903 | + | |
| 6904 | + | |
| 6905 | + | |
| 6906 | + | |
| 6907 | + | |
| 6908 | + | |
| 6909 | + | |
| 6910 | + | |
| 6911 | + | |
| 6912 | + | |
| 6913 | + | |
| 6914 | + | |
| 6915 | + | |
| 6916 | + | |
| 6917 | + | |
| 6918 | + | |
| 6919 | + | |
| 6920 | + | |
| 6921 | + | |
| 6922 | + | |
| 6923 | + | |
6842 | 6924 | | |
6843 | 6925 | | |
6844 | 6926 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
987 | 987 | | |
988 | 988 | | |
989 | 989 | | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
990 | 1056 | | |
991 | 1057 | | |
992 | 1058 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
24 | 26 | | |
25 | 27 | | |
26 | 28 | | |
27 | | - | |
| 29 | + | |
28 | 30 | | |
29 | 31 | | |
30 | 32 | | |
| |||
206 | 208 | | |
207 | 209 | | |
208 | 210 | | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
209 | 218 | | |
210 | 219 | | |
211 | 220 | | |
| |||
596 | 605 | | |
597 | 606 | | |
598 | 607 | | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
599 | 615 | | |
600 | 616 | | |
601 | 617 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
111 | 111 | | |
112 | 112 | | |
113 | 113 | | |
114 | | - | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
115 | 125 | | |
116 | 126 | | |
117 | 127 | | |
| |||
313 | 323 | | |
314 | 324 | | |
315 | 325 | | |
316 | | - | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
317 | 331 | | |
318 | 332 | | |
319 | 333 | | |
| |||
0 commit comments