forked from mom-ocean/MOM6
-
Notifications
You must be signed in to change notification settings - Fork 60
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
Refactor of vertical reconstruction adding six new schemes #741
Open
adcroft
wants to merge
3
commits into
NOAA-GFDL:dev/gfdl
Choose a base branch
from
adcroft:remap-pr
base: dev/gfdl
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Commits on Nov 5, 2024
-
This module contained very old concepts of unit tests for the MOM_remapping functions, but have all been superseded by better tests.
Configuration menu - View commit details
-
Copy full SHA for 2e30405 - Browse repository at this point
Copy the full SHA 2e30405View commit details -
Broke out testing into numerical_testing_type.F90
The helper type that shortens the testing lines will be needed by both the upcoming Recon1d type and MOM_remapping, so it makes sense to break the type out into a module. I've put this in framework/ but it is specifically a stand-alone module, not dependent on any infrastructure code.
Configuration menu - View commit details
-
Copy full SHA for cf9a192 - Browse repository at this point
Copy the full SHA cf9a192View commit details -
Refactor of vertical reconstruction with six new schemes
This refactor is motivated by i) adding a set of new reconstructions schemes that are ready-to-use-now for remapping, but ii) will be an essential part of a new grid generator that will use some of the new member methods available only as a result of the refactor. The "refactor" actually duplicates many existing schemes, leaving the original code in place to provide a period of transition just in case there's some major reason to revert to the old style of code. What changed ============ - added 16 modules name Recon1d_*.F90, which extend a base Recon1d_type.F90 - MOM_remapping.F90 - rewrote remapping_unit_tests to be tidier - added tests for 1) invariance when remapping to/from the same grid; 2) preservation of a uniform value (many of the old schemes fail); 3) internal consistency such as monotonic ordering of values at edges, no internal extrema, etc., but only for the new Recon1d_* schemes. - added more schemes to config_src/drivesr/timing_tests/time_MOM_remapping.F90 - added documentation via _Vertical_Reconstruction.dox with references Six new schemes are added: C_PLM_CW, C_PLM_CWK, C_MPLM_CWK, C_EMPLM_CWK, C_PPM_CWK, and C_EPPM_CWK. Ten existing schemes were ported to the new class, along with their non-monotonic behaviors or ill-formed expressions. Others can be ported later if needed, although one result of the refactor was the discovery that none of the existing schemes worked as desired. The new form uses a class (Recon1d) to define a uniform API for all the reconstruction schemes. The methods of the class include: - init() that creates work arrays and stores parameters such as `h_neglect` - reconstruct() that causes the reconstruction parameters to be calculated - average() that returns the average between two points in a reconstruction (used in the remap_src_to_sub_grid() functions) - unit_tests() method - check_reconstruction() checks that a reconstruction has the properties that it should (e.g. reconstruction values are monotonic) Theses properties are defined by each scheme, although many are shared between schemes. - f() that evaluates the reconstruction at a point (this will be used in the new grid-generator). - dfdx() that evaluates the derivative of the reconstruction at a point (this will be used in the new grid-generator) Testing ======= New tests have been added that check uniform states are preserved, states are preserved under unchanging grid, and that the reconstructions are internally consistent according to their own definition. This last is only available for the new class-based schemes via the check_reconstruction() method which can be customized to each reconstruction, which allows us to document which properties (e.g. monotonicity) are satisfied and which are not. These new tests use seeded random numbers which has proven useful for debugging/development, but are not necessarily useful in the CI. Nevertheless, I've made it part of remapping_unit_tests() so there is a template for debugging/testing new schemes when we add them. The same sequence of random numbers is used for each scheme, but the numbers are compiler dependent so the documented "fails" record the compiler version in comments. The helper type was previously broken out of MOM_remapping to make testing convenient. Performance =========== - the new class-based schemes are all faster than their counterparts in the original code style; - example numbers can be found in the build-test-perfmon job of this commit (expand the "Display timing results"); - e.g. timings for PPM_HYBGEN and C_PPM_HYBGEN show a marginal (~10%) speed up due to code style, and C_PPM_CWK has a more substantial speed up (~20%) due to a lighter algorithm; - I imagine we will see further speed ups if we worked on arrays rather than columns, which is an extension that could be implemented later. Documentation ============= - the new module APIs are documented; - a new page, `_Vertical_Reconstruction.dox`, details the vertical reconstruction schemes, tabulates the values of `REMPAPPING_SCHEME`, and summarize some properties. Minor (unrelated) ================= - removed `-j` for nested make in `.testing/Makefile`
Configuration menu - View commit details
-
Copy full SHA for b859442 - Browse repository at this point
Copy the full SHA b859442View commit details
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.