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

Confusing Normalization of Aerosol Optical Properties inside Radiation #235

Open
amdasilva opened this issue May 16, 2023 · 2 comments
Open

Comments

@amdasilva
Copy link
Collaborator

The computation of extinction, ssa and asymmetry parameter for radiation is currently implemented in a very confusing way and sooner or later it may cause a well-intentioned person implementing a new callback to make a mistake. A zero-diff refactoring is badly needed.

THE PROBLEM: The radiation callback in GOCART provides 3 variables to radiation: EXT, SSA and ASY. Variable EXT is what one would expect: extinction. However, SSA is actually the scattering extinction coefficient, and ASY is the asymmetry parameter multiplied by scattering extinction coefficient. The radiation code current performs the proper normalization but this misnomer of variables is unnecessarily confusing.

THE SOLUTION: move this normalization inside the GOCART2G_GridComp so that the variables (EXT,SSA,ASY) are indeed (extinction, single scattering albedo, asymmetry parameter). Here's the code fragment near line 1437 in GOCART2G_GridComp.

do i = 1, size(aeroList)

ext = ext + ext_
ssa = ssa + ssa_ ! accumulator, ext_s
asy = asy + asy_ ! ext_s * asy_
end do
asy = asy / ssa ! ext_s weighted average of asy_
ssa = ssa / tau ! ext_s / ext

The radiation code would need to be consistently modified (removal of normalization). It may pay to change variable names for clarity. Similar cleanup of variable names should happen in the children components as well. This refactoring should be zero-diff.

@mathomp4
Copy link
Member

Adding in @dr0cloud so he can be aware as he's the radiation guru.

@dr0cloud
Copy link
Collaborator

Hi Arlindo, I understand and agree this is confusing. Radiation routines correctly handle the situation as it is, but can be adapted (I can do this) if you change the aerosol optical property definitions back to normalized values. Currently RRTMG and RRTMGP explicitly normalize the confusing variables using the rubric:
where (TAUA > 0. .and. SSAA > 0. )
ASYA = ASYA/SSAA
SSAA = SSAA/TAUA
elsewhere
TAUA = 0.
SSAA = 0.
ASYA = 0.
end where
while Chou-Suarez takes the unnormalized (confusing ) variables directly and uses them directly (which is the most natural use for radiation).
Anyway, if you normalize the definitions within GOCART, according to the above rubric, I will only need to remove the radiation's normalization for RRTMG and RRTMGP, and for Chou-Suarez I will just change the code to remultiply the normalized variables.
I think it will be zero diff for RRTMG and RRTMGP and zero-diff to rounding for Chou-Suarez, which is fine.

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

No branches or pull requests

3 participants