|
| 1 | +(lstda)= |
| 2 | +# Land Surface Temperature Data Assimilation # |
| 3 | + |
| 4 | +Land Surface Temperature data assimilation (LST-DA) in TSMP-PDAF enables |
| 5 | +the assimilation of remotely-sensed land surface temperature (LST) |
| 6 | +observations into the eCLM land-surface model. The analysis step updates |
| 7 | +one or more temperature variables in the CLM state, and auxiliary masking |
| 8 | +and increment-clipping parameters allow the update to be restricted to |
| 9 | +physically meaningful regimes. |
| 10 | + |
| 11 | +## Configuration ## |
| 12 | + |
| 13 | +LST-DA is controlled by five parameters in the [`[CLM]` section of |
| 14 | +`enkfpf.par`](enkfpf:clm): |
| 15 | + |
| 16 | +- [`CLM:update_T`](enkfpf:clm:update_T): selects which CLM temperature |
| 17 | + variables are placed in the state vector and updated after the analysis |
| 18 | + step. |
| 19 | +- [`CLM:T_mask_snow`](enkfpf:clm:T_mask_snow): optionally masks out |
| 20 | + columns with snow cover from the temperature update. |
| 21 | +- [`CLM:increment_type`](enkfpf:clm:increment_type): switches between |
| 22 | + multiplicative (default) and additive increments. |
| 23 | +- [`CLM:T_max_increment`](enkfpf:clm:T_max_increment): clips additive |
| 24 | + increments to a maximum magnitude (only relevant when |
| 25 | + `CLM:increment_type=1`). |
| 26 | +- [`CLM:T_mask_T`](enkfpf:clm:T_mask_T): masks out columns whose |
| 27 | + surface-layer soil temperature falls below a threshold close to |
| 28 | + freezing. |
| 29 | + |
| 30 | +When LST-DA is active (`CLM:update_T != 0`), the temperature state |
| 31 | +variables replace the soil water content (SWC) in the state vector. |
| 32 | +Simultaneous assimilation of SWC and LST in the same PDAF update step is |
| 33 | +not supported. |
| 34 | + |
| 35 | +## State Vector ## |
| 36 | + |
| 37 | +The state vector content depends on `CLM:update_T`. For options 2 and 3 |
| 38 | +the state vector is defined at the gridcell level (one value per grid |
| 39 | +cell); for option 1 it is defined at the patch level. |
| 40 | + |
| 41 | +| `update_T` | State vector variables | |
| 42 | +|:-----------|:-------------------------------------------------------------| |
| 43 | +| `1` | `t_grnd` (per patch) + `t_veg` (per patch) | |
| 44 | +| `2` | `t_skin` (per gridcell) + `t_soisno` (all `nlevgrnd` layers) | |
| 45 | +| | + `t_veg` (per gridcell) | |
| 46 | +| `3` | Same as `2`, plus `t_grnd` (per gridcell) | |
| 47 | + |
| 48 | +## Observation Operator ## |
| 49 | + |
| 50 | +The observation operator maps the CLM state to a simulated LST: |
| 51 | + |
| 52 | +- **Option 1**: The simulated LST is computed from `t_grnd` and |
| 53 | + `t_veg` using the radiometric mixing formula of [Kustas & Anderson |
| 54 | + (2009)](https://doi.org/10.1016/j.agrformet.2009.05.016) (Eq. 7), |
| 55 | + weighted by leaf area index (LAI). |
| 56 | +- **Options 2 and 3**: The skin temperature `t_skin` is used directly as |
| 57 | + the simulated LST. Observations are indexed at the gridcell level |
| 58 | + (one observation per grid cell). |
| 59 | + |
| 60 | +## Increment Application ## |
| 61 | + |
| 62 | +After the PDAF analysis step, the updated state vector values are written |
| 63 | +back to the CLM temperature arrays. Two increment modes are available, |
| 64 | +selected via [`CLM:increment_type`](enkfpf:clm:increment_type): |
| 65 | + |
| 66 | +**Multiplicative increment** (`CLM:increment_type=0`, default): |
| 67 | +Each temperature variable is scaled by the ratio of the posterior to the |
| 68 | +prior gridcell-mean skin temperature: |
| 69 | + |
| 70 | +``` |
| 71 | +t_update = t_prior × (TSKIN_out / TSKIN_in) |
| 72 | +``` |
| 73 | + |
| 74 | +**Additive increment** (`CLM:increment_type=1`): |
| 75 | +The difference between posterior and prior gridcell-mean TSKIN is added |
| 76 | +directly to each temperature variable: |
| 77 | + |
| 78 | +``` |
| 79 | +t_update = t_prior + (TSKIN_out - TSKIN_in) |
| 80 | +``` |
| 81 | + |
| 82 | +When `CLM:increment_type=1`, the increment is clipped to |
| 83 | +`±CLM:T_max_increment` (default 5 K). Increments that exceed this |
| 84 | +threshold are replaced by the clipped value and a warning counter is |
| 85 | +incremented; the total number of clipped increments is printed after each |
| 86 | +analysis step. |
| 87 | + |
| 88 | +## Masking ## |
| 89 | + |
| 90 | +Two independent masking conditions can suppress the update for individual |
| 91 | +columns or grid cells: |
| 92 | + |
| 93 | +**Snow masking** (`CLM:T_mask_snow`): When set to `1`, columns with a |
| 94 | +snow depth ≥ 1 mm are excluded from the temperature update. This avoids |
| 95 | +applying a bare-soil LST increment to snow-covered grid cells. |
| 96 | + |
| 97 | +**Freeze masking** (`CLM:T_mask_T`): The update is suppressed whenever |
| 98 | +the soil/snow temperature of the surface layer (`t_soisno(:,1)`) falls |
| 99 | +below `T_freeze + CLM:T_mask_T`. With the default value of `0`, this |
| 100 | +masks all grid cells at or below the freezing point (273.15 K). |
| 101 | + |
| 102 | +Both masks are evaluated independently for each patch or column. |
| 103 | + |
| 104 | +## Safety Checks ## |
| 105 | + |
| 106 | +- NaN checks are applied to all updated temperature variables; a warning |
| 107 | + is printed to stdout if a NaN value is detected. |
| 108 | +- Clipped additive increments are counted per analysis step and the total |
| 109 | + is printed for `t_skin`, `t_soisno`, `t_veg`, and `t_grnd` separately. |
| 110 | +- The update is skipped entirely for a given patch/column if the |
| 111 | + gridcell-mean TSKIN change falls below `1e-7 K` (numerical tolerance). |
| 112 | + |
| 113 | +## Configuration Examples ## |
| 114 | + |
| 115 | +### Assimilate LST into ground and vegetation temperature (option 1) ### |
| 116 | + |
| 117 | +```text |
| 118 | +[CLM] |
| 119 | +update_T = 1 |
| 120 | +increment_type = 0 |
| 121 | +``` |
| 122 | + |
| 123 | +The simulated LST is computed from `t_grnd` and `t_veg` via the |
| 124 | +[Kustas & Anderson (2009)](https://doi.org/10.1016/j.agrformet.2009.05.016) |
| 125 | +radiometric mixing formula. Both variables are updated with a |
| 126 | +multiplicative increment. |
| 127 | + |
| 128 | +### Assimilate LST into skin and soil temperature (option 2) ### |
| 129 | + |
| 130 | +```text |
| 131 | +[CLM] |
| 132 | +update_T = 2 |
| 133 | +increment_type = 0 |
| 134 | +T_mask_snow = 1 |
| 135 | +T_mask_T = 0.0 |
| 136 | +``` |
| 137 | + |
| 138 | +TSKIN is used as the simulated LST. After analysis, `t_skin`, all |
| 139 | +`t_soisno` layers, and `t_veg` are scaled by the TSKIN increment factor. |
| 140 | +Snow-covered columns are excluded from the update. |
| 141 | + |
| 142 | +### Assimilate LST with additive increment and clipping (option 2) ### |
| 143 | + |
| 144 | +```text |
| 145 | +[CLM] |
| 146 | +update_T = 2 |
| 147 | +increment_type = 1 |
| 148 | +T_max_increment = 3.0 |
| 149 | +T_mask_T = 2.0 |
| 150 | +``` |
| 151 | + |
| 152 | +The TSKIN increment is applied additively and clipped to ±3 K. Grid cells |
| 153 | +whose surface-layer temperature falls below 275.15 K (freezing + 2 K) are |
| 154 | +excluded. |
| 155 | + |
| 156 | +### Assimilate LST including ground temperature (option 3) ### |
| 157 | + |
| 158 | +```text |
| 159 | +[CLM] |
| 160 | +update_T = 3 |
| 161 | +increment_type = 0 |
| 162 | +T_mask_snow = 1 |
| 163 | +``` |
| 164 | + |
| 165 | +Like option 2, but `t_grnd` is additionally included in the state vector |
| 166 | +and updated. Snow-covered columns are masked out. |
0 commit comments