-
Notifications
You must be signed in to change notification settings - Fork 45
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
Fix and improve anomaly forcings for ISSP cases #292
base: main
Are you sure you want to change the base?
Conversation
cdeps1.0.34
@ekluzek, a few questions:
<default_value>''</default_value>
<value compset="^SSP126_">Anomaly.Forcing.cmip6.ssp126</value> |
@samsrabin is this ready- if not can you make it a draft please. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not clear to me that anomaly_forcing will always be defined and be an array.
This reverts commit 3f36622b3bd6358d324f1aca5e90009db306963e, which tried to do this in namelist_definition_datm.xml, and instead does it in datm/cime_config/buildnml. Only looks at compset if anomaly_forcing not specified in namelist.
…rounding quote marks.
Force-pushed to remove premature merge of main into this branch, which was interfering with my testing. |
@ekluzek This is ready, if you'd like to review! |
Note that this is up-to-date with cdeps1.0.34. If you'd like me to merge in the latest tag, let me know and I'll redo the testing. |
@jedwards4b This is ready to review, and @ekluzek will also make some time to look at it in the next few days. It would be nice if we can get it in soon. |
@@ -336,14 +336,30 @@ def create_stream_xml( | |||
), | |||
) | |||
if var_key in valid_values: | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you are expecting that the variable may or may not have surrounding quotes why not just strip the quotes if they exist and avoid asking the user for a correction?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@samsrabin I think @jedwards4b is right here, it looks like there might be a simpler way to handle this. Could we get together and go over this together and see if there is a way to do that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Really glad you took this on. This is so great to have coming in. I'm suggesting some changes.
I think it would be better to be data driven rather than code driven. And I layout a mostly fleshed out plan on how to do that. You'll need to make sure that all works, but I think it will and it's an improvement over some of the limitations of a part of what's in here.
We should get together to go over all of this. I also have some questions about one set of changes that would be good for you to explain.
@@ -336,14 +336,30 @@ def create_stream_xml( | |||
), | |||
) | |||
if var_key in valid_values: | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@samsrabin I think @jedwards4b is right here, it looks like there might be a simpler way to handle this. Could we get together and go over this together and see if there is a way to do that?
if not anomaly_forcing or anomaly_forcing[0] is None: | ||
# If not in namelist, check whether it's an SSP compset | ||
ssp = re.search(r"^SSP\d+_DATM", compset) | ||
if ssp: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As I understand this -- it will ensure anomaly_forcing is forced to be on for SSP compsets. But, I don't think that's what we want. I think that the default certainly should be for it to be on, but the user should be able to turn it off if they want. The AF forcing is also specific to the DATM_MODE so it should only do this depending on both the compset and DATM_MODE. And since the DATM_MODE the AF forcing matches will be changing, it would be better for this to be in the XML data rather than in the python code. Better to be data driven when possible.
As such I'm thinking this part should be reverted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See below for what I suggest to add to the namelist_definition file. We will also need to make sure compset is a valid field in the namelist defintion file.
|
||
<stream_entry name="Anomaly.Forcing.Precip"> | ||
<stream_entry name="Anomaly.Forcing.cmip5.rcp45"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This does change the indentation, and it should go back to what it was before. "<stream" is the outermost level for types in the XML here.
@@ -224,7 +224,7 @@ | |||
<type>char(10)</type> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Near the top of the file streamslist is being set with a setting for GSWP3 like this:
<value datm_mode="CLMGSWP3v1">
CLMGSWP3v1.Solar,CLMGSWP3v1.Precip,CLMGSWP3v1.TPQW
</value>
This should be expanded to have an option for GSWP3 forcing and SSP compsets. So something like:
<value datm_mode="CLMGSWP3v1" compset_period="SSP585">
CLMGSWP3v1.Solar,CLMGSWP3v1.Precip,CLMGSWP3v1.TPQW,Anomaly.Forcing.cmip6.ssp585
</value>
There might be a way to append just the AF file to the end, which would be preferred. But, we'd need to figure that out. The matching needs to be figured out to make sure it works right. And of course all the SSP options need to be added.
Note that compset_period needs to be added to the buildnml file which I'll sketch out below.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changes to buildnml:
buildnml needs to:
- Get the compset from the case
- Extract out the period part of the compset
- Send compset_period to the config object
So something like...
caseroot = case.get_value("CASEROOT")
datm_mode = case.get_value("DATM_MODE")
datm_topo = case.get_value("DATM_TOPO")
compset = case.get_value("COMPSET")
.
.
.
# Do some reg-ex or other magic to get the compset_period from it
compset_period = something(compset)
config['datm_mode'] = datm_mode
config['datm_co2_tseries'] = datm_co2_tseries
config['compset_period'] compset_period
.
.
.
Description of changes
Fixes a bug, and also makes it much simpler to run land-only SSP cases.
Specific notes
Contributors other than yourself, if any: @ekluzek
CDEPS Issues Fixed (include github issue #):
Are there dependencies on other component PRs (if so list): This doesn't depend on other components. However, I will soon submit a PR to CTSM that depends on this branch. (See issue ESCOMP/CTSM#2301.)
Are changes expected to change answers (bfb, different to roundoff, more substantial): Substantial, but only if people were being bitten by #258 before.
Any User Interface Changes (namelist or namelist defaults changes): Yes.
Adds
anomaly_forcing
options:Anomaly.Forcing.cmip5.rcp45
Anomaly.Forcing.cmip6.ssp126
Anomaly.Forcing.cmip6.ssp245
Anomaly.Forcing.cmip6.ssp370
Anomaly.Forcing.cmip6.ssp585
Removes all variable-specific
anomaly_forcing
options.Testing performed (e.g. aux_cdeps, CESM prealpha, etc):
datm_ssp126_anom_forc
, is bit-for-bit identical to previous version (ctsm5.2.015
).aux_cdeps
test of SSP585 compset, added the 3 other SSP compsets. Allaux_cdeps
SSP tests show diffs as expected fromcdeps1.0.34
.Hashes used for testing:
Remaining work
anomaly_forcing
is automatically set for eachISSP
compsetI
SSP
compset to test) Ensure that it's only set forDATM
compsetsanomaly_forcing
in the generateddatm_in
: Fix that. (Note that the anomaly forcing file IS correctly being put indatm.streams.xml
.)