You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
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.
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.
The text was updated successfully, but these errors were encountered: