Scheduled Downtime
On Tuesday 24 October 2023 @ 5pm MT the forums will be in read only mode in preparation for the downtime. On Wednesday 25 October 2023 @ 5am MT, this website will be down for maintenance and expected to return online later in the morning.
Normal Operations
The forums are back online with normal operations. If you notice any issues or errors related to the forums, please reach out to help@ucar.edu

Back calculating stomatal conductances

nick

Herold
Member
I'm trying to reproduce Medlyn gs values calculated by CLM by using the constituent variables applied to equation 9.1 of the CLM5 technote, but my values are coming out different to the gs values written by CLM (by low ten's to several thousand). Should I expect eq 9.1 to give me the same value as CLM?

I note in the code there is an equivalent check for Ball-Berry gs values, from PhotosynthesisMod:
gs_mol_err = mbb(p)*max(an(p,iv), 0._r8)*hs/cs*forc_pbot(c) + bbb(p)

if (abs(gs_mol(p,iv)-gs_mol_err) > 1.e-01_r8) then
write (iulog,*) 'Ball-Berry error check - stomatal conductance error:'
write (iulog,*) gs_mol(p,iv), gs_mol_err
end if
These checks pass without a problem but there's not an equivalent check like this for Medlyn gs (which is what I'm trying to do myself). I'm not extremely familiar with these models and equations so hopefully not missing something obvious, any insight would be appreciated.
 

oleson

Keith Oleson
CSEG and Liaisons
Staff member
I would think that should work. Are you putting your Medlyn check directly in the code, similar to how the check for Ball-Berry is done?
I'll ask someone else in our group to look at this also and see if they have any ideas.
 

nick

Herold
Member
I wasn't but I just tried then and get the same result: my numbers using eq. 9.1 being generally a few thousand less than CLM's.

My implementation of 9.1 is:
gs_mol_err = medlynintercept(patch%itype(p)) + 1.6*(1+(medlynslope(patch%itype(p))/sqrt(rh_can))) * (an(p,iv)/(cs/forc_pbot(c)))
Some sample output below (first value = CLM's and second = my implementation of eq. 9.1 above). I note there are some constraints in the code on, e.g. an being at least zero, but this doesn't seem to affect the result.

Medlyn error check - stomatal conductance error:
67373.9573480559 66066.1548452785
Medlyn error check - stomatal conductance error:
137351.070266175 131451.476459967
Medlyn error check - stomatal conductance error:
147830.911827123 142481.654250635
Medlyn error check - stomatal conductance error:
116351.832728310 112659.808058387
Medlyn error check - stomatal conductance error:
104749.274614916 101221.443307647
Medlyn error check - stomatal conductance error:
88078.8480449465 85436.2378369225
Medlyn error check - stomatal conductance error:
287958.279430083 269974.003974220
Medlyn error check - stomatal conductance error:
174159.438541209 167157.366011883
Medlyn error check - stomatal conductance error:
145047.085123232 139754.156447857
Medlyn error check - stomatal conductance error:
129593.359716299 124566.822790249
Medlyn error check - stomatal conductance error:
113431.816436346 109354.875056735
Medlyn error check - stomatal conductance error:
283505.854439626 266624.113366076
Medlyn error check - stomatal conductance error:
355156.412667512 310064.621104548
Medlyn error check - stomatal conductance error:
318663.892702499 272366.359095411
Medlyn error check - stomatal conductance error:
 

nick

Herold
Member
The above was for when PHS is off, I put in a check for PHS on and numbers are also different (sunlit and shaded comparisons):

Medlyn error check - SUNLIT stomatal conductance error:
1431890.28679836 856843.701271351
Medlyn error check - SHADED stomatal conductance error:
105086.127401723 98696.1176311701
Medlyn error check - SUNLIT stomatal conductance error:
141432.484368828 134023.701304077
Medlyn error check - SHADED stomatal conductance error:
27937.8291009633 27629.6625347126
Medlyn error check - SUNLIT stomatal conductance error:
316589.818370965 277643.258349283
Medlyn error check - SHADED stomatal conductance error:
28097.4905534720 27722.9805277608
clm: completed timestep 451
Medlyn error check - SUNLIT stomatal conductance error:
104177.536186718 98901.4344152618
Medlyn error check - SHADED stomatal conductance error:
42816.0194951365 41883.5606789345
Medlyn error check - SUNLIT stomatal conductance error:
104022.757845307 98820.4674426303
Medlyn error check - SHADED stomatal conductance error:
40720.4755294358 39885.6585766832
Medlyn error check - SUNLIT stomatal conductance error:
120870.494316080 114356.606583786
Medlyn error check - SHADED stomatal conductance error:
30519.3317885954 30078.2413288949
Medlyn error check - SUNLIT stomatal conductance error:
181632.111142897 166535.671702803

The check I implemented:
if ( stomatalcond_mtd == stomatalcond_mtd_medlyn2011 ) then
gs_mol_err = max(bsun(p)*gsminsun, 1._r8) + 1.6*(1+(gs_slope_sun/sqrt(rh_can))) * (an_sun(p,iv)/(cs_sun/forc_pbot(c)))

if (abs(gs_mol_sun(p,iv)-gs_mol_err) > 1.e-01_r8) then
write (iulog,*) 'Medlyn error check - SUNLIT stomatal conductance error:'
write (iulog,*) gs_mol_sun(p,iv), gs_mol_err
end if

gs_mol_err = max(bsha(p)*gsminsha, 1._r8) + 1.6*(1+(gs_slope_sha/sqrt(rh_can))) * (an_sha(p,iv)/(cs_sha/forc_pbot(c)))

if (abs(gs_mol_sha(p,iv)-gs_mol_err) > 1.e-01_r8) then
write (iulog,*) 'Medlyn error check - SHADED stomatal conductance error:'
write (iulog,*) gs_mol_sha(p,iv), gs_mol_err
end if
endif
 

oleson

Keith Oleson
CSEG and Liaisons
Staff member
I guess no one else has looked at this yet. I'll try to take a closer look myself later this week.
 

dll@ucar_edu

Danica Lombardozzi
New Member
Apologies for the slow response here. @nick, it looks like you might be using relative humidity instead of vapor pressure deficit (VPD) in your error calculation. One important distinction in the Medlyn model is that it uses VPD instead of RH. I think this is likely contributing to the discrepancy you are seeing in the error check.
 

nick

Herold
Member
Not a problem @dll@ucar_edu, appreciate your thoughts very much. I'll look into this more closely today or tomorrow but I do see that "rh_can" is actually VPD when Medlyn is activated (with a minimum constraint: snippet below), it looks like a naming convention left over from Ball-Berry. And I see in the numerical implementation (the ci_func* functions) that rh_can is used in place of VPD so that's probably why I used rh_can. But will do a more thorough check soon.

ceair = min( eair(p), esat_tv(p) )
if ( stomatalcond_mtd == stomatalcond_mtd_bb1987 )then
rh_can = ceair / esat_tv(p)
else if ( stomatalcond_mtd == stomatalcond_mtd_medlyn2011 )then
! Put some constraints on RH in the canopy when Medlyn stomatal conductance is being used
rh_can = max((esat_tv(p) - ceair), 50._r8) * 0.001_r8
end if
 

nick

Herold
Member
I've just looked more closely and can confirm that rh_can is the VPD when Medlyn is active. I also manually calculated VPD using values written out from CLM and am still unable to get matching gs values so the discrepancy must be elsewhere.
 

oleson

Keith Oleson
CSEG and Liaisons
Staff member
I've replicated this error behavior in a single point simulation and filed an issue for it:


At first glance, I don't know if the problem is in the tech note equation or in the solution for stomatal conductance itself.
 
Top