Repository navigation
Enable the use of layered CF output for checkpoint-restart - #468
Ed Hone (EdHone) wants to merge 13 commits into
Conversation
2c5d81f to
aed8f63
Compare
80c599b to
6857771
Compare
Mike Hobson (mike-hobson)
left a comment
There was a problem hiding this comment.
This change looks fine - just a couple of very minor points. Obviously, I've looked at the linked ticket for context. I'm a little concerned about the way we are controling legacy mode. Currently, legacy mode is selected if the run has a planar, biperiodic mesh. This allows the SCM runs to use legacy mode.
When we move to XIOS 3, the SCM checkpointing should work in layered mode. We will then want to remove the if-tests that automaticaaly select legacy mode. At that point, we will no longer be able to select legacy mode, so we'll have dead code. To avoid getting into this situation, I think we have a couple of options:
- Given that XIOS 3 is very close, we could remove the support for legacy mode, in this change. That would mean this would have to wait until after XIOS 3 is done, but putting all this code in, so it can be removed in weeks seems wasteful and prone to error.
- Introduce a namelist switch to turn legacy checkpointing on, then set the switch to "on" for the SCM jobs. That way, when the SCM runs work with layered checkpointing, it would be easy to switch them, and if we ever wanted to make any run use legacy checkpointing in the future, that would also be really easy.
I probably edge towards the second option. I know it wouldn't be particulalrly easy, as you have to pass the switch variable through the interface to the procedure pointer, but in my many experiments into checkpointing, I have already done this. If you'd like to see what I did:
https://github.com/mike-hobson/lfric_apps/tree/apps_layered
and
https://github.com/mike-hobson/lfric_core/tree/core_layered
What do you think?
| module lfric_xios_metafile_mod | ||
|
|
||
| use constants_mod, only: str_def, i_def, l_def | ||
| use constants_mod, only: str_def, i_def, l_def, imdi |
There was a problem hiding this comment.
Looks like you never implemented whatever you added imdi for. I think it can just be removed.
| ! Check if file convention has been defined in iodef.xml config | ||
| call xios_is_defined_file_attr(self%xios_id, convention=convention_defined) | ||
| if (convention_defined) then | ||
| call xios_get_file_attr(self%xios_id, convention=iodef_file_convention) | ||
| if (trim(iodef_file_convention) == "CF") then | ||
| self%file_convention = CONVENTION_CF | ||
| else if (trim(iodef_file_convention) == "UGRID") then | ||
| self%file_convention = CONVENTION_UGRID | ||
| end if | ||
| else if (self%file_convention == undef_file_convention) then | ||
| self%file_convention = CONVENTION_UGRID | ||
| end if |
There was a problem hiding this comment.
I realise that it's unlikely that these if-tests wouldn't catch all cases, but it would still be good to have an else option to catch any potential errors, rather than let the code continue without setting the file convention.
PR Summary
Sci/Tech Reviewer: Mike Hobson (@mike-hobson)
Code Reviewer: svadams (@svadams)
The checkpointing I/O system used by some applications in lfric_apps uses 'legacy' checkpointing domains which are extremely non-performance at scale. The aim is convert to using the same UGRID format for output as the diagnostic files, which would involve changing the way that fields on the W2 function space are set up for I/O in XIOS. However, progress has been difficult for implementing this goal, as the UGRID implementation inside XIOS has some requirements and bugs which we cannot circumvent at the required timescales.
To get a performant checkpointing system working as soon as possible, this PR enables these applications to use checkpoint files to use a layered CF I/O implementation, which will circumvent the bugs in UGRID whilst maintaining the improved performance gains.
Code Quality Checklist
Testing
trac.log
Test Suite Results - lfric_core - lfric_core-ugrid-ckp-flag/run3
Suite Information
Task Information
✅ succeeded tasks - 433
Security Considerations
Performance Impact
AI Assistance and Attribution
Documentation
PSyclone Approval
Sci/Tech Review
(Please alert the code reviewer via a tag when you have approved the SR)
Code Review