Skip to content

LST-DA for eCLM-PDAF#22

Draft
jjokella wants to merge 73 commits intotsmp-pdaf-patchedfrom
tsmp-pdaf-patched-lstda
Draft

LST-DA for eCLM-PDAF#22
jjokella wants to merge 73 commits intotsmp-pdaf-patchedfrom
tsmp-pdaf-patched-lstda

Conversation

@jjokella
Copy link
Copy Markdown
Collaborator

@jjokella jjokella commented Oct 2, 2025

LST-DA is controlled by enkfpf.par input CLM:update_T.

@jjokella jjokella marked this pull request as draft October 2, 2025 11:33
jjokella added a commit to HPSCTerrSys/TSMP2 that referenced this pull request Oct 9, 2025
jjokella and others added 21 commits January 24, 2026 23:18
Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
if the absolute value of the increment is larger than
clmT_max_increment, use the clmT_max_increment as increment with the
sign of the actual increment.
Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
this is the same (TSKIN as first part of the state vector) for each
state vector variant of LSTDA
Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jjokella jjokella mentioned this pull request Mar 6, 2026
jjokella and others added 8 commits March 12, 2026 09:52
Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
  1. `spval filter on t_veg`: Excludes non-vegetated patches (t_veg = 1e36) from  
  TVEG averaging and updates. Falls back to TSKIN mean for fully non-vegetated
  gridcells instead of crashing.                                                
  2. `Per-column update guard (col_updated)`: Prevents TSOIL increments from being
   applied multiple times to the same column when multiple patches share it.
  3. `NaN check on increment_factor`: Fortran's abs(NaN) < threshold silently
  evaluates to .false., bypassing the cap. An explicit ieee_is_nan guard leaves
  the variable unchanged instead.
  4. `Temperature clamp [TKFRZ−130, TKFRZ+100]`: Last-resort physical bounds check
   on all updated temperatures.

---------

Co-authored-by: Visakh <visakhraja@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
## Summary

Extends the existing `CLM:statevec_max_layer` parameter (previously only active for the SWC state vector) to also cap the number of `t_soisno` layers included in the temperature state vector for `CLM:update_T = 2` and `CLM:update_T = 3`.

The effective number of soil layers is now `min(nlevgrnd, CLM:statevec_max_layer)` in both the state vector definition (`define_clm_statevec`) and the collection/distribution routines (`set_clm_statevec_T`, `update_clm_statevec_T`). The local observation dimension (`init_dim_l_clm`) is updated accordingly.

## Motivation

For typical LST-DA use cases only the near-surface soil layers are physically meaningful to update. Restricting the state vector depth reduces the ensemble state size and avoids spurious increments in deep layers that are not connected to the LST signal.

## Default behaviour

The default value of `CLM:statevec_max_layer` is 25, which equals the number of CLM5 soil layers — so existing configurations are unaffected.


---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
`CLM:update_T == 4/5`, see documentation for details

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant