-
Notifications
You must be signed in to change notification settings - Fork 165
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
Add Cloud-J as new default photolysis option #1522
Conversation
@lizziel I changed the base branch to |
4e92687
to
2b4efa2
Compare
@lizziel I have changed the target branch to |
2b4efa2
to
252baab
Compare
aeaa17a
to
202ce48
Compare
Tagging Chemisty Working Group Co-chairs et al: @mje1398, @christophkeller, @barronh, @luhu0, @jingqiumao, @randallvmartin, @sdeastham, @pratherUCI, @viral211. Please see the PR description above for an analysis of Fast-JX versus Cloud-J. |
Thanks for tagging us. And, thanks for the clear assessment of the source of differences. I see two out of three sources of difference are an improvement, and the third is maybe a degradation -- at least an approximation. The history document in the Cloud-J repo is very useful for understanding why we should make this move. This seems like progress and I have just a couple questions. All questions are just for information:
|
There are surprisingly small differences between the old and the new. I think there is probably a need for us to think about having the code in place to do the averaging of the cross sections and to do a bit of a think about whether they are the most up to date ones? It would be useful to have the full definitions of the cross sections / Quantium yields somewhere and then the code to do the averaging. I think there was some FORTRAN code floating around for doing that? Perhaps we can re-code it into Python? Mat |
@barronh and @mje1398, these are good points to discuss. Here are my thoughts.
I am not sure what the better representation would look like. The meteorology optical depth presumably assumes a wavelength which would help target what Q to use to compute effective radius from it. For Fast-JX we assumed 600 nm and then scaled optical depth accordingly within Fast-JX for different wavelengths based on differences in Q. That also introduced error. @pratherUCI, do you have any comments on the Q=2.06 assumption? You suggested it with the logic that cloud Reff is large so Q is roughly constant. Would the error introduced be worth improving upon or is it less than or on par with other error in the model?
The GEOS-Chem species cross-sections and quantum yields are the same as used for Fast-JX. I adapted FJX_spec.dat LUT used in Cloud-J from the equivalent file used in Fast-JX. Both of those contain text for each species referencing the data source, e.g. J10. Additional notes on the sources are at the bottom of both files.
Do you mean regenerating the table using updated sources, or adding new species, or both? Michael Prather has a fortran tool available to do the averaging, and I copied it into the Cloud-J repository in the tools directory. As for regenerating the table for GEOS-Chem using new sources, I am not sure what prompts it to be done. I believe every now and then we receive updates from the community to put into the model. These are documented in the README within the Fast-JX folder on ExtData.
The current code from Prather to do this is at https://github.com/geoschem/Cloud-J/tree/main/tools/AddXs. We are looking to the community to determine whether the sources used for GEOS-Chem are the most up to date ones. It would be great if we had a system in place for evaluating this periodically, and also documenting the sources better. One option is to store the tables and a description of the sources within the GEOS-Chem repository. The option could be there to use a file outside of GEOS-Chem, but the default could be local. The advantage of this is that it would be under version control.
It would be fantastic to have the tools/AddXs code in Python. @pratherUCI, are you open to this idea? I can do this work if it looks like it is worth it. Regardless, I want to make the tool easier to understand and use. |
My two cents - I get hit with requests for help adding cross-sections from time to time, and would strongly support adaptation of the cross-section generation code into Python. I've seen at least one case of someone misinterpreting the nature of the wavelength bins with disastrous results (given that the high-frequency bins are actually weighted averages of non-contiguous wavelength bins, which is not obvious). |
The new method using relative humidity interpolation is similar to how concentrations are used when computing optical depth to pass to Fast-JX in GEOS-Chem. Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
You can now do this within set_prof subroutine. Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
This option was added only to compare Fast-JX to Cloud-J. Using OPTD equal to the sum of TAUCLW plus TAUCLI improves the Fast-JX versus Cloud-J J-value comparison when using GC-Classic because error introduced with regridding is minimized. Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
… grids Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Cloud-J does not use JXL_ and GEOS-Chem made JXL_ = L_. Using L_ instead of JXL_ for diagnostics will have no impact. Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
This update was submitted by R. Yantosca to improve performance by eliminating an if-else block. This commit also includes a minor update to a comment in the fast-jx interface file, and removal of unnecessary comments in the cloud-j interface file. Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
GeosCore/cldj_interface_mod.F90 - We need to place the RETURN statements into IF/THEN blocks after each test for RH. Otherwise we will just end up returning after the first IF statement and the index will be incorrect. Now fixed. Signed-off-by: Bob Yantosca <yantosca@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Aerosol values are only available when using the fullchem or aerosol simulations. The mercury simulation uses Cloud-J photolysis but aerosol concentrations are not available to use within it. Values are thus kept at zero for the mercury simulation. This is consistent with legacy Fast-JX in GEOS-Chem which took optical depth rather than concentration as input. Aerosol optical depths, including soil dust, were only compute for fullchem and aerosol simulations and left as zero for mercury. Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
10069ac
to
849e48e
Compare
Hi @lizziel @viral211 and all, For the Hg simulation, can we just archive the aerosol concentrations from full chemistry and use those? I'm pretty sure the optical depth files we used before would have just been archived from a full chem simulation. While I'm here, my 2¢ on the question of cross sections/quantum yields as a (relatively) frequent user of these processes. I would support having something that did this on the fly in GEOS-Chem. We could build in some caveats for new species - for example, forced stops that prompt the user to consider all the things @sdeastham and @pratherUCI mention above and to then manually remove the error message code (we've done that before with things like not having the right lightning file, etc.). My feeling is that right now the traceability of our decision-making is poor. Just stating things like "J10" doesn't give all the information you would need to understand these. In some places, we have X-sec that is actually QY * X-sec but that is non-intuitive and you have to really dig through the notes to understand this. I think calculating this real-time or at least storing in the folder all of the original data files (cross sections and individual species add-X codes that were used to prepare the relevant files) would help a lot. I have also seen in my group that folks have difficulty working out how to write their own add-X routines from the examples, but we hadn't seen the new ones linked above, so we will check these out - thanks for sharing! Cheers, |
Thanks for your input @jennyfisher! I am going to make a separate issue for reading in offline aerosol files for use with Cloud-J in mercury simulations. Using legacy Fast-JX is still an option in GEOS-Chem by compiling with -DFASTJX=y. We will recommend using that in mercury simulations until there is an update to read in offline archived files. |
Using Cloud-J with the mercury simulation is not currently recommended because aerosol concentrations are not yet read in for use in computing J-values in Cloud-J. The legacy Fast-JX method of computing J-values uses offline aerosol optical depth and is therefore recommended instead of Cloud-J. Cloud-J is turned on by default in GEOS-Chem, but building with -DFASTJX=y turns on legacy Fast-JX. Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
…ests Signed-off-by: Lizzie Lundgren <elundgren@seas.harvard.edu>
See geoschem/geos-chem#1522. Signed-off-by: Melissa Sulprizio <mpayer@seas.harvard.edu>
See geoschem/geos-chem#1522. Signed-off-by: Melissa Sulprizio <mpayer@seas.harvard.edu>
Name and Institution (Required)
Name: Lizzie Lundgren
Institution: Harvard University
Describe the update
This update introduces the Cloud-J photolysis package as the default method of computing J-values, replacing Fast-JX v7.0. Fast-JX remains as a compiler-time alternative to Cloud-J. Cloud-J is a new submodule in the GC-Classic and GCHP super projects and the PRs that add them should be merged at the same time as this PR.
Expected changes
All photolysis rates change in this update. A 1-month benchmark comparison of GEOS-Chem Classic 14.3.0 (dev) using Fast-JX versus Cloud-J is at https://ftp.as.harvard.edu/gcgrid/geos-chem/validation/cloudj_validation/1mo_benchmark. Global OH decreased by 0.35%, and both MCF and CH4 lifetimes increased by around 1%. A comparison using GCHP will be posted soon.
Sources of differences
The changes are predominately explained by differences in the handling of clouds between Fast-JX and Cloud-J. Other smaller differences are introduced due to differences in the computation of aerosol optical depth.
Differences in cloud handling
Criteria for ice versus liquid water cloud are different
Optical properties used for ice water clouds are different
Cloud optical depth is computed in Cloud-J from an approximate effective radius
Impact of cloud differences on J-values
Below are differences after one timestep in NO2 surface and zonal mean J-values due to differences in cloud handling. Contributions from dust, hygroscopic growth aerosols, and stratospheric aerosols are disabled.
Aerosols
Differences are also caused by changes in the optical depth computation for aerosols. Fast-JX takes the aerosol optical depths computed within GEOS-Chem. In contrast, Cloud-J computes the optical depths from concentrations [g/m2] passed to the model and aerosol density and effective radius taken from the Cloud-J LUT FJX_scat-aer.dat. Concentrations passed to Cloud-J are constructed to mimic what Fast-JX does as closely as possible with the exception of stratospheric aerosols. Stratospheric aerosol concentrations passed to Cloud-J is simply SO4 everywhere
A detailed comparison of all aerosols in isolation, including J-values and optical depths, is on the Harvard ftp site here.
Out-of-the-box differences in J-values
Below are differences after one timestep in NO2 surface and zonal mean J-values. Unlike the previous plot, these include the contributions from aerosols (dust, hygroscopic growth, stratospheric). The difference pattern and magnitude strongly resembles the earlier plot that isolated only cloud differences. The large differences in the far southern latitudes are due to differences in stratospheric SO4 (see here and here) for reasons not yet well understood.
For more detailed comparisons of surface NO2, zonal mean NO2, and optical depths for each of the contributors to the computation of J-values, please see plots here.
Reference(s)
Prather, M. J.: Photolysis rates in correlated overlapping cloud fields: Cloud-J 7.3c, Geosci. Model Dev., 8, 2587–2595, https://doi.org/10.5194/gmd-8-2587-2015, 2015.
Related Github Issue(s)
geoschem/GCClassic#27
closes #953