# Question on SUEWS sensitivity to vegetation parameters

**URL:** <https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31>\
**Category:** General\
**Created:** [29 January 2026 14:52 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31 "2026-01-29T14:52:47Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Janka](https://avatars.discourse-cdn.com/v4/letter/j/df705f/32.png) [@Janka](https://community.suews.io/u/Janka)\
**Post date:** [29 January 2026 14:52 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/1 "2026-01-29T14:52:47Z")

</div>

Hi! Thanks for adding me to the forum 🙂

I’m setting up an impact study (following the SUEWS Tutorial 3.1.3) to investigate the effects of various vegetation-related parameters on SUEWS output. So far, I’ve modified surface fractions, LAImax, maxconductance and waterdist parameters. I’m working with input data from Gothenburg.

As expected, I see a large effect of changing surface cover fractions on the output energy fluxes. Increasing tree cover from 5% to 30% increases QE by over 100 W m⁻² on warm days - makes sense. However, changing LAImax for trees (between 2.5 and 7) appears to have a negligible effect, with ΔQE under 0.01 W m⁻² even at a tree cover of 50%.

I’m new to both Python and SUEWS, so I assume that I either made a coding mistake or misunderstand the model behavior 🙂 I’ll be grateful for any tips.

Thanks in advance!

Janka

---

<div class="post-metadata">

**Author:** ![sunt05](https://dub1.discourse-cdn.com/flex014/user_avatar/community.suews.io/sunt05/32/5_2.png) [@sunt05](https://community.suews.io/u/sunt05)\
**Post date:** [29 January 2026 15:37 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/2 "2026-01-29T15:37:07Z")

</div>

Welcome to the forum, Janka! This is a good question — the near-zero LAI sensitivity does look suspicious.

Your surface fraction results are behaving exactly as expected, which tells us the basic setup is sound. The LAI issue is worth debugging though, because SUEWS uses LAI to scale canopy conductance via the Jarvis-type stomatal model, so a change from 2.5 to 7 should produce a noticeable difference in QE during the growing season.

A few things to check:

1. **Time period** — what months are you running? If the simulation covers winter or early spring, the model’s LAI profile may not have reached the maximum values you set. LAImax only matters during peak growing season. Try comparing runs for July–August specifically.

2. **LAI profile propagation** — after changing LAImax, check that the daily LAI values in the output actually differ between your runs. If they look identical, the parameter change may not be reaching the model correctly.

3. **Moisture availability** — if soil moisture is very low, the stomatal conductance gets clamped regardless of LAI. Check whether your runs are hitting moisture stress limits, especially if the Gothenburg input data covers a dry period.

4. **Other conductance controls** — since you also modified maxconductance, double-check that those changes aren’t interacting with the LAI experiment. Running one parameter at a time makes it easier to isolate effects.

To help us dig further, could you share:

- Your SUEWS version — run `supy.show_version()` in your notebook (that’s a SuPy utility function)
- The full `config.yaml` or equivalent notebook setup you’re using
- Which months/year the simulation covers

That way we can reproduce what you’re seeing and pinpoint where the LAI change drops out.

---

<div class="post-metadata">

**Author:** ![Janka](https://avatars.discourse-cdn.com/v4/letter/j/df705f/32.png) [@Janka](https://community.suews.io/u/Janka)\
**Post date:** [29 January 2026 21:15 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/3 "2026-01-29T21:15:32Z")

</div>

Hi,  
Many thanks for such a quick and detailed reply! To answer your questions:

1. I’m running two full years, 2017-2018. For plotting and statistics I’m analysing two periods in the summer of 2018 (warm and wet, hot and dry). LAI has near-zero effects in both (and all other periods I tested).

2. Output LAI values change according to the LAImax I set (different in each “grid”), nothing suspicious there as far as I can see.

3. That was my first thought, since I knew that LAI was used in gs calculations. But the effect is near-zero even after precipitation events. Could you clarify how I can check if my runs are hitting moisture stress limits?

4. I’m modifying one parameter at a time (except when necessary, like when increasing tree cover I decrease paved surface cover accordingly) and leave the other parameters as default.

I’m using SuPy 2025.11.20rc1. Attaching my weather and yaml file - it’s data for a single grid (grid 7) cut out from a multigrid study area, since the impact study itself uses the grid structure. If it helps I can also share my code.

Many thanks again!

[kv7.yml](https://community.suews.io/uploads/short-url/cXztDiDrJvmuDJQ6QNgVtE1b27z.yml) (80.1 KB)

[kv\_2017\_data\_60.txt](https://community.suews.io/uploads/short-url/qdfBjwOkpIqo5IAPxly7zX7FKwA.txt) (2.9 MB)

---

<div class="post-metadata">

**Author:** ![sunt05](https://dub1.discourse-cdn.com/flex014/user_avatar/community.suews.io/sunt05/32/5_2.png) [@sunt05](https://community.suews.io/u/sunt05)\
**Post date:** [30 January 2026 07:10 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/4 "2026-01-30T07:10:48Z")

</div>

Thanks for the detailed follow-up and for sharing your files, Janka — that made it much easier to track down what’s going on.

The good news is there’s nothing wrong with your code or setup. The near-zero LAI sensitivity is actually expected behaviour given how SUEWS computes surface conductance. Here’s why.

**How LAI enters the conductance calculation**

The Jarvis-type surface resistance model computes a LAI factor (g\_\mathrm{LAI}) as:

g\_\mathrm{LAI} = \sum\_{v} \left[f\_v \cdot \frac{\mathrm{LAI}\_v}{\mathrm{LAI}\_{\max,v}} \cdot g\_{s,\max,v} \right]

where f\_v is the surface fraction, \mathrm{LAI}\_v is the daily LAI, \mathrm{LAI}\_{\max,v} is the configured maximum LAI, and g\_{s,\max,v} is `MaxConductance` for each vegetation type v.

The key is the \mathrm{LAI}/\mathrm{LAI}\_{\max} ratio. During peak summer, the phenology model grows LAI up to \mathrm{LAI}\_{\max} — which you confirmed is happening — so the ratio becomes:

\frac{\mathrm{LAI}\_{\max}}{\mathrm{LAI}\_{\max}} = 1.0

regardless of what value you set for \mathrm{LAI}\_{\max}. The numerator and denominator cancel out.

In other words, \mathrm{LAI}\_{\max} in SUEWS doesn’t control how much a tree transpires at full canopy — it controls the _timing_ of the seasonal cycle (when the canopy reaches “fully developed”). The actual magnitude of transpiration at full development is controlled by `MaxConductance` (g\_{s,\max}).

**Why surface fractions work but LAImax doesn’t**

Surface fractions (f\_v) enter the same formula as a direct multiplier with no normalisation, so they scale g\_\mathrm{LAI} linearly — exactly what you observed with the 100+ W m⁻² QE response.

**What to use instead**

For your impact study, if you want to simulate “denser canopy → more transpiration”, vary `MaxConductance` rather than `LAImax`. In your config, these are set per vegetation type:

- Evergreen trees: `maxconductance: 1.7` mm s⁻¹
- Deciduous trees: `maxconductance: 3.1` mm s⁻¹
- Grass: `maxconductance: 3.7` mm s⁻¹

Increasing `maxconductance` for trees will directly increase canopy conductance and hence QE — no normalisation to cancel the signal.

The small residual (~0.01 W m⁻²) you saw comes from transition periods in early summer where the LAI growth trajectory differs slightly between runs, but this vanishes once LAI reaches its configured maximum.

Hope this helps!

---

<div class="post-metadata">

**Author:** ![Janka](https://avatars.discourse-cdn.com/v4/letter/j/df705f/32.png) [@Janka](https://community.suews.io/u/Janka)\
**Post date:** [30 January 2026 08:58 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/5 "2026-01-30T08:58:20Z")

</div>

Thanks so much for taking the time to explain this, Ting! That is really helpful, and reassuring to know I wasn’t running a broken code 🙂

Modifying gs max gives a QE response of roughly 5–30 W m⁻² over the periods I’m testing. That’s noticeably weaker than the response to changing tree cover, which makes sense, I think.

In terms of other parameters to explore: besides tree cover, LAImax and gs max, I’ve started looking at water distribution and some soil properties (e.g. soil depth and water storage capacity). If you have recommendations for other parameters that tend to be influence the cooling or water use, I’d be very interested to hear. Do I understand correctly that tree height doesn’t directly influence canopy transpiration?

I’ve been discussing QE responses here, but actually my goal is to evaluate the cooling efficiency of different urban vegetation types. Fredrik mentioned that T2 could be somewhat problematic to model, so if you have any advice on how best to configure or interpret the model for this purpose, I’d really appreciate any tips. (Edit: I see Fredrik has already asked a separate question about it:)

Thanks again!

---

<div class="post-metadata">

**Author:** ![sunt05](https://dub1.discourse-cdn.com/flex014/user_avatar/community.suews.io/sunt05/32/5_2.png) [@sunt05](https://community.suews.io/u/sunt05)\
**Post date:** [30 January 2026 13:25 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/6 "2026-01-30T13:25:24Z")

</div>

Glad to hear the `MaxConductance` approach is working — and that the magnitude makes physical sense compared to the surface fraction response.

**Other parameters worth exploring**

For cooling and water use, the most influential parameters in SUEWS tend to be:

- **Surface fractions** (which you’ve already tested — this is the dominant lever)
- **`MaxConductance`** (g\_{s,\max}) — now confirmed working for you
- **Soil storage capacity** (`soildepth`, `soilstorecap`) — controls how long the soil can sustain transpiration between rain events, so it shapes the dry-spell response rather than peak cooling
- **Water distribution** (`waterdist`) — governs how rainfall/irrigation runoff is redistributed between surfaces, which affects soil moisture availability
- **Irrigation parameters** — if you’re comparing irrigated vs non-irrigated green infrastructure scenarios

On **tree height** : you’re right that it doesn’t directly affect stomatal conductance or the g\_\mathrm{LAI} calculation. It enters SUEWS indirectly through the roughness length (z\_{0m}) and displacement height (z\_d), which determine the aerodynamic resistance R\_A. In the Penman-Monteith equation:

Q\_E = \frac{s \cdot Q\_{n,e} + \rho c\_p \cdot \mathrm{VPD} / R\_A}{s + \gamma\left(1 + R\_S / R\_A\right)}

a lower R\_A (from taller roughness elements) increases the VPD-driven term in the numerator and also changes the R\_S/R\_A balance in the denominator. So taller trees can modestly increase QE, but the effect is secondary compared to g\_{s,\max} and surface fractions.

**On T2 and cooling efficiency**

I’ve seen Fredrik’s [separate post](https://community.suews.io/t/how-to-best-model-within-canyon-air-temperature/34) about T2 — I’ll reply there with more detail on the physics settings and profile scheme configuration. The short version: T2 sensitivity in SUEWS depends heavily on which RSL (roughness sub-layer) method you’re using (`rslmethod`) and how the vertical temperature profile is constructed. Your config uses `rslmethod: 2`, which is the more physically-based option, but there are some important considerations for intra-urban comparisons that I’ll cover in that thread.

---

<div class="post-metadata">

**Author:** ![Janka](https://avatars.discourse-cdn.com/v4/letter/j/df705f/32.png) [@Janka](https://community.suews.io/u/Janka)\
**Post date:** [30 January 2026 13:43 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/7 "2026-01-30T13:43:32Z")

</div>

Many thanks again. It seems I’m looking at the right parameters then!

Just a follow-up question about:

> [@sunt05](#):
>
> Check whether your runs are hitting moisture stress limits

Can you elaborate on how to check this? Thanks.

---

<div class="post-metadata">

**Author:** ![sunt05](https://dub1.discourse-cdn.com/flex014/user_avatar/community.suews.io/sunt05/32/5_2.png) [@sunt05](https://community.suews.io/u/sunt05)\
**Post date:** [30 January 2026 13:49 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/8 "2026-01-30T13:49:44Z")

</div>

In the SUEWS hourly output, check `SMD` (soil moisture deficit, in mm) — when it’s high, the soil is dry and transpiration is limited. You can also look at `g_smd` in the conductance diagnostics, which is the soil moisture stress factor (0–1). When `g_smd` drops close to zero, moisture is the binding constraint on conductance regardless of other parameters.

Comparing `SMD` time series between your runs will show whether soil moisture is diverging or staying similar.

---

<div class="post-metadata">

**Author:** ![Janka](https://avatars.discourse-cdn.com/v4/letter/j/df705f/32.png) [@Janka](https://community.suews.io/u/Janka)\
**Post date:** [30 January 2026 13:51 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/9 "2026-01-30T13:51:16Z")

</div>

Thanks! I’ve been plotting SMD already, but haven’t checked the g\_smd yet - will do.

---

<div class="post-metadata">

**Author:** ![Janka](https://avatars.discourse-cdn.com/v4/letter/j/df705f/32.png) [@Janka](https://community.suews.io/u/Janka)\
**Post date:** [31 January 2026 19:29 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/10 "2026-01-31T19:29:03Z")

</div>

> [@sunt05](#):
>
> In other words, \mathrm{LAI}\_{\max} in SUEWS doesn’t control how much a tree transpires at full canopy — it controls the _timing_ of the seasonal cycle (when the canopy reaches “fully developed”).

Just a follow up question on this - what does LAImax actually control then? There must be a reason LAImax has three different values for the three vegetation types instead of a single relative parameter defining whether LAImax is reached or not. In your first answer you mentioned that a change from 2.5 to 7 should produce a noticeable difference in QE during the growing season. Still not sure how to interprete the results.

---

<div class="post-metadata">

**Author:** ![sunt05](https://dub1.discourse-cdn.com/flex014/user_avatar/community.suews.io/sunt05/32/5_2.png) [@sunt05](https://community.suews.io/u/sunt05)\
**Post date:** [31 January 2026 20:18 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/11 "2026-01-31T20:18:03Z")

</div>

Good question — let me clarify what `LAImax` actually controls in the model. My earlier comment that a change from 2.5 to 7 “should produce a noticeable difference” was loosely worded — I was thinking about the growth dynamics, but the actual effect on QE is negligible for the reasons below.

**What controls seasonal timing**

The _timing_ of the seasonal LAI cycle is driven by the GDD (growing degree day) parameters: `BaseT`, `GDDFull`, `SDDFull`, and the `LAIPower` growth/senescence coefficients. These determine when leaves start growing, how fast, and when senescence begins. `LAImax` doesn’t appear in the growth equation itself.

What `LAImax` does is act as a **clamp** — the phenology model computes a daily LAI increment from temperature and the previous day’s LAI, and then the result is clipped to stay within [\mathrm{LAI}\_{\min},\, \mathrm{LAI}\_{\max}]. Each vegetation type has different bounds because they have genuinely different leaf area ranges (evergreen trees: 4.0–5.1, deciduous trees: 1.0–5.5, grass: 1.6–5.9 in your config).

**Why the clamp doesn’t propagate to QE**

`LAImax` also appears as a **normalisation constant** in the conductance formula:

g\_\mathrm{LAI} = \sum\_v \left[f\_v \cdot \frac{\mathrm{LAI}\_v}{\mathrm{LAI}\_{\max,v}} \cdot g\_{s,\max,v} \right]

These two roles cancel: a higher `LAImax` lets LAI grow to a higher value, but that higher value is divided by the same higher `LAImax`. At peak summer when LAI has reached its clamp, the ratio is always 1.0. During the growth phase there’s a marginal difference in how many days LAI takes to hit the ceiling, but this is a small effect — which explains the ~0.01 W m⁻² residual you observed.

So in practice, `LAImax` is effectively a rescaler with minimal impact on model outputs. The real levers remain `MaxConductance` for transpiration magnitude, surface fractions for vegetated area, and the GDD parameters for seasonal timing.

---

<div class="post-metadata">

**Author:** ![biglimp](https://avatars.discourse-cdn.com/v4/letter/b/b19c9b/32.png) [@biglimp](https://community.suews.io/u/biglimp)\
**Post date:** [3 February 2026 13:32 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/12 "2026-02-03T13:32:41Z")

</div>

A follow-up question on this topic. So LAI does NOT have an effect radiation (as stated in some of the publications, e.g. Omvidar et al.) but it just is used to shift albedo for e.g. grass from alb\_min and alb\_max? Thus, we do not see any changes in Qstar when we change LAI\_max?

---

<div class="post-metadata">

**Author:** ![sunt05](https://dub1.discourse-cdn.com/flex014/user_avatar/community.suews.io/sunt05/32/5_2.png) [@sunt05](https://community.suews.io/u/sunt05)\
**Post date:** [3 February 2026 16:29 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/13 "2026-02-03T16:29:58Z")

</div>

Shifting albedo _is_ how LAI affects radiation in SUEWS — they’re the same thing. So yes, LAI does affect Q\* as Omidvar et al. describe.

The reason you don’t see Q\* changes when varying `LAImax`: it only normalises the interpolation rate between AlbMin and AlbMax. The bounds themselves stay fixed, so at peak season the result is the same.

---

<div class="post-metadata">

**Author:** ![Janka](https://avatars.discourse-cdn.com/v4/letter/j/df705f/32.png) [@Janka](https://community.suews.io/u/Janka)\
**Post date:** [5 February 2026 11:10 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/14 "2026-02-05T11:10:31Z")

</div>

Aaand one more follow-up question, as I’m learning a lot from the answers 🙂

The parameter that gives by far the strongest response is tree cover. I modify it by changing the relevant sfr\_surf in df\_state\_init, in the same way that albedo is modified in the tutorial. Specifically, I replace trees with paved surfaces and vice versa. Is this the correct approach? Could it cause problems that other parameters derived from the input surface model data (e.g. roughness parameters) remain unchanged while I modify the surface cover fractions?

---

<div class="post-metadata">

**Author:** ![sunt05](https://dub1.discourse-cdn.com/flex014/user_avatar/community.suews.io/sunt05/32/5_2.png) [@sunt05](https://community.suews.io/u/sunt05)\
**Post date:** [5 February 2026 12:58 UTC](https://community.suews.io/t/question-on-suews-sensitivity-to-vegetation-parameters/31/15 "2026-02-05T12:58:18Z")

</div>

It depends on which roughness scheme you’re using (`RoughLenMomMethod` in the config):

- **Method 1** : z0 and zd are fixed inputs — changing `sfr_surf` won’t update them automatically
- **Methods 2–4** : z0 and zd are recalculated from the surface fractions internally

If you’re using method 1, you’d need to update the roughness parameters manually when changing surface cover. With methods 2–4, your current approach is fine.

If this wasn’t clear from the documentation, let us know which part was confusing — that helps us improve it.
