_Vertical_Reconstruction.dox

1/*! \page Vertical_Reconstruction Vertical Reconstruction
2
3\section section_vertical_reconstruction Vertical Reconstruction Methods
4
5Within the ALE or Lagrangian Remap Method (LRM), the structure of fields within cells (or layers in the case of MOM6) are reconstructed from the resolved cell means (i.e. the model variables).
6The most widely used reconstructions use a piecewise polynomial representation for the reconstruction within each cell.
7The simplest of these is the Piecewise Constant Method (PCM) which simply uses the cell mean value as a constant value throughout the cell.
8The reconstructed fields may be discontinuous across cell boundaries, which is inherently the case for PCM.
9PCM is a first order method and considered too diffusive for ALE, although it is the implicit representation in the traditional "layered" mode.
10A second order reconstruction if the Piecewise Linear Method (PLM) of Van Leer, 1977 \cite van_leer_1977.
11Higher order reconstructions are the Piecwise Parabloic Method (PPM) of Colella and Woodward, 1984 \cite colella1984, and the Piecwise Quartic Method (PQM) of White and Adcroft, 2008 \cite white2008.
12
13\section section_vertical_reconstruction_implementation Implementation
14
15The original implementations of vertical reconstructions are available in the `src/ALE` directory via modules such as plm_functions, ppm_functions, regrid_edge_values, etc.
16These versions were used in OM4 \cite Adcroft2019 but later found to have inaccuracies with regard to round-off errors that could lead to non-monotonic behaviors.
17A revision of the schemes was made available after comparing and porting from Hycom and are available via modules such as mom_hybgen_remap.
18A recent refactoring of reconstructions for remapping was implemented via classes derived from the recon1d_type (also in `src/ALE` directory).
19
20The following table summarizes the OM4-era and Hycom-ported methods and routines, all selected by the runtime parameter `REMAPPING_SCHEME`.
21The branch points (`select case`) in the code are in mom_remapping::build_reconstructions_1d().
22
23REMAPPING_SCHEME | Description | Functions invoked (from MOM_remapping::build_reconstructions_1d())
24:--------------: | :---------- | :-----------------------------------------------------------------
25PCM | Piecewise Constant Method | pcm_functions::pcm_reconstruction()
26PLM | Monotonized Piecewise Linear Method \cite white2008 | plm_functions::plm_reconstruction() (calls plm_functions::plm_slope_wa() and plm_functions::plm_monotonized_slope()) (opt. plm_functions::plm_boundary_extrapolation())
27PLM_HYBGEN | Piecewise Linear Method, ported from Hycom \cite colella1984 | mom_hybgen_remap::hybgen_plm_coefs() (opt. plm_functions::plm_boundary_extrapolation())
28PPM_H4 | Piecewise Parabolic Method with explicit 4th order edge values \cite white2008 | regrid_edge_values::edge_values_explicit_h4() ppm_functions::ppm_reconstruction() (opt. ppm_functions::ppm_boundary_extrapolation())
29PPM_IH4 | Piecewise Parabolic Method with implicit 4th order edge values \cite white2008 | regrid_edge_values::edge_values_implicit_h4() ppm_functions::ppm_reconstruction() (opt. ppm_functions::ppm_boundary_extrapolation())
30PPM_HYBGEN | Piecewise Parabolic Method with quasi-4th order edge values using PLM \cite colella1984 | mom_hybgen_remap::hybgen_ppm_coefs() (opt. ppm_functions::ppm_boundary_extrapolation())
31PPM_CW | (should be equivalent to PPM_HYBGEN) | regrid_edge_values::edge_values_explicit_h4cw() ppm_functions::ppm_monotonicity() ppm_functions::ppm_reconstruction() (calls ppm_functions::ppm_limiter_standard()) (opt. ppm_functions::ppm_boundary_extrapolation())
32WENO_HYBGEN | Piecewise Parabolic Method with WENO edge values, ported from Hycom | mom_hybgen_remap::hybgen_weno_coefs() ppm_functions::ppm_reconstruction() (calls ppm_functions::ppm_limiter_standard()) (opt. ppm_functions::ppm_boundary_extrapolation())
33PQM_IH4IH3 | Piecewise Quartic Method with implicit quasi-4th order edge values and 3rd order edge slopes \cite white2008 | regrid_edge_values::edge_values_implicit_h4() regrid_edge_values::edge_slopes_implicit_h3() pqm_functions::pqm_reconstruction() (calls pqm_functions::pqm_limiter()) (opt. pqm_functions::pqm_boundary_extrapolation_v1())
34PQM_IH6IH5 | Piecewise Quartic Method with implicit quasi-6th order edge values and 5rd order edge slopes \cite white2008 | regrid_edge_values::edge_values_implicit_h6() regrid_edge_values::edge_slopes_implicit_h5() pqm_functions::pqm_reconstruction() (calls pqm_functions::pqm_limiter()) (opt. pqm_functions::pqm_boundary_extrapolation_v1())
35
36The following table summarizes the newly refactored methods based on the class recon1d_type::recon1d.
37These are also controlled by the runtime parameter `REMAPPING_SCHEME` but the branch point is in the form of a type allocation during initialization in mom_remapping::setreconstructiontype().
38
39REMAPPING_SCHEME | Description | Module
40:--------------: | :---------- | :-----
41C_PCM | Piecewise Constant Method (equivalent to PCM) | recon1d_pcm
42C_PLM_CW | Piecewise Linear Method (faithful to Colella and Woodward \cite colella1984) | recon1d_plm_cw
43C_PLM_HYBGEN | PLM (equivalent to PLM_HYBGEN) | recon1d_plm_hybgen
44C_MPLM_WA | Monotonized Piecewise Linear Method (faithful to White and Adcroft \cite white2008) | recon1d_mplm_wa
45C_MPLM_WA_POLY | MPLM using polynomial representation (euivalent to PLM) | recon1d_mplm_wa_poly
46C_EMPLM_WA | Boundary extrapolation of MPLM_WA (faithful to White and Adcroft \cite white2008) | recon1d_emplm_wa
47C_EMPLM_WA_POLY | Boundary extrapolation of MPLM using polynomial repesentation (equivalent to PLM) | recon1d_emplm_wa_poly
48C_PLM_CWK | Piecewise Linear Method in index space (grid independent) | recon1d_plm_cwk
49C_MPLM_CWK | Monotonized Piecewise Linear Method in index space (grid independent) | recon1d_mplm_cwk
50C_EMPLM_CWK | Boundary extrapolatino of Monotonized Piecewise Linear Method in index space (grid independent) | recon1d_emplm_cwk
51C_PPM_CW | Piecewise Linear Method (faithful to Colella and Woodward \cite colella1984) | recon1d_ppm_cw
52C_PPM_HYBGEN | PPM (equivalent to PPM_HYBGEN) | recon1d_ppm_hybgen
53C_PPM_H4_2018 | (equivalent to PPM_H4 with answers circa 2018) | recon1d_ppm_h4_2018
54C_PPM_H4_2019 | (equivalent to PPM_H4 with answers post 2019) | recon1d_ppm_h4_2019
55C_PPM_CWK | Piecewise Parabolic Method in index space (grid independent) | recon1d_ppm_cwk
56C_EPPM_CWK | Piecewise Parabolic Method in index space (grid independent) | recon1d_eppm_cwk (extends recon1d_ppm_cwk)
57
58The motivation for some of the schemes in the last table was to recover certain numerical of computationsl properties, summarized in the next table.
59
60REMAPPING_SCHEME | Representation | Globally monotonic | Consistent | Grid dependent | Uniform test
61:--------------: | :------------- | :----------------- | :--------- | :------------- | :-----------
62PCM | Single scalar | Yes | Yes | No | Pass
63PLM | Polynomial | Forced | | Yes | Fail
64PLM_HYBGEN | Polynomial | No | | Yes | Fail
65PPM_H4 | Edge values | | | Yes | Fail
66PPM_IH4 | Edge values | | | Yes | Fail
67PPM_HYBGEN | Edge values | | | Yes | Fail
68PPM_CW | Edge values | | | Yes | Fail
69WENO_HYBGEN | Edge values | | | Yes | Fail
70PQM_IH4IH3 | Polynomial | | | Yes | Fail
71PQM_IH6IH5 | Polynomial | | | Yes | Fail
72C_PCM | Single scalar | Yes | Yes | No | Pass
73C_PLM_CW | Edge values | No | Yes | Yes | Pass
74C_PLM_HYBGEN | Edge values | No | Yes | Yes | Pass
75C_MPLM_WA | Edge values | Yes | No | Yes | Pass
76C_MPLM_WA_POLY | Polynomial | Yes | * | Yes | Pass
77C_EMPLM_WA | Edge values | Yes | No | Yes | Pass
78C_EMPLM_WA_POLY | Polynomial | No | | Yes | Pass
79C_PLM_CWK | Edge values | Yes | Yes | No | Pass
80C_MPLM_CWK | Edge values | Yes | Yes | No | Pass
81C_EMPLM_CWK | Edge values | Yes | Yes | No | Pass
82C_PPM_CW | Edge values | Yes | Yes | Yes | Pass
83C_PPM_HYBGEN | Edge values | * forced | Yes | Yes | Pass
84C_PPM_H4_2018 | Edge values | * forced | | Yes | Pass
85C_PPM_H4_2019 | Edge values | * forced | Yes | Yes | Pass
86C_PPM_CWK | Edge values | Yes | Yes | No | Pass
87C_EPPM_CWK | Edge values | Yes | Yes | No | Pass
88
89The OM4-era schemes calculate values via the function mom_remapping::average_value_ppoly() which uses reconstructions stored as the corresponding polynomial coefficients for PLM and PQM, but uses edge values for PPM.
90The newer class-based schemes use edge values to store the reconstructions for all schemes (except where replicating the OM4-era schemes).
91
92*/