mom_remapping module reference

Provides column-wise vertical remapping functions.

More…

Data Types

remapping_cs

Container for remapping parameters.

Functions/Subroutines

remapping_set_param()

Set parameters within remapping object.

extract_member_remapping_cs()

remapping_core_h()

Remaps column of values u0 on grid h0 to grid h1 assuming the top edge is aligned and using the OM4 reconstruction methods.

remapping_core_w()

Remaps column of values u0 on grid h0 to implied grid h1 where the interfaces of h1 differ from those of h0 by dx.

build_reconstructions_1d()

Creates polynomial reconstructions of u0 on the source grid h0.

check_reconstructions_1d()

Checks that edge values and reconstructions satisfy bounds.

intersect_src_tgt_grids()

Returns the intersection of source and targets grids along with and auxiliary lists or indices.

remap_src_to_sub_grid_om4()

Adjust h_sub to ensure accurate conservation.

remap_src_to_sub_grid()

Remaps column of n0 values u0 on grid h0 to subgrid h_sub.

remap_sub_to_tgt_grid_om4()

Remaps column of n0+n1+1 values usub on sub-grid h_sub to targets on grid h1 using the OM4-era algorithm.

remap_sub_to_tgt_grid()

Remaps column of n0+n1+1 values usub on sub-grid h_sub to targets on grid h1.

interpolate_column()

Linearly interpolate interface data, u_src, from grid h_src to a grid h_dest.

reintegrate_column()

Conservatively calculate integrated data, uh_dest, on grid h_dest, from layer-integrated data, uh_src, on grid h_src.

average_value_ppoly()

Returns the average value of a reconstruction within a single source cell, i0, between the non-dimensional positions xa and xb (xa<=xb) with dimensional separation dh.

check_remapped_values()

This subroutine checks for sufficient consistence in the extrema and total amounts on the old and new grids.

measure_input_bounds()

Measure totals and bounds on source grid.

measure_output_bounds()

Measure totals and bounds on destination grid.

dzfromh1h2()

Calculates the change in interface positions based on h1 and h2.

initialize_remapping()

Constructor for remapping control structure.

setreconstructiontype()

Changes the method of reconstruction Use this routine to parse a string parameter specifying the reconstruction and re-allocates work arrays appropriately.

end_remapping()

Destrcutor for remapping control structure.

test_interp()

Test if interpolate_column() produces the wrong answer.

test_reintegrate()

Test if reintegrate_column() produces the wrong answer.

test_recon_consistency()

Test class-based remapping for internal consistency on random data.

test_preserve_uniform()

Test that remapping a uniform field remains uniform.

test_unchanged_grid()

Test that remapping to the same grid preserves answers.

compare_two_schemes()

Test class-based remapping bitwise reproduces original implementation.

remapping_unit_tests()

Runs unit tests on remapping functions.

Detailed Description

Provides column-wise vertical remapping functions.

Type Documentation

type mom_remapping/remapping_cs

Container for remapping parameters.

Type fields:
  • % remapping_scheme [integer] :: Determines which reconstruction to use.

  • % degree [integer] :: Degree of polynomial reconstruction.

  • % boundary_extrapolation [logical] :: If true, extrapolate boundaries.

  • % check_reconstruction [logical] :: If true, reconstructions are checked for consistency.

  • % check_remapping [logical] :: If true, the result of remapping are checked for conservation and bounds.

  • % force_bounds_in_subcell [logical] :: If true, the intermediate values used in remapping are forced to be bounded.

  • % force_bounds_in_target [logical] :: If true, impose bounds on the remapping from sub-cells to target grid.

  • % better_force_bounds_in_target [logical] :: If true, impose bounds on the remapping from non-vanished sub-cells to target grid.

  • % offset_tgt_summation [logical] :: If true, calculate and use an offset when summing sub-cells to the target grid.

  • % answer_date [integer] :: The vintage of the expressions to use for remapping. Values below 20190101 result in the use of older, less accurate expressions.

  • % om4_remap_via_sub_cells [logical] :: If true, use the OM4 version of the remapping algorithm that makes poor assumptions about the reconstructions in top and bottom layers of the source grid.

  • % h_neglect [real] :: A negligibly small width for the purpose of cell reconstructions in the same units as the h0 argument to remapping_core_h [H].

  • % h_neglect_edge [real] :: A negligibly small width for the purpose of edge value calculations in the same units as the h0 argument to remapping_core_h [H].

  • % debug [logical] :: If true, do some debugging as operations proceed.

  • % reconstruction [class( recon1d ),pointer] :: The instance of the actual equation of state.

