Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compute surface albedo correctly #851

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

kmdeck
Copy link
Member

@kmdeck kmdeck commented Oct 14, 2024

Purpose

Close #845

Because this involves name changing, a lot of files changed in experiments, test.

For review, I think it is enough to focus on the changes to files in src/. @braghiere
Tagging @Espeer5 since you implemented the two stream scheme and this impacts those functions - only review as your time permits :)

To-do

Verify
Review

Content

Previously, we computed the absorbed, reflected, and transmitted fluxes in moles of photons per m^2/s in both NIR and PAR. This required:

  • converting PAR and NIR downwelling energy flux -> moles of photon fluxes, which is then used to get moles photon/m^2/s absorbed, transmitted, reflected. We do this because PAR is needed in moles of photon for photosynthesis and SIF computations. But, it required then converting absorbed molar flux etc back to get total absorbed energy flux, transmitted flux, etc
  • NIR is not needed in molar flux, but we still computed it this way since we did it for PAR
  • computing albedo as SW_u/SW_d, since we did not have access to fraction reflected, but only flux reflected. This causes issues when both SW_d and SW_u are zero.

Content:

  • compute fraction absorbed, reflected, transmitted
  • when a molar flux of absorbed PAR is needed, convert to it, but otherwise work in energy fluxes
  • use fraction reflected as the albedo
  • remove lambda_gamma_NIR (typical energy per photon in the NIR) from parameters and all scripts since we do not need to convert the NIR energy flux into a moles of photon flux.
  • renamed inc_* -> *_d (incoming -> downwelling by our convention)
  • Changed names: compute_absorbances -> compute_fractional_absorbances, plant_absorbed_pfd -> canopy_sw_rt (shortwave radiative transfer)

  • I have read and checked the items on the review checklist.

@kmdeck kmdeck self-assigned this Oct 14, 2024
# α = 1/(λ_max - λ_min) * ∫_λ_min ^λ_max α(λ) dλ
# We assume that the PAR and NIR bands are each exactly 50% of the incoming SW radiation
# Therefore the integral reduces to:
@. p.α_sfc = (f_abs_par + f_abs_nir) / 2
Copy link
Member

@braghiere braghiere Oct 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This cannot be calculated like this. First, I think what you tried to do is:
@. p.α_sfc = (f_refl_par + f_refl_nir) / 2

but this is not right either. This is better:
@. p.α_sfc = SW_u / max(SW_d, eps(FT))

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

youre right! I meant f_refl_par, etc.

For the second comment - since SW_u is proportional to SW_d, if SW_d = 0, SW_u = 0, and albedo would not be defined (as you pointed out before). Because of that, in our current main branch, we have what you suggested.

I thought this was not ok because then we would have albedo =0 at night, which would mess up our monthly/daily averages that we save as output, and which also isnt exactly physical, since albedo should be a well defined physical property, and not depend on insolation. For example, the albedo of soil is always defined, even if light is not shining on it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, albedo at night doesn't make sense anyway. So, it definitely shouldn't be included in the calculations of monthly, daily values. A quick workaround would be to set it to NaN when SW_d = 0. But if we need a number for the calculations, we can set it to zero when SW_d is zero.
Because while we do have this general assumption that PAR and NIR are roughy half of the energy, the fraction doesn't hold like this. So, it is best to keep track of SW_u and SW_d
Also, soil albedo and leaf albedo are intrinsic properties of the material, but canopy albedo is different, because it depends on the incident angle of radiation, the proportion of direct and diffuse, canopy structure, LAI, etc. So that is why we call leaf/soil albedo, single scattering albedo.

That should be fine for the atmos coupling, because if there's no incident radiation SW 0 times 0 = 0. But for the diagnostic (daily, monthly averages), we will need to add NaNs instead. It is the same issue with the canopy temperature before. Otherwise we will have unrealistic low values of canopy albedo, driven by the zeros at night.

Copy link
Member

@braghiere braghiere left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to change how we calculate SW albedo.

Copy link
Collaborator

@Espeer5 Espeer5 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes to the TwoStream scheme look good and make sense to me!

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

Successfully merging this pull request may close these issues.

Land surface albedo
3 participants