-
Notifications
You must be signed in to change notification settings - Fork 26
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
Driver for configurations using CMEPS with the CESM driver #333
Conversation
What about later on adding a ACCESS-OM3 driver that would be a child class of the Cesm model? |
Would it be more accurate to call it
This is interesting. Previously coupled models used a sub-model approach, e.g. ACCESS-OM2 https://github.com/payu-org/payu/blob/master/payu/models/accessom2.py but I guess the CMEPS architecture effectively removes the idea of separate models? Certainly makes writing a driver a fair bit simpler. AFAICT none of the components utilise the existing drivers of the individual models, is that correct? I can't see how |
Yeah, the components aren't really sub-models since they don't have their own executables. I'm sure there's a way around having
That's correct. Everything is handled by the CMEPS driver and the output is quite specific to the driver (e.g. restarts from each component all get named consistently and output to the run directory). Re collation... I'm not sure... For the tests runs I've done, MOM6 output |
I'm confused. Isn't this the CESM driver? Or does driver in this context mean the model code itself?
I don't dislike the design, just trying to get a better understanding of the design process/limitations.
Into their own "namespace"?
In the TWG meeting it was noted that the
Maybe you or @marshallward or @angus-g have an opinion or some knowledge about the best way to implement that. |
Yeah sorry, I was a bit fast and loose with my language in my previous comment. There're two "drivers" in these discussions:
The Payu driver in this PR is intended to run model configurations that use NUOPC/CMEPS along with the CESM (NUOPC/CMEPS) driver. What I meant to say was that I'm not sure whether it would work (or could be easily extended to work) with other NUOPC/CMEPS drivers. Hmmm... reading that back, I'm not sure it's any clearer Re your other comments/questions, I'll try to get my head back into this later this week. |
From what I could see, different drivers have different ways to specify which components to use at runtime. So some things would definitely need to be different for a different driver. |
payu/models/cesm.py
Outdated
"drof_in", | ||
"drof.streams.xml" | ||
] | ||
}, |
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.
@dougiesquire payu dies with KeyError: 'docn'
when running https://github.com/COSIMA/CICE6-WW3 so I guess we need something like this here?
"docn": {
"realm": "ocn",
"config_files": [
"docn_in",
"docn.streams.xml",
],
},
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.
Yes, sorry, I had the change locally but hadn't pushed it. Pip installing from this PR again should include the required change.
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.
great, thanks!
There are some rough edges that should be fixed - e.g. |
Thanks for reporting this @aekiss. I need to find some time to implement this properly |
Finally coming back to this. Before spending too much time on it, I want to check in with @aekiss and @micaeljtoliveira on ACCESS-OM3 development. Is it still looking like the configuration set-up (config/input files structure etc) and output from ACCESS-OM3 will be the same/similar as CESM-CMEPS? I.e., is it looking like the Payu driver in this PR could end up being what is used by everyone to run ACCESS-OM3, or is it likely just to be used during development of ACCESS-OM3 (for comparing ACCESS-OM3 executables to CIME-built executables)? If the latter, we probably want to keep this Payu driver out of |
Thanks for looking at this. Good question - I think it will definitely be needed for development of ACCESS-OM3 for comparing to CIME/CESM, but it's too early to say what config the final production version will use. The inputs will all be different, but maybe the directory and file structure can be retained. But if we call it the cesm driver then we should be able to put it into main and then adapt or duplicate it for an accessom3 driver as needed, right? |
Yes... I think. But I think the cesm driver possibly needs a bit of rethinking. |
Possibly an FmsCollate mixin? |
If it works I'd merge and work on improvements with follow up PRs, unless we're talking a radical rethink.
Yeah that is what I was thinking of with "fancy-fancy python multiple inheritance". |
What I'm thinking is that we might want to have a different approach than specifying the CESM model As suggested by @micaeljtoliveira, I'm thinking a |
@aekiss, I've been unable to reproduce this. Can you provide any more details about what happened? |
Just ignore my comment - it was very sporadic. If it happens enough to be an problem I'll make an issue for it. |
@aidanheerdegen are you the right person to ping for a review? There is now a (after a couple of small tweaks to the config that I haven't pushed yet).
It would also be trivial to create drivers from but I personally don’t think this is worthwhile. It will just clutter the Once this PR is merged, I’ll update the configs above. |
Awesome, thanks @dougiesquire, I like this inheritance approach. We should retain these configs, as these combinations will actually be used a lot, and so we will need payu support for them as part of the staged development plan |
Sure. Any thoughts on what to call the payu models for these (ie what's entered in the config.yaml)? Perhaps something like "cesm-mom6-cice6" and "cesm-cice6-ww3"? If we go this route then perhaps we should rename "access-om3" to "cesm-mom6-cice6-ww3" for consistency (at least until things are more bedded down), although that's a bit of a mouthful... |
How about just "mom6-cice6", "cice6-ww3" and "mom6-cice6-ww3"? Or do we expect we will need different drivers for the access-om2 configs, in which case the cesm prefix would help differentiate them? |
I don't understand sorry. There's already an |
About the naming scheme, I would actually propose something different. I would call all of those models ACCESS-OM3, even thought that's incorrect if one considers that ACCESS-OM3 is always MOM6+CICE6+WW3. The point here is that we would like to have a compact and flexible way to swap some of the components by a data model in the payu config. So I would still allow one to specify the submodels in the payu config, but only for the ocean, waves and sea-ice components. All the rest (atm, etc) should be fixed. This last point is what would distinguish the access-om3 model in payu from the cesm model: some of the components would be hard-coded. Does this make sense? |
Apologies @dougiesquire - I meant ACCESS-OM3, not 2 |
It does, but now we're back to the original problem of how to list the ACCESS-OM3 submodels in the payu config. We can't list them under A ...
model: access-om3
components:
- mom6
- cice6
- ww3
... |
Couldn't we get the components list from the |
Actually I expect it will be common for users to want to modify these components, e.g. perturbing the forcing or runoff, or replacing it with a different product (eg ERA5) so some flexibility should be retained here too. These would always be data models but the data sources should be easy to modify. |
Yes, but have been flat out! Sorry. Will look tomorrow. |
So the mapping of CPUs between different sub-domains is done internally? |
I think so...? |
Yup, this is done in the |
I'm not exactly sure what to call this driver since in theory it could be used/extended to run any model configurations that use CMEPS with the CESM driver, though the primary use case at the moment is for an ACCESS-OM3 configuration (currently it's called
Cesm
, which is probably not ideal).In trying to make this general to all CMEPS configs, I've added another optional field to the input
config.yml
calledcomponents
where users specify which model components are included in the configuration being run (e.g. see https://github.com/dougiesquire/gmom_jra_wd/blob/main/config.yaml). This is maybe not a desired change, in which case one option would be to make the driver specific to OM3. This would also solve the naming ambiguity, but it would make the driver less general (e.g. it could no longer be used to run https://github.com/dougiesquire/d_jra_wd)Interested to hear people's thoughts
components
specification in config file