Function/Subroutine Documentation

subroutine mom_remapping/remapping_set_param(CS, remapping_scheme, boundary_extrapolation, check_reconstruction, check_remapping, force_bounds_in_subcell, force_bounds_in_target, better_force_bounds_in_target, offset_tgt_summation, om4_remap_via_sub_cells, answers_2018, answer_date, nk, h_neglect, h_neglect_edge)

Set parameters within remapping object.

Parameters:
  • cs :: [inout] Remapping control structure

  • remapping_scheme :: [in] Remapping scheme to use

  • boundary_extrapolation :: [in] Indicate to extrapolate in boundary cells

  • check_reconstruction :: [in] Indicate to check reconstructions

  • check_remapping :: [in] Indicate to check results of remapping

  • force_bounds_in_subcell :: [in] Force subcells values to be bounded

  • force_bounds_in_target :: [in] Force target values to be bounded

  • better_force_bounds_in_target :: [in] Force target values to be bounded

  • offset_tgt_summation :: [in] Use an offset when summing sub-cells

  • om4_remap_via_sub_cells :: [in] If true, use OM4 remapping algorithm

  • answers_2018 :: [in] If true use older, less accurate expressions.

  • answer_date :: [in] The vintage of the expressions to use

  • h_neglect :: [in] A negligibly small width for the purpose of cell reconstructions in the same units as the h0 argument to remapping_core_h [H]

  • h_neglect_edge :: [in] A negligibly small width for the purpose of edge value calculations in the same units as as the h0 argument to remapping_core_h [H]

  • nk :: [in] Number of levels to initialize reconstruction class with

Call to:

mom_error_handler::mom_error setreconstructiontype

Called from:

mom_ale::ale_set_extrap_boundaries mom_ale::ale_set_om4_remap_algorithm initialize_remapping remapping_unit_tests

subroutine mom_remapping/extract_member_remapping_cs(CS, remapping_scheme, degree, boundary_extrapolation, check_reconstruction, check_remapping, force_bounds_in_subcell, force_bounds_in_target, better_force_bounds_in_target, offset_tgt_summation)
Parameters:
  • cs :: [in] Control structure for remapping module

  • remapping_scheme :: [out] Determines which reconstruction scheme to use

  • degree :: [out] Degree of polynomial reconstruction

  • boundary_extrapolation :: [out] If true, extrapolate boundaries

  • check_reconstruction :: [out] If true, reconstructions are checked for consistency.

  • check_remapping :: [out] If true, the result of remapping are checked for conservation and bounds.

  • force_bounds_in_subcell :: [out] If true, the intermediate values used in remapping are forced to be bounded.

  • force_bounds_in_target :: [out] Force target values to be bounded

  • better_force_bounds_in_target :: [out] Force target values to be bounded

  • offset_tgt_summation :: [out] Use an offset when summing sub-cells

subroutine mom_remapping/remapping_core_h(CS, n0, h0, u0, n1, h1, u1, net_err, PCM_cell)

Remaps column of values u0 on grid h0 to grid h1 assuming the top edge is aligned and using the OM4 reconstruction methods.

Todo

Remove h_neglect argument by moving into remapping_CS

Remove PCM_cell argument by adding new method in Recon1D class

Parameters:
  • cs :: [in] Remapping control structure

  • n0 :: [in] Number of cells on source grid

  • h0 :: [in] Cell widths on source grid [H]

  • u0 :: [in] Cell averages on source grid [A]

  • n1 :: [in] Number of cells on target grid

  • h1 :: [in] Cell widths on target grid [H]

  • u1 :: [out] Cell averages on target grid [A]

  • net_err :: [out] Error in total column [A H]

  • pcm_cell :: [in] If present, use PCM remapping for cells in the source grid where this is true.

Call to:

build_reconstructions_1d check_reconstructions_1d check_remapped_values intersect_src_tgt_grids remap_src_to_sub_grid remap_src_to_sub_grid_om4 remap_sub_to_tgt_grid remap_sub_to_tgt_grid_om4 remapping_via_class

Called from:

