Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
c49edbe
first implementation of LST-DA
jjokella Dec 5, 2024
0fb734a
bugfix: re-introduce default for general update
jjokella Dec 12, 2024
b186564
bugfix: lai is a patch-array
jjokella Dec 12, 2024
35c9c93
bugfix: typo
jjokella Dec 12, 2024
929471f
dev: skin temperature state vector, first implementation
jjokella Dec 12, 2024
0f3738b
dev: skin temperature state vector, first implementation II
jjokella Dec 12, 2024
53998fb
bugfix: t_skin declarations
jjokella Dec 13, 2024
75ac19f
bugfix: location of `newgridcell = .false`
jjokella Jan 23, 2025
34a47ca
LST-DA with TSKIN: use same obs_index_p setting as for TG/TV
jjokella Jan 23, 2025
43d1ba3
LST-DA: state-vector with TSKIN, plus TG and TV
jjokella Jan 23, 2025
3df6fd0
LST-DA: state-vector with TSKIN, plus TSOIL and TV
jjokella Jan 23, 2025
9e88c2a
LST-DA: add debug output for first layer `t_soisno`
jjokella Jan 24, 2025
ff0373a
LST-DA: all temperature layers updated
jjokella Jan 28, 2025
4bd276d
bugfix: LST-DA missing `end do`
jjokella Jan 29, 2025
75eb0ec
Merge branch 'tsmp-pdaf-patched' into tsmp-pdaf-patched-lstda
jjokella Mar 17, 2025
d41c6b2
Merge branch 'tsmp-pdaf-patched' into tsmp-pdaf-patched-lstda
jjokella Apr 25, 2025
0778801
introduce `clmupdate_T.eq.4`
jjokella Apr 25, 2025
6d8babe
Merge branch 'tsmp-pdaf-patched' into tsmp-pdaf-patched-lstda
jjokella Oct 9, 2025
fb67c10
fortitude fixes
jjokella Oct 9, 2025
75f2b8d
keep indentation of SM-case
jjokella Oct 9, 2025
2b7f957
syntax fix
jjokella Oct 9, 2025
6a6706a
line length fixes
jjokella Oct 9, 2025
90cefc6
Merge branch 'tsmp-pdaf-patched' into tsmp-pdaf-patched-lstda
jjokella Oct 17, 2025
9936414
CI-fix: handle clmswc_mask_snow as integer (#29)
jjokella Oct 29, 2025
9625bee
Merge branch 'tsmp-pdaf-patched' into tsmp-pdaf-patched-lstda
jjokella Nov 14, 2025
319bd8c
style changes
jjokella Nov 14, 2025
35b1dc0
set_clm_statevec_T: debug output to dedicated subroutine
jjokella Nov 14, 2025
58501ab
update_clm_T: all declarations to dedicated subroutine
jjokella Nov 14, 2025
3847db7
compilation fixes
jjokella Nov 14, 2025
ee6cc3e
compilation fixes for DEBUG
jjokella Nov 14, 2025
7174f1b
add LSTDA of TSKIN/TVEG (clmupdate_T==5)
jjokella Nov 20, 2025
5c307e5
LSTDA for local filters: first implementation
jjokella Dec 11, 2025
d1cb4d3
bugfix
jjokella Dec 11, 2025
afc7202
bugfix: initialize and use begp, endp throughout init_n_domains_clm
jjokella Dec 11, 2025
95a0e5f
Merge branch 'tsmp-pdaf-patched' into tsmp-pdaf-patched-lstda
jjokella Dec 18, 2025
f9e886b
Merge branch 'tsmp-pdaf-patched-lstda' into tsmp-pdaf-patched-lstda-l…
jjokella Dec 18, 2025
747dee9
correct condition for tsoisno_mype.update.* debug output
jjokella Dec 19, 2025
58025fa
Merge branch 'tsmp-pdaf-patched-lstda' into tsmp-pdaf-patched-lstda-l…
jjokella Dec 19, 2025
38ffe0e
LSTDA: remove unused variants
jjokella Jan 23, 2026
2a5657f
Merge branch 'tsmp-pdaf-patched-lstda' into tsmp-pdaf-patched-lstda-l…
jjokella Jan 23, 2026
e67133a
remove unused index array
jjokella Jan 23, 2026
8eee110
small change
jjokella Jan 23, 2026
249c4ad
remove unused variable `pc`
jjokella Jan 24, 2026
1203bae
remove unused clmupdate_T values
jjokella Jan 24, 2026
b3d0415
LSTDA: remodel clmupdate_T==2 with gridcell-averages
jjokella Jan 24, 2026
78266fc
CLM:T_mask_snow: possibility to remove snow from LSTDA
jjokella Jan 30, 2026
43916e8
LSTDA: only update of first-layer-soil-temperature > freezing point
jjokella Jan 30, 2026
eb2f6bd
Merge branch 'tsmp-pdaf-patched' into tsmp-pdaf-patched-lstda-v2-3
jjokella Feb 13, 2026
cc24bd1
input CLM:T_mask_T: setting the temperature theshold for T-update
jjokella Feb 13, 2026
3cb7dbe
Merge branch 'tsmp-pdaf-patched-lstda' into tsmp-pdaf-patched-lstda-v2-3
jjokella Feb 13, 2026
aebde39
LST-DA: input option CLM:increment_type
jjokella Feb 25, 2026
9eaf7f5
LST-DA: input option CLM:T_max_increment
jjokella Feb 25, 2026
7a39038
Merge branch 'tsmp-pdaf-patched-lstda' into tsmp-pdaf-patched-lstda-v2-3
jjokella Feb 25, 2026
9b58f24
bugfix: remove the increment_type
jjokella Feb 25, 2026
b1f7664
LSTDA: clmupdate_T==3, added t_grnd to state vector
jjokella Feb 25, 2026
5583f0e
bugfixes: if-condition names
jjokella Feb 25, 2026
e6dcd08
LSTDA-bugfix: non-update set correctly
jjokella Feb 26, 2026
bde2960
LSTDA: restrict updates to clmT_max_increment
jjokella Feb 26, 2026
790316b
Merge branch 'tsmp-pdaf-patched-lstda' into tsmp-pdaf-patched-lstda-v2-3
jjokella Feb 27, 2026
2b707f9
LSTDA: smarter increment warning structure
jjokella Feb 27, 2026
2c06239
LSTDA: make observation indexing clmupdate_T independent
jjokella Mar 3, 2026
37dff5d
docs: small update
jjokella Mar 3, 2026
9fa596f
docs: updated documentation for CLM:update_T
jjokella Mar 3, 2026
8bb4e93
lstda: remove per-patch warnings
jjokella Mar 4, 2026
bb57ce5
fortitude fixes
jjokella Mar 5, 2026
7cdf348
docs: LST-DA documentation
jjokella Mar 12, 2026
9849a0d
Robustness guards for LSTDA (#50)
jjokella Apr 2, 2026
ceab81f
LSTDA: CLM:T_mask_snow_depth specifies snow depth for masking update
jjokella Apr 2, 2026
520a71b
LST-DA: extend CLM:statevec_max_layer to T state vector (#57)
jjokella Apr 2, 2026
3262782
n_lev_T fix
jjokella Apr 2, 2026
0423e36
LSTDA: Temperature of surface water in state vector (#48)
jjokella Apr 2, 2026
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
1 change: 1 addition & 0 deletions docs/_toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ parts:
- file: users_guide/running_tsmp_pdaf/input_cmd
- file: users_guide/running_tsmp_pdaf/input_obs
- file: users_guide/running_tsmp_pdaf/input_enkfpf
- file: users_guide/running_tsmp_pdaf/lst_da

- file: users_guide/debugging_tsmp_pdaf/README
title: Debugging TSMP-PDAF
Expand Down
3 changes: 3 additions & 0 deletions docs/users_guide/running_tsmp_pdaf/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ COSMO](cos)). Additionally, a control file for the data assimilation
Furthermore, some command line options ([Command line options](cmd))
need to be specified when TSMP-PDAF is executed.

For assimilation of land surface temperature observations into CLM, see
[Land Surface Temperature Data Assimilation](lstda).

See the Virtual Machine download on webpage
<https://datapub.fz-juelich.de/slts/tsmp-vm/index.html>.

Expand Down
147 changes: 133 additions & 14 deletions docs/users_guide/running_tsmp_pdaf/input_enkfpf.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ statevec_max_layer =
t_printensemble =
watmin_switch =
swc_mask_snow =
T_mask_snow =
T_mask_snow_depth =
increment_type =
T_mask_T =
T_max_increment =

[COSMO]
nprocs =
Expand Down Expand Up @@ -479,16 +484,48 @@ CLM (standalone only).
manual
<https://escomp.github.io/ctsm-docs/versions/release-clm5.0/html/tech_note/index.html>)

(enkfpf:clm:update_T)=
### CLM:update_T ###

`CLM:update_T`: (integer) Flag for updating of ground and vegetation
temperature.
`CLM:update_T`: (integer) Flag for updating temperature variables in
eCLM via LST data assimilation.

Currently only CLM3.5
State vector variables updated for each option:

- 0: No update of ground and vegetation temperature
- 0: No update of temperature variables.

- 1: Update of ground and vegetation temperature
- 1: Update of ground temperature (`t_grnd`) and vegetation
temperature (`t_veg`) directly. The simulated LST is computed from
`t_grnd` and `t_veg` using a radiometric mixing formula
([Kustas & Anderson, 2009](https://doi.org/10.1016/j.agrformet.2009.05.016),
Eq. 7) with LAI.

- 2: Gridcell-mean update of skin temperature (`t_skin`, not
prognostic), soil/snow temperatures (`t_soisno`,
`min(nlevgrnd, CLM:statevec_max_layer)` layers), and vegetation
temperature (`t_veg`). Each patch/column is updated based on
gridcell-mean increments and according to selected
[increment type](enkfpf:clm:increment_type). The observation
operator uses the skin temperature (TSKIN) as the simulated LST
equivalent.

- 3: Like `2`, but additionally updates ground temperature
(`t_grnd`). State vector: `t_skin`, `t_soisno`
(`min(nlevgrnd, CLM:statevec_max_layer)` layers), `t_veg`,
`t_grnd`.

- 4: Like `2`, but additionally updates surface water temperature
(`t_h2osfc`). State vector: `t_skin`, `t_soisno`
(`min(nlevgrnd, CLM:statevec_max_layer)` layers), `t_veg`,
`t_h2osfc`.

- 5: Like `3`, but additionally updates surface water temperature
(`t_h2osfc`). State vector: `t_skin`, `t_soisno`
(`min(nlevgrnd, CLM:statevec_max_layer)` layers), `t_veg`,
`t_grnd`, `t_h2osfc`.

See [Land Surface Temperature Data Assimilation](lstda) for a detailed
description.

### CLM:print_swc ###

Expand Down Expand Up @@ -546,25 +583,36 @@ If `0` (default): Use all columns and all layers.
If `1`: Use only hydrologically active columns and only layers until
bedrock.

(enkfpf:clm:statevec_max_layer)=
### CLM:statevec_max_layer ###

**Not yet in main branch**

`CLM:statevec_max_layer`: (integer) Number of layers to add in the
state vector.
`CLM:statevec_max_layer`: (integer) Maximum number of soil layers
included in the state vector.

Used in two contexts:

Only used, when `CLM:statevec_allcol` and `CLM:statevec_only_active`
are switched on.
- **SWC state vector**: when `CLM:statevec_allcol` and
`CLM:statevec_only_active` are both switched on, limits the number
of soil layers included per column.
- **T state vector**: when `CLM:update_T` is `2`, `3`, `4`, or `5`,
limits the number of `t_soisno` layers included. The effective number
of layers is `min(nlevgrnd, CLM:statevec_max_layer)`.

If `25` (default): All layers are in state vector.
If `25` (default): All layers are in the state vector (CLM5 has 25
soil layers by default, so this effectively means no restriction).

If `9`: Only the first nine layers in state vector (corresponds to 1.2
meter).
If `9`: Only the first nine layers are included (corresponds to
approximately 1.2 m depth).

For a depth profile of CLM layers, see [CLM Technical Note: 2.2.2.1
Soil
Layers](https://escomp.github.io/ctsm-docs/versions/master/html/tech_note/Ecosystem/CLM50_Tech_Note_Ecosystem.html#soil-layers).

See [Land Surface Temperature Data Assimilation](lstda) for context on
the T state vector use.

### CLM:t_printensemble ###

`CLM:t_printensemble`: (integer) The timestep for the state ensemble
Expand Down Expand Up @@ -595,12 +643,76 @@ are allowed.
`CLM:swc_mask_snow`: (integer) Switch for masking columns with snow
cover from SWC updates.

Snow covers larger than 1mm are switched off for the update.
Columns with snow depth ≥ 1 mm are excluded from the update.

Only takes effect if `CLM:update_swc``is switched on.

Default setting is `0`: No masking of columns with snow cover.

(enkfpf:clm:T_mask_snow)=
### CLM:T_mask_snow ###

`CLM:T_mask_snow`: (integer) Switch for masking columns with snow
cover from T updates.

When set to `1`, columns with a snow depth exceeding
`CLM:T_mask_snow_depth` are excluded from the temperature update.

Only takes effect if `CLM:update_T` is switched on.

Default setting is `0`: No masking of columns with snow cover.

(enkfpf:clm:T_mask_snow_depth)=
### CLM:T_mask_snow_depth ###

`CLM:T_mask_snow_depth`: (double) Snow depth threshold (m) used by
the snow masking condition. Columns with `snow_depth >=
CLM:T_mask_snow_depth` are excluded from the temperature update when
`CLM:T_mask_snow = 1`.

Only takes effect if `CLM:update_T` and `CLM:T_mask_snow` are both
switched on.

Default setting is `0.001` (1 mm).

(enkfpf:clm:increment_type)=
### CLM:increment_type ###

`CLM:increment_type`: (integer) Switch for changing increment type in
T-update.

- `0`: Multiplicative increment
- `1`: Additive increment

Only takes effect if `CLM:update_T` is switched on.

Default setting is `0`: Multiplicative increment.

(enkfpf:clm:T_max_increment)=
### CLM:T_max_increment ###

`CLM:T_max_increment`: (double) Maximum allowed magnitude of the
additive temperature increment (K).

Only takes effect if `CLM:update_T` is switched on and
`CLM:increment_type` is set to `1`.

Default setting is `5.0`: Updates larger than 5K are not applied.

(enkfpf:clm:T_mask_T)=
### CLM:T_mask_T ###

`CLM:T_mask_T`: (double) Offset above freezing (K) used as the
lower-temperature masking threshold. The update is suppressed whenever

```
t_soisno(:,1) < 273.15 K + CLM:T_mask_T.
```

Only takes effect if `CLM:update_T` is switched on.

Default setting is `0.`: Masking updates below freezing temperatures.

(enkfpf:cosmo)=
## [COSMO] ##

Expand Down Expand Up @@ -862,7 +974,7 @@ Default: 0, output turned off.
## Parameter Summary ##

| section | parameter | default value |
|:---------:|:-----------------------:|:-------------:|
|:----------|:------------------------|:--------------|
| `[PF]` | | |
| | `problemname` | \- |
| | `nprocs` | 0 |
Expand Down Expand Up @@ -892,6 +1004,8 @@ Default: 0, output turned off.
| | `problemname` | \- |
| | `nprocs` | 0 |
| | `update_swc` | 1 |
| | `update_texture` | 0 |
| | `update_T` | 0 |
| | `print_swc` | 0 |
| | `print_et` | 0 |
| | `statevec_allcol` | 0 |
Expand All @@ -900,6 +1014,11 @@ Default: 0, output turned off.
| | `statevec_max_layer` | 25 |
| | `t_printensemble` | -2 |
| | `watmin_switch` | 0 |
| | `T_mask_snow` | 0 |
| | `T_mask_snow_depth` | 0.001 |
| | `increment_type` | 0 |
| | `T_max_increment` | 5.0 |
| | `T_mask_T` | 0.0 |
| `[COSMO]` | | |
| | `nprocs` | 0 |
| | `dtmult` | 0 |
Expand Down
Loading
Loading