Perennial plant growth problem

39 views
Skip to first unread message

marianna leone

unread,
Sep 21, 2026, 10:09:05 PMSep 21
to SWAT+

Hi everyone,

I am working on a SWAT+ model in Ethiopia using SWAT+ Editor 4.0.1 and Rev. 62, and I am experiencing a persistent issue with perennial vegetation.

Several perennial land covers, including range grasses (RNGE), forest (FRST), coffee (COFF) and RNGB, remain at their minimum LAI throughout the entire simulation period, while annual crops such as corn and wheat show normal seasonal LAI development and biomass growth.

For example, for RNGE I initially had:

LAI = 0.05 constantly
lai_max = 0
bm_grow = 0
c_gro = 0

I then replaced the generic RNGE plant with rnge_sudrf (subtropical dry forest range grasses). The model correctly reads the new plant definition because LAI changes from 0.05 to its new lai_min = 0.50, but it remains fixed at 0.50 for the whole simulation and biomass growth is still zero.

The plant community is initialized as already established vegetation:

lc_status = y
lai_init = 2.0
bm_init = 20000 kg/ha
yrs_init = 1.0

Therefore, I am not trying to simulate newly planted vegetation; the perennial cover should already be mature at the beginning of the simulation.

I have tested both temp_gro and moisture_gro growth triggers, as well as changes to dorm_hr, without any effect on LAI or biomass growth.

I also tested the fix/perennial-root-depth-init branch related to the recently reported perennial root-depth initialization issue. This had a very clear hydrological effect: plant transpiration and total ET increased substantially, confirming that the root-depth correction is relevant. However, LAI still remains exactly at lai_min and bm_grow remains zero.

As an additional diagnostic test, I modified plant_init.f90 so that perennial plants initialized with igro = "y" start with idorm = "n". The output was still unchanged, suggesting that the issue is not simply the initial dormancy flag.

The unusual point is that this behavior affects all the perennial vegetation classes I checked, whereas annual crops grow normally.

Has anyone observed a similar behavior in recent SWAT+ revisions? Is there an additional management operation, plant-community setting or phenology parameter required for an already-established perennial plant to resume seasonal growth? Or could this be related to the current perennial growth/dormancy logic?

This issue is particularly important in my case because perennial range vegetation covers approximately 76% of one of the study sub-basins, so the lack of perennial growth strongly affects simulated evapotranspiration.  

I can provide plant.ini, plants.plt, hru_pw_mon, and a minimal reproducible case if useful.

Thank you very much.

Céline Kauer

unread,
Sep 22, 2026, 11:08:10 PM (14 days ago) Sep 22
to SWAT+

Hi Marianna,

I believe I've found the root cause of this — I hit the exact same symptom (LAI frozen at lai_min, bm_grow = 0, for every perennial land cover, while annual crops grow normally) on my own SWAT+ rev 62 project. It's a confirmed bug, not a configuration issue: in src/pl_dormant.f90, line 35, rto is hardcoded to 0. (it should read pldb(idp)%bm_dieoff), and the Max(alai_min, ...) floor on the LAI reset was also removed. This forces LAI to exactly 0 at every dormancy cycle for perennials, regardless of dorm_hr, growth triggers, or plant-community settings — which matches why none of those changes affected your output.

There's an open GitHub issue tracking this with the full technical detail: https://github.com/swat-model/swatplus/issues/245

Natalja C.

unread,
Sep 23, 2026, 10:38:57 AM (13 days ago) Sep 23
to SWAT+
We can confirm that there are several bugs identified with perennials and should be fixed in the upcoming release!
Thank you all for your contributions and testing, as this helps drive the model development further!

Best,
Natalja

marianna leone

unread,
Sep 25, 2026, 11:16:01 AM (11 days ago) Sep 25
to Céline Kauer, SWAT+

Hi Céline,

Thanks a lot for this information; it is really useful!

I checked the source code of the version I am using and can confirm that my `pl_dormant.f90` file also contains:

`rto = 0.`

instead of `rto = pldb(idp)%bm_dieoff`; so, the issue you pointed out is indeed present in my local code as well.

At the same time, I had arrived at the problem by following a slightly different debugging path. First, I identified a separate issue regarding root depth initialization for perennial plants (#250). In my case, mature perennial vegetation was being initialized with an unrealistically shallow root depth. I then compiled the `fix/perennial-root-depth-init` branch and used the resulting executable for my tests. This change fixed the root depth initialization and significantly improved plant water uptake and evapotranspiration (ET). The root depth issue is therefore distinct from the dormancy matter you mentioned.

However, the root depth fix alone did not resolve the issue of stalled LAI / zero biomass growth for the RNGE land cover. Upon analyzing the plant growth routines, I discovered that with the RNGE definition I was testing, `phuacc` exceeded a value of 1, and the biomass growth calculation was no longer being performed. For the RNGE class, I therefore tested `moisture_gro` instead of `temp_gro`, combining it with a `mons` management operation to achieve a seasonal phenological reset. With this configuration, biomass growth resumed, and the LAI value began to vary seasonally.

Consequently, for my current test on RNGE, I am no longer relying on the `temp_gro` dormancy mode. However, other perennial vegetation classes in my model—specifically FRST—are still configured with `temp_gro`. I therefore intend to examine these as well, since they might also be affected by the issue in `pl_dormant` that you identified.

It appears, then, that I have had to deal with multiple independent issues regarding perennial vegetation: root depth initialization, the seasonal growth/reset behavior for RNGE, and the dormancy issue in `pl_dormant`.

Thanks again for pointing this out; it is very helpful for distinguishing between the various mechanisms involved.

https://github.com/swat-model/swatplus/issues/250?utm_source=chatgpt.com

Grace

unread,
Sep 25, 2026, 11:16:10 AM (11 days ago) Sep 25
to SWAT+

Related to this: I'm seeing a separate perennial issue in rev 62 where forest and grass surface residue stays very low (~350–600 kg/ha for forest), because autumn leaf drop for temp_gro perennials is always 0 (pl_leaf_senes.f90 L80 uses leaf_tov, which is only set for moisture_gro) and dormancy die-off is off (the same rto = 0 line). That makes the USLE C for forest ~0.35–0.5, close to bare soil. Details in GitHub #255. It would be great if the upcoming perennial fixes could cover litter/residue too. Willing to share project files, thanks!

Reply all
Reply to author
Forward
0 new messages