mom_ale_sponge::apply_ale_sponge mom_oda_driver_mod::apply_oda_tracer_increments coord_hycom::build_hycom1_column coord_rho::build_rho_column_iteratively mom_tidal_mixing::calculate_cvmix_tidal compare_two_schemes mom_state_initialization::cut_off_column_top marbl_tracers::marbl_tracers_column_physics remapping_unit_tests mom_oda_driver_mod::set_prior_tracer test_preserve_uniform test_unchanged_grid mom_wave_speed::wave_speed mom_wave_speed::wave_speeds

subroutine mom_remapping/remapping_core_w(CS, n0, h0, u0, n1, dx, u1)

Remaps column of values u0 on grid h0 to implied grid h1 where the interfaces of h1 differ from those of h0 by dx.

Parameters:
  • cs :: [in] Remapping control structure

  • n0 :: [in] Number of cells on source grid

  • h0 :: [in] Cell widths on source grid [H]

  • u0 :: [in] Cell averages on source grid [A]

  • n1 :: [in] Number of cells on target grid

  • dx :: [in] Cell widths on target grid [H]

  • u1 :: [out] Cell averages on target grid [A]

Call to:

build_reconstructions_1d check_reconstructions_1d check_remapped_values intersect_src_tgt_grids remap_src_to_sub_grid_om4 remap_sub_to_tgt_grid_om4

Called from:

remapping_unit_tests

subroutine mom_remapping/build_reconstructions_1d(CS, n0, h0, u0, ppoly_r_coefs, ppoly_r_E, ppoly_r_S, iMethod, h_neglect, h_neglect_edge, PCM_cell, debug)

Creates polynomial reconstructions of u0 on the source grid h0.

Parameters:
  • cs :: [in] Remapping control structure

  • n0 :: [in] Number of cells on source grid

  • h0 :: [in] Cell widths on source grid [H]

  • u0 :: [in] Cell averages on source grid [A]

  • ppoly_r_coefs :: [out] Coefficients of polynomial [A]

  • ppoly_r_e :: [out] Edge value of polynomial [A]

  • ppoly_r_s :: [out] Edge slope of polynomial [A H-1]

  • imethod :: [out] Integration method

  • h_neglect :: [in] A negligibly small width for the purpose of cell reconstructions in the same units as h0 [H]

  • h_neglect_edge :: [in] A negligibly small width for the purpose of edge value calculations in the same units as h0 [H]. The default is h_neglect.

  • pcm_cell :: [in] If present, use PCM remapping for cells from the source grid where this is true.

  • debug :: [in] If true, enable debugging

Call to:

regrid_edge_values::edge_slopes_implicit_h3 regrid_edge_values::edge_slopes_implicit_h5 mom_hybgen_remap::hybgen_plm_coefs mom_hybgen_remap::hybgen_ppm_coefs mom_hybgen_remap::hybgen_weno_coefs integration_pcm integration_plm integration_ppm integration_pqm mom_error_handler::mom_error pcm_functions::pcm_reconstruction plm_functions::plm_boundary_extrapolation plm_functions::plm_reconstruction ppm_functions::ppm_monotonicity pqm_functions::pqm_boundary_extrapolation_v1 pqm_functions::pqm_reconstruction remapping_pcm remapping_plm remapping_plm_hybgen remapping_ppm_cw remapping_ppm_h4 remapping_ppm_hybgen remapping_ppm_ih4 remapping_pqm_ih4ih3 remapping_pqm_ih6ih5 remapping_via_class remapping_weno_hybgen

Called from:

remapping_core_h remapping_core_w

subroutine mom_remapping/check_reconstructions_1d(n0, h0, u0, deg, boundary_extrapolation, ppoly_r_coefs, ppoly_r_E)

Checks that edge values and reconstructions satisfy bounds.

Parameters:
  • n0 :: [in] Number of cells on source grid

  • h0 :: [in] Cell widths on source grid [H]

  • u0 :: [in] Cell averages on source grid [A]

  • deg :: [in] Degree of polynomial reconstruction

  • boundary_extrapolation :: [in] Extrapolate at boundaries if true

  • ppoly_r_coefs :: [in] Coefficients of polynomial [A]

  • ppoly_r_e :: [in] Edge value of polynomial [A]

Call to:

mom_error_handler::mom_error

Called from:

remapping_core_h remapping_core_w

