Skip to content

Fix: Correct grass albedo LAI-albedo relationship#1135

Open
sunt05 wants to merge 1 commit intomasterfrom
sunt05/gh1132-auto-init-alb-v1
Open

Fix: Correct grass albedo LAI-albedo relationship#1135
sunt05 wants to merge 1 commit intomasterfrom
sunt05/gh1132-auto-init-alb-v1

Conversation

@sunt05
Copy link

@sunt05 sunt05 commented Jan 28, 2026

Summary

Corrects the grass albedo update formula in the daily state module. Grass has a reversed LAI-albedo relationship compared to trees: increasing LAI should decrease albedo, not increase it.

Problem

The Fortran code (suews_phys_dailystate.f95, line 502) was using the same albedo update formula for all vegetation types:

albChangeGrass = (AlbMax_Grass - AlbMin_Grass)*deltaLAIGrass

This incorrectly increases grass albedo during the growing season, contradicting the physics (dense grass canopy absorbs more light than sparse grass over bright soil/litter).

Solution

Reversed the formula for grass to correctly model the negative LAI-albedo relationship:

albChangeGrass = (AlbMin_Grass - AlbMax_Grass)*deltaLAIGrass

Impact

Annual sample simulation (1-year, 2012 London/Swindon):

  • Bulk albedo range narrows from 0.0021 to 0.0012
  • Summer: albedo decreases by ~0.0009 (correct: dense canopy less reflective)
  • Winter: albedo increases by ~0.0009 (correct: exposed soil more reflective)
  • Energy balance changes: QN +0.06 W/m², QH +0.03 W/m², QS +0.04 W/m²

See issue #1134 for detailed impact analysis and plots.

Closes #1134

Grass has a reversed LAI-albedo relationship compared to trees: increasing
LAI should decrease albedo (bright soil/litter background replaced by
absorbing canopy). The Fortran code was incorrectly using the same formula
for all vegetation types.

This fix reverses the sign in the grass albedo update formula to correctly
model the physics. Updated reference test output reflects the corrected
energy balance.

Fixes #1134

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
@sunt05
Copy link
Author

sunt05 commented Jan 28, 2026

Impact analysis: 1-year sample simulation (2012, sample data based on London)

45 of 85 output variables changed; 40 unchanged. Changes are small but physically consistent with the corrected grass LAI-albedo relationship.

Bulk albedo seasonal pattern

Image
  • May-Sep (full foliage): AlbBulk decreases by ~0.0009 — old code wrongly had grass albedo at max; new code correctly places it at min (dense canopy absorbs more)
  • Nov-Dec (dormant): AlbBulk increases by ~0.0009 — sign reverses as expected (exposed bright soil/litter)
  • Annual range narrows from 0.0021 to 0.0012

Energy balance differences (daily)

Image

Monthly summary

Image

Annual mean changes

  • Kup: -0.07 W/m² (less reflection in summer)
  • QN: +0.06 W/m² (more energy absorbed)
  • QS: +0.04 W/m², peak |diff| = 2.23 W/m² (June)
  • QH: +0.03 W/m², peak |diff| = 1.87 W/m²
  • QE: +0.002 W/m²

Impact is modest for this sample site due to small grass fraction and narrow albedo range. Sites with larger grass fractions would show proportionally larger corrections.

@sunt05 sunt05 added the 4-needs-discussion Agenda item for weekly catch-up meeting label Jan 30, 2026
@MatthewPaskin
Copy link

@sunt05 Is this ready for review? We are interested to get this grass albedo behavior into some of the current model runs.

@sunt05 sunt05 requested a review from MatthewPaskin February 6, 2026 10:46
@sunt05
Copy link
Author

sunt05 commented Feb 6, 2026

@MatthewPaskin yes, please go ahead with further testing and then merge it. Note the sample output will be changed, so it’s good you can pick this up with more meticulous checking. Thank you!

@sunt05
Copy link
Author

sunt05 commented Feb 13, 2026

@MatthewPaskin any follow-up here?

@MatthewPaskin
Copy link

@sunt05 I have done some more testing as well as (on a separate branch) worked on alternate LAI methods for each vegetation type, to view the behavior as a whole. Things are looking good but I am not sure if we are ready to commit this merge yet. Perhaps we shall discuss this further.

Also before this is merged @dayantur, a limit will need to be put into the validator as can be seen @sunt05 in your plots that the initial albedo values do not agree with the final values. Given the swap in albedo response to LAI, the initial albedo value will need to be flipped to the max in winter rather than the min.

@dayantur
Copy link

dayantur commented Feb 15, 2026

@sunt05 I have done some more testing as well as (on a separate branch) worked on alternate LAI methods for each vegetation type, to view the behavior as a whole. Things are looking good but I am not sure if we are ready to commit this merge yet. Perhaps we shall discuss this further.

Also before this is merged @dayantur, a limit will need to be put into the validator as can be seen @sunt05 in your plots that the initial albedo values do not agree with the final values. Given the swap in albedo response to LAI, the initial albedo value will need to be flipped to the max in winter rather than the min.

As discussed - we do not have at the moment anything that updates alb_id rather than the automatic initialisation set up by @sunt05 IF alb_id is missing.

But I can create a PR to assign alb_max (alb_min) to alb_id grass if winter (summer), and replicate something similar (but swapped) for deciduous and evergreen. This (IMO) should go in phase B as other physics updates, under the seasonal adjustment we have there.

if we agree on this @MatthewPaskin @sunt05 , I can work on this tomorrow with the other veg stuff I’m improving on the SPARTACUS side. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

4-needs-discussion Agenda item for weekly catch-up meeting

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: Grass albedo update uses wrong LAI-albedo relationship in daily state

3 participants