subroutine mom_remapping/intersect_src_tgt_grids(n0, h0, n1, h1, h_sub, h0_eff, isrc_start, isrc_end, isrc_max, itgt_start, itgt_end, isub_src)

Returns the intersection of source and targets grids along with and auxiliary lists or indices.

For source grid with thicknesses h0(1:n0) and target grid with thicknesses h1(1:n1) the intersection or “subgrid” has thicknesses h_sub(1:n0+n1+1). h0 and h1 must have the same units. h_sub will return with the same units as h0 and h1.

Notes on the algorithm: Internally, grids are defined by the interfaces (although we describe grids via thicknesses for accuracy). The intersection or union of two grids is thus defined by the super set of both lists of interfaces. Because both source and target grids can contain vanished cells, we do not eliminate repeated interfaces from the union. That is, the total number of interfaces of the sub-cells is equal to the total numer of interfaces of the source grid (n0+1) plus the total number of interfaces of the target grid (n1+1), i.e. n0+n1+2. Whenever target and source interfaces align, then the retention of identical interfaces leads to a vanished subcell. The remapping uses a common point of reference to the left (top) so there is always a vanished subcell at the left (top). If the total column thicknesses are the same, then the right (bottom) interfaces are also aligned and so the last subcell will also be vanished.

Parameters:
  • n0 :: [in] Number of cells in source grid

  • h0 :: [in] Source grid widths (size n0) [H]

  • n1 :: [in] Number of cells in target grid

  • h1 :: [in] Target grid widths (size n1) [H]

  • h_sub :: [out] Overlapping sub-cell thicknesses, h_sub [H]

  • h0_eff :: [out] Effective thickness of source cells [H]

  • isrc_start :: [out] Index of first sub-cell within each source cell

  • isrc_end :: [out] Index of last sub-cell within each source cell

  • isrc_max :: [out] Index of thickest sub-cell within each source cell

  • itgt_start :: [out] Index of first sub-cell within each target cell

  • itgt_end :: [out] Index of last sub-cell within each target cell

  • isub_src :: [out] Index of source cell for each sub-cell

Called from:

remapping_core_h remapping_core_w remapping_unit_tests

subroutine mom_remapping/remap_src_to_sub_grid_om4(n0, h0, u0, ppoly0_E, ppoly0_coefs, n1, h_sub, h0_eff, isrc_start, isrc_end, isrc_max, isub_src, method, force_bounds_in_subcell, u_sub, uh_sub, u02_err)

Adjust h_sub to ensure accurate conservation.

Loop over each source cell substituting the thickest sub-cell (within the source cell) with the residual of the source cell thickness minus the sum of other sub-cells aka a genius algorithm for accurate conservation when remapping from Robert Hallberg (@Hallberg-NOAA). Remaps column of n0 values u0 on grid h0 to subgrid h_sub

This includes an error for the scenario where the source grid is much thicker than the target grid and extrapolation is needed.

Parameters:
  • n0 :: [in] Number of cells in source grid

  • h0 :: [in] Source grid widths (size n0) [H]

  • u0 :: [in] Source grid widths (size n0) [H]

  • ppoly0_e :: [in] Edge value of polynomial [A]

  • ppoly0_coefs :: [in] Coefficients of polynomial [A]

  • n1 :: [in] Number of cells in target grid

  • h_sub :: [in] Overlapping sub-cell thicknesses, h_sub [H]

  • h0_eff :: [in] Effective thickness of source cells [H]

  • isrc_start :: [in] Index of first sub-cell within each source cell

  • isrc_end :: [in] Index of last sub-cell within each source cell

  • isrc_max :: [in] Index of thickest sub-cell within each source cell

  • isub_src :: [in] Index of source cell for each sub-cell

  • method :: [in] Remapping scheme to use

  • force_bounds_in_subcell :: [in] Force sub-cell values to be bounded

  • u_sub :: [out] Sub-cell cell averages (size n1) [A]

  • uh_sub :: [out] Sub-cell cell integrals (size n1) [A H]

  • u02_err :: [out] Integrated reconstruction error estimates [A H]

Call to:

average_value_ppoly

Called from:

remapping_core_h remapping_core_w remapping_unit_tests

subroutine mom_remapping/remap_src_to_sub_grid(n0, h0, u0, ppoly0_E, ppoly0_coefs, n1, h_sub, isrc_start, isrc_end, isrc_max, isub_src, method, force_bounds_in_subcell, u_sub, uh_sub, u02_err)

Remaps column of n0 values u0 on grid h0 to subgrid h_sub.

Parameters:
  • n0 :: [in] Number of cells in source grid

  • h0 :: [in] Source grid widths (size n0) [H]

  • u0 :: [in] Source grid widths (size n0) [H]

  • ppoly0_e :: [in] Edge value of polynomial [A]

  • ppoly0_coefs :: [in] Coefficients of polynomial [A]

  • n1 :: [in] Number of cells in target grid

  • h_sub :: [in] Overlapping sub-cell thicknesses, h_sub [H]

  • isrc_start :: [in] Index of first sub-cell within each source cell

  • isrc_end :: [in] Index of last sub-cell within each source cell

  • isrc_max :: [in] Index of thickest sub-cell within each source cell

  • isub_src :: [in] Index of source cell for each sub-cell

  • method :: [in] Remapping scheme to use

  • force_bounds_in_subcell :: [in] Force sub-cell values to be bounded

  • u_sub :: [out] Sub-cell cell averages (size n1) [A]

  • uh_sub :: [out] Sub-cell cell integrals (size n1) [A H]

  • u02_err :: [out] Integrated reconstruction error estimates [A H]

Call to:

average_value_ppoly

Called from:

remapping_core_h remapping_unit_tests

subroutine mom_remapping/remap_sub_to_tgt_grid_om4(n0, n1, h1, h_sub, u_sub, uh_sub, itgt_start, itgt_end, force_bounds_in_target, u1, uh_err)

Remaps column of n0+n1+1 values usub on sub-grid h_sub to targets on grid h1 using the OM4-era algorithm.

Parameters:
  • n0 :: [in] Number of cells in source grid

  • n1 :: [in] Number of cells in target grid

  • h1 :: [in] Target grid widths (size n1) [H]

  • h_sub :: [in] Overlapping sub-cell thicknesses, h_sub [H]

  • u_sub :: [in] Sub-cell cell averages (size n1) [A]

  • uh_sub :: [in] Sub-cell cell integrals (size n1) [A H]

  • itgt_start :: [in] Index of first sub-cell within each target cell

  • itgt_end :: [in] Index of last sub-cell within each target cell

  • force_bounds_in_target :: [in] Force sub-cell values to be bounded

  • u1 :: [out] Target cell averages (size n1) [A]

  • uh_err :: [out] Estimate of bound on error in sum of u*h [A H]

Called from:

remapping_core_h remapping_core_w

subroutine mom_remapping/remap_sub_to_tgt_grid(n0, n1, h1, h_sub, u_sub, uh_sub, itgt_start, itgt_end, force_bounds_in_target, better_force_bounds_in_target, offset_summation, u1, uh_err)

Remaps column of n0+n1+1 values usub on sub-grid h_sub to targets on grid h1.

Parameters:
  • n0 :: [in] Number of cells in source grid

  • n1 :: [in] Number of cells in target grid

  • h1 :: [in] Target grid widths (size n1) [H]

  • h_sub :: [in] Overlapping sub-cell thicknesses, h_sub [H]

  • u_sub :: [in] Sub-cell cell averages (size n1) [A]

  • uh_sub :: [in] Sub-cell cell integrals (size n1) [A H]

  • itgt_start :: [in] Index of first sub-cell within each target cell

  • itgt_end :: [in] Index of last sub-cell within each target cell

  • force_bounds_in_target :: [in] Force sub-cell values to be bounded

  • better_force_bounds_in_target :: [in] Force sub-cell values to be bounded

  • offset_summation :: [in] Offset values in summation for accuracy

  • u1 :: [out] Target cell averages (size n1) [A]

  • uh_err :: [out] Estimate of bound on error in sum of u*h [A H]

Called from:

remapping_core_h remapping_unit_tests

subroutine mom_remapping/interpolate_column(nsrc, h_src, u_src, ndest, h_dest, u_dest, mask_edges)

Linearly interpolate interface data, u_src, from grid h_src to a grid h_dest.

Parameters:
  • nsrc :: [in] Number of source cells

  • h_src :: [in] Thickness of source cells [H]

  • u_src :: [in] Values at source cell interfaces [A]

  • ndest :: [in] Number of destination cells

  • h_dest :: [in] Thickness of destination cells [H]

  • u_dest :: [inout] Interpolated value at destination cell interfaces [A]

  • mask_edges :: [in] If true, mask the values outside of massless layers at the top and bottom of the column.

Called from:

test_interp mom_diag_remap::vertically_interpolate_field mom_wave_speed::wave_speeds

subroutine mom_remapping/reintegrate_column(nsrc, h_src, uh_src, ndest, h_dest, uh_dest)

Conservatively calculate integrated data, uh_dest, on grid h_dest, from layer-integrated data, uh_src, on grid h_src.

Parameters:
  • nsrc :: [in] Number of source cells

  • h_src :: [in] Thickness of source cells [H]

  • uh_src :: [in] Values at source cell interfaces [A H]

  • ndest :: [in] Number of destination cells

  • h_dest :: [in] Thickness of destination cells [H]

  • uh_dest :: [inout] Interpolated value at destination cell interfaces [A H]

Called from:

test_reintegrate mom_diag_remap::vertically_reintegrate_field

function mom_remapping/average_value_ppoly(n0, u0, ppoly0_E, ppoly0_coefs, method, i0, xa, xb) [real]

Returns the average value of a reconstruction within a single source cell, i0, between the non-dimensional positions xa and xb (xa<=xb) with dimensional separation dh.

Parameters:
  • n0 :: [in] Number of cells in source grid

  • u0 :: [in] Cell means [A]

  • ppoly0_e :: [in] Edge value of polynomial [A]

  • ppoly0_coefs :: [in] Coefficients of polynomial [A]

  • method :: [in] Remapping scheme to use

  • i0 :: [in] Source cell index

  • xa :: [in] Non-dimensional start position within source cell [nondim]

  • xb :: [in] Non-dimensional end position within source cell [nondim]

Call to:

integration_pcm integration_plm integration_ppm integration_pqm mom_error_handler::mom_error

Called from:

mom_neutral_diffusion::neutral_surface_t_eval remap_src_to_sub_grid remap_src_to_sub_grid_om4

subroutine mom_remapping/check_remapped_values(n0, h0, u0, ppoly_r_E, deg, ppoly_r_coefs, n1, h1, u1, iMethod, uh_err, caller)

This subroutine checks for sufficient consistence in the extrema and total amounts on the old and new grids.

Parameters:
  • n0 :: [in] Number of cells on source grid

  • h0 :: [in] Cell widths on source grid [H]

  • u0 :: [in] Cell averages on source grid [A]

  • ppoly_r_e :: [in] Edge values of polynomial fits [A]

  • deg :: [in] Degree of the piecewise polynomial reconstrution

  • ppoly_r_coefs :: [in] Coefficients of the piecewise polynomial reconstructions [A]

  • n1 :: [in] Number of cells on target grid

  • h1 :: [in] Cell widths on target grid [H]

  • u1 :: [in] Cell averages on target grid [A]

  • imethod :: [in] An integer indicating the integration method used

  • uh_err :: [in] A bound on the error in the sum of u*h as estimated by the remapping code [H A]

  • caller :: [in] The name of the calling routine.

Call to:

measure_input_bounds measure_output_bounds mom_error_handler::mom_error

Called from:

remapping_core_h remapping_core_w

subroutine mom_remapping/measure_input_bounds(n0, h0, u0, edge_values, h0tot, h0err, u0tot, u0err, u0min, u0max)

Measure totals and bounds on source grid.

Parameters:
  • n0 :: [in] Number of cells on source grid

  • h0 :: [in] Cell widths on source grid [H]

  • u0 :: [in] Cell averages on source grid [A]

  • edge_values :: [in] Cell edge values on source grid [A]

  • h0tot :: [out] Sum of cell widths [H]

  • h0err :: [out] Magnitude of round-off error in h0tot [H]

  • u0tot :: [out] Sum of cell widths times values [H A]

  • u0err :: [out] Magnitude of round-off error in u0tot [H A]

  • u0min :: [out] Minimum value in reconstructions of u0 [A]

  • u0max :: [out] Maximum value in reconstructions of u0 [A]

Called from:

check_remapped_values

subroutine mom_remapping/measure_output_bounds(n1, h1, u1, h1tot, h1err, u1tot, u1err, u1min, u1max)

Measure totals and bounds on destination grid.

Parameters:
  • n1 :: [in] Number of cells on destination grid

  • h1 :: [in] Cell widths on destination grid [H]

  • u1 :: [in] Cell averages on destination grid [A]

  • h1tot :: [out] Sum of cell widths [H]

  • h1err :: [out] Magnitude of round-off error in h1tot [H]

  • u1tot :: [out] Sum of cell widths times values [H A]

  • u1err :: [out] Magnitude of round-off error in u1tot [H A]

  • u1min :: [out] Minimum value in reconstructions of u1 [A]

  • u1max :: [out] Maximum value in reconstructions of u1 [A]

Called from:

check_remapped_values

subroutine mom_remapping/dzfromh1h2(n1, h1, n2, h2, dx)

Calculates the change in interface positions based on h1 and h2.

Parameters:
  • n1 :: [in] Number of cells on source grid

  • h1 :: [in] Cell widths of source grid (size n1) [H]

  • n2 :: [in] Number of cells on target grid

  • h2 :: [in] Cell widths of target grid (size n2) [H]

  • dx :: [out] Change in interface position (size n2+1) [H]

Called from:

mom_ale::ale_remap_scalar remapping_unit_tests

subroutine mom_remapping/initialize_remapping(CS, remapping_scheme, boundary_extrapolation, check_reconstruction, check_remapping, force_bounds_in_subcell, force_bounds_in_target, better_force_bounds_in_target, offset_tgt_summation, om4_remap_via_sub_cells, answers_2018, answer_date, nk, h_neglect, h_neglect_edge)

Constructor for remapping control structure.

Parameters:
  • cs :: [inout] Remapping control structure

  • remapping_scheme :: [in] Remapping scheme to use

  • boundary_extrapolation :: [in] Indicate to extrapolate in boundary cells

  • check_reconstruction :: [in] Indicate to check reconstructions

  • check_remapping :: [in] Indicate to check results of remapping

  • force_bounds_in_subcell :: [in] Force subcells values to be bounded

  • force_bounds_in_target :: [in] Force target values to be bounded

  • better_force_bounds_in_target :: [in] Force target values to be bounded

  • offset_tgt_summation :: [in] Use an offset when summing sub-cells

  • om4_remap_via_sub_cells :: [in] If true, use OM4 remapping algorithm

  • answers_2018 :: [in] If true use older, less accurate expressions.

  • answer_date :: [in] The vintage of the expressions to use

  • h_neglect :: [in] A negligibly small width for the purpose of cell reconstructions in the same units as h0 [H]

  • h_neglect_edge :: [in] A negligibly small width for the purpose of edge value calculations in the same units as h0 [H].

  • nk :: [in] Number of levels to initialize reconstruction class with

Call to:

remapping_set_param

Called from:

mom_oda_driver_mod::init_oda mom_ale_sponge::initialize_ale_sponge::initialize_ale_sponge_fixed mom_ale_sponge::initialize_ale_sponge::initialize_ale_sponge_varying mom_open_boundary::initialize_segment_data mom_tracer_initialization_from_z::mom_initialize_tracer_from_z mom_tidal_mixing::read_tidal_constituents marbl_tracers::register_marbl_tracers remapping_unit_tests test_preserve_uniform test_recon_consistency test_unchanged_grid mom_state_initialization::trim_for_ice mom_wave_speed::wave_speed_init

subroutine mom_remapping/setreconstructiontype(string, CS)

Changes the method of reconstruction Use this routine to parse a string parameter specifying the reconstruction and re-allocates work arrays appropriately. It is called from initialize_remapping but can be called from an external module too.

Parameters:
  • string :: [in] String to parse for method

  • cs :: [inout] Remapping control structure

Call to:

mom_error_handler::mom_error remapping_pcm remapping_plm remapping_plm_hybgen remapping_ppm_cw remapping_ppm_h4 remapping_ppm_hybgen remapping_ppm_ih4 remapping_pqm_ih4ih3 remapping_pqm_ih6ih5 remapping_via_class remapping_weno_hybgen mom_string_functions::uppercase

Called from:

remapping_set_param

subroutine mom_remapping/end_remapping(CS)

Destrcutor for remapping control structure.

Parameters:

cs :: [inout] Remapping control structure

Called from:

remapping_unit_tests

subroutine mom_remapping/test_interp(test, msg, nsrc, h_src, u_src, ndest, h_dest, u_true)

Test if interpolate_column() produces the wrong answer. produces the wrong answer.

Parameters:
  • test :: [inout] Unit testing convenience functions

  • msg :: [in] Message to label test

  • nsrc :: [in] Number of source cells

  • h_src :: [in] Thickness of source cells [H]

  • u_src :: [in] Values at source cell interfaces [A]

  • ndest :: [in] Number of destination cells

  • h_dest :: [in] Thickness of destination cells [H]

  • u_true :: [in] Correct value at destination cell interfaces [A]

Call to:

interpolate_column

Called from:

remapping_unit_tests

subroutine mom_remapping/test_reintegrate(test, msg, nsrc, h_src, uh_src, ndest, h_dest, uh_true)

Test if reintegrate_column() produces the wrong answer. produces the wrong answer.

Parameters:
  • test :: [inout] Unit testing convenience functions

  • msg :: [in] Message to label test

  • nsrc :: [in] Number of source cells

  • h_src :: [in] Thickness of source cells [H]

  • uh_src :: [in] Values of source cell stuff [A H]

  • ndest :: [in] Number of destination cells

  • h_dest :: [in] Thickness of destination cells [H]

  • uh_true :: [in] Correct value of destination cell stuff [A H]

Call to:

reintegrate_column

Called from:

remapping_unit_tests

subroutine mom_remapping/test_recon_consistency(test, scheme, n0, niter, h_neglect)

Test class-based remapping for internal consistency on random data.

Parameters:
  • test :: [inout] Unit testing convenience functions

  • scheme :: [in] Name of scheme to use

  • n0 :: [in] Number of source cells

  • niter :: [in] Number of randomized columns to try

  • h_neglect :: [in] A negligibly small width used in cell reconstructions [H]

Call to:

initialize_remapping

Called from:

remapping_unit_tests

subroutine mom_remapping/test_preserve_uniform(test, scheme, n0, niter, h_neglect)

Test that remapping a uniform field remains uniform.

Parameters:
  • test :: [inout] Unit testing convenience functions

  • scheme :: [in] Name of scheme to use

  • n0 :: [in] Number of source cells

  • niter :: [in] Number of randomized columns to try

  • h_neglect :: [in] A negligibly small width used in cell reconstructions [H]

Call to:

initialize_remapping remapping_core_h

Called from:

remapping_unit_tests

subroutine mom_remapping/test_unchanged_grid(test, scheme, n0, niter, h_neglect)

Test that remapping to the same grid preserves answers.

Notes: 1) this test is currently imperfect since occasionally we see round-off implying that ( A * B ) / A != B 2) this test does not work for vanished layers

Parameters:
  • test :: [inout] Unit testing convenience functions

  • scheme :: [in] Name of scheme to use

  • n0 :: [in] Number of source cells

  • niter :: [in] Number of randomized columns to try

  • h_neglect :: [in] A negligibly small width used in cell reconstructions [H]

Call to:

initialize_remapping remapping_core_h

Called from:

remapping_unit_tests

subroutine mom_remapping/compare_two_schemes(test, CS1, CS2, n0, n1, niter, msg)

Test class-based remapping bitwise reproduces original implementation.

Parameters:
  • test :: [inout] Unit testing convenience functions

  • cs1 :: [inout] Remapping control structure configured for original implementation

  • cs2 :: [inout] Remapping control structure configured for class-based implementation

  • n0 :: [in] Number of source cells

  • n1 :: [in] Number of destination cells

  • niter :: [in] Number of randomized columns to try

  • msg :: [in] Message to label test

Call to:

remapping_core_h

Called from:

remapping_unit_tests

function mom_remapping/remapping_unit_tests(verbose, num_comp_samp) [logical]

Runs unit tests on remapping functions. Should only be called from a single/root thread Returns True if a test fails, otherwise False.

Parameters:
  • verbose :: [in] If true, write results to stdout

  • num_comp_samp :: [in] If present, number of samples to try comparing class-based cade against OM4 code

Call to:

compare_two_schemes dzfromh1h2 end_remapping initialize_remapping integration_plm intersect_src_tgt_grids pcm_functions::pcm_reconstruction plm_functions::plm_boundary_extrapolation plm_functions::plm_reconstruction remap_src_to_sub_grid remap_src_to_sub_grid_om4 remap_sub_to_tgt_grid remapping_core_h remapping_core_w remapping_set_param test_interp test_preserve_uniform test_recon_consistency test_reintegrate test_unchanged_grid

Called from:

mom_unit_tests::unit_tests