Skip to content

Commit

Permalink
Merge pull request #44 from NOAA-GFDL/dev/gfdl
Browse files Browse the repository at this point in the history
Merge in latest dev/gfdl updates
  • Loading branch information
wrongkindofdoctor authored Jan 13, 2020
2 parents 162ca97 + e553c46 commit 7dbca83
Show file tree
Hide file tree
Showing 36 changed files with 1,228 additions and 944 deletions.
4 changes: 2 additions & 2 deletions config_src/mct_driver/mom_ocean_model_mct.F90
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,7 @@ subroutine update_ocean_model(Ice_ocean_boundary, OS, Ocean_sfc, &
endif
if (OS%icebergs_alter_ocean) then
if (do_dyn) &
call iceberg_forces(OS%grid, OS%US, OS%forces, OS%use_ice_shelf, &
call iceberg_forces(OS%grid, OS%forces, OS%use_ice_shelf, &
OS%sfc_state, dt_coupling, OS%marine_ice_CSp)
if (do_thermo) &
call iceberg_fluxes(OS%grid, OS%US, OS%fluxes, OS%use_ice_shelf, &
Expand Down Expand Up @@ -562,7 +562,7 @@ subroutine update_ocean_model(Ice_ocean_boundary, OS, Ocean_sfc, &
call iceberg_forces(OS%grid, OS%forces, OS%use_ice_shelf, &
OS%sfc_state, dt_coupling, OS%marine_ice_CSp)
if (do_thermo) &
call iceberg_fluxes(OS%grid, OS%flux_tmp, OS%use_ice_shelf, &
call iceberg_fluxes(OS%grid, OS%US, OS%flux_tmp, OS%use_ice_shelf, &
OS%sfc_state, dt_coupling, OS%marine_ice_CSp)
endif

Expand Down
51 changes: 31 additions & 20 deletions src/ALE/MOM_ALE.F90
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,6 @@ module MOM_ALE
use regrid_edge_values, only : edge_values_implicit_h4
use PLM_functions, only : PLM_reconstruction, PLM_boundary_extrapolation
use PPM_functions, only : PPM_reconstruction, PPM_boundary_extrapolation
use P1M_functions, only : P1M_interpolation, P1M_boundary_extrapolation
use P3M_functions, only : P3M_interpolation, P3M_boundary_extrapolation


implicit none ; private
#include <MOM_memory.h>
Expand Down Expand Up @@ -525,8 +522,8 @@ subroutine ALE_offline_inputs(CS, G, GV, h, tv, Reg, uhtr, vhtr, Kd, debug, OBC)
endif
enddo ; enddo

call ALE_remap_scalar(CS%remapCS, G, GV, nk, h, tv%T, h_new, tv%T)
call ALE_remap_scalar(CS%remapCS, G, GV, nk, h, tv%S, h_new, tv%S)
call ALE_remap_scalar(CS%remapCS, G, GV, nk, h, tv%T, h_new, tv%T, answers_2018=CS%answers_2018)
call ALE_remap_scalar(CS%remapCS, G, GV, nk, h, tv%S, h_new, tv%S, answers_2018=CS%answers_2018)

if (debug) call MOM_tracer_chkinv("After ALE_offline_inputs", G, h_new, Reg%Tr, Reg%ntr)

Expand Down Expand Up @@ -790,8 +787,9 @@ subroutine remap_all_state_vars(CS_remapping, CS_ALE, G, GV, h_old, h_new, Reg,
"and u/v are to be remapped")
endif

!### Try replacing both of these with GV%H_subroundoff
if (GV%Boussinesq) then
if (.not.CS_ALE%answers_2018) then
h_neglect = GV%H_subroundoff ; h_neglect_edge = GV%H_subroundoff
elseif (GV%Boussinesq) then
h_neglect = GV%m_to_H*1.0e-30 ; h_neglect_edge = GV%m_to_H*1.0e-10
else
h_neglect = GV%kg_m2_to_H*1.0e-30 ; h_neglect_edge = GV%kg_m2_to_H*1.0e-10
Expand Down Expand Up @@ -942,7 +940,7 @@ end subroutine remap_all_state_vars
!> Remaps a single scalar between grids described by thicknesses h_src and h_dst.
!! h_dst must be dimensioned as a model array with GV%ke layers while h_src can
!! have an arbitrary number of layers specified by nk_src.
subroutine ALE_remap_scalar(CS, G, GV, nk_src, h_src, s_src, h_dst, s_dst, all_cells, old_remap )
subroutine ALE_remap_scalar(CS, G, GV, nk_src, h_src, s_src, h_dst, s_dst, all_cells, old_remap, answers_2018 )
type(remapping_CS), intent(in) :: CS !< Remapping control structure
type(ocean_grid_type), intent(in) :: G !< Ocean grid structure
type(verticalGrid_type), intent(in) :: GV !< Ocean vertical grid structure
Expand All @@ -958,20 +956,26 @@ subroutine ALE_remap_scalar(CS, G, GV, nk_src, h_src, s_src, h_dst, s_dst, all_c
!! layers otherwise (default).
logical, optional, intent(in) :: old_remap !< If true, use the old "remapping_core_w"
!! method, otherwise use "remapping_core_h".
logical, optional, intent(in) :: answers_2018 !< If true, use the order of arithmetic
!! and expressions that recover the answers for
!! remapping from the end of 2018. Otherwise,
!! use more robust forms of the same expressions.
! Local variables
integer :: i, j, k, n_points
real :: dx(GV%ke+1)
real :: h_neglect, h_neglect_edge
logical :: ignore_vanished_layers, use_remapping_core_w
logical :: ignore_vanished_layers, use_remapping_core_w, use_2018_remap

ignore_vanished_layers = .false.
if (present(all_cells)) ignore_vanished_layers = .not. all_cells
use_remapping_core_w = .false.
if (present(old_remap)) use_remapping_core_w = old_remap
n_points = nk_src
use_2018_remap = .true. ; if (present(answers_2018)) use_2018_remap = answers_2018

!### Try replacing both of these with GV%H_subroundoff
if (GV%Boussinesq) then
if (.not.use_2018_remap) then
h_neglect = GV%H_subroundoff ; h_neglect_edge = GV%H_subroundoff
elseif (GV%Boussinesq) then
h_neglect = GV%m_to_H*1.0e-30 ; h_neglect_edge = GV%m_to_H*1.0e-10
else
h_neglect = GV%kg_m2_to_H*1.0e-30 ; h_neglect_edge = GV%kg_m2_to_H*1.0e-10
Expand Down Expand Up @@ -1034,8 +1038,9 @@ subroutine pressure_gradient_plm( CS, S_t, S_b, T_t, T_b, G, GV, tv, h, bdry_ext
real, dimension(CS%nk,2) :: ppol_coefs !Coefficients of polynomial
real :: h_neglect

!### Replace this with GV%H_subroundoff
if (GV%Boussinesq) then
if (.not.CS%answers_2018) then
h_neglect = GV%H_subroundoff
elseif (GV%Boussinesq) then
h_neglect = GV%m_to_H*1.0e-30
else
h_neglect = GV%kg_m2_to_H*1.0e-30
Expand Down Expand Up @@ -1110,8 +1115,9 @@ subroutine pressure_gradient_ppm( CS, S_t, S_b, T_t, T_b, G, GV, tv, h, bdry_ext
ppol_coefs ! Coefficients of polynomial, all in [degC] or [ppt]
real :: h_neglect, h_neglect_edge ! Tiny thicknesses [H ~> m or kg m-2]

!### Try replacing both of these with GV%H_subroundoff
if (GV%Boussinesq) then
if (.not.CS%answers_2018) then
h_neglect = GV%H_subroundoff ; h_neglect_edge = GV%H_subroundoff
elseif (GV%Boussinesq) then
h_neglect = GV%m_to_H*1.0e-30 ; h_neglect_edge = GV%m_to_H*1.0e-10
else
h_neglect = GV%kg_m2_to_H*1.0e-30 ; h_neglect_edge = GV%kg_m2_to_H*1.0e-10
Expand All @@ -1128,10 +1134,10 @@ subroutine pressure_gradient_ppm( CS, S_t, S_b, T_t, T_b, G, GV, tv, h, bdry_ext
! Reconstruct salinity profile
ppol_E(:,:) = 0.0
ppol_coefs(:,:) = 0.0
!### Try to replace the following value of h_neglect with GV%H_subroundoff.
call edge_values_implicit_h4( GV%ke, hTmp, tmp, ppol_E, h_neglect=h_neglect_edge, &
answers_2018=CS%answers_2018 )
call PPM_reconstruction( GV%ke, hTmp, tmp, ppol_E, ppol_coefs, h_neglect )
call PPM_reconstruction( GV%ke, hTmp, tmp, ppol_E, ppol_coefs, h_neglect, &
answers_2018=CS%answers_2018 )
if (bdry_extrap) &
call PPM_boundary_extrapolation( GV%ke, hTmp, tmp, ppol_E, ppol_coefs, h_neglect )

Expand All @@ -1144,10 +1150,15 @@ subroutine pressure_gradient_ppm( CS, S_t, S_b, T_t, T_b, G, GV, tv, h, bdry_ext
ppol_E(:,:) = 0.0
ppol_coefs(:,:) = 0.0
tmp(:) = tv%T(i,j,:)
!### Try to replace the following value of h_neglect with GV%H_subroundoff.
call edge_values_implicit_h4( GV%ke, hTmp, tmp, ppol_E, h_neglect=1.0e-10*GV%m_to_H, &
if (CS%answers_2018) then
call edge_values_implicit_h4( GV%ke, hTmp, tmp, ppol_E, h_neglect=1.0e-10*GV%m_to_H, &
answers_2018=CS%answers_2018 )
else
call edge_values_implicit_h4( GV%ke, hTmp, tmp, ppol_E, h_neglect=GV%H_subroundoff, &
answers_2018=CS%answers_2018 )
endif
call PPM_reconstruction( GV%ke, hTmp, tmp, ppol_E, ppol_coefs, h_neglect, &
answers_2018=CS%answers_2018 )
call PPM_reconstruction( GV%ke, hTmp, tmp, ppol_E, ppol_coefs, h_neglect )
if (bdry_extrap) &
call PPM_boundary_extrapolation(GV%ke, hTmp, tmp, ppol_E, ppol_coefs, h_neglect )

Expand Down
35 changes: 28 additions & 7 deletions src/ALE/MOM_regridding.F90
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,10 @@ module MOM_regridding
!! If false, integrate from the bottom upward, as does the rest of the model.
logical :: integrate_downward_for_e = .true.

!> If true, use the order of arithmetic and expressions that recover the remapping answers from 2018.
!! If false, use more robust forms of the same remapping expressions.
logical :: remap_answers_2018 = .true.

type(zlike_CS), pointer :: zlike_CS => null() !< Control structure for z-like coordinate generator
type(sigma_CS), pointer :: sigma_CS => null() !< Control structure for sigma coordinate generator
type(rho_CS), pointer :: rho_CS => null() !< Control structure for rho coordinate generator
Expand Down Expand Up @@ -194,6 +198,7 @@ subroutine initialize_regridding(CS, GV, US, max_depth, param_file, mdl, coord_m
character(len=12) :: expected_units ! Temporary strings
logical :: tmpLogical, fix_haloclines, set_max, do_sum, main_parameters
logical :: coord_is_state_dependent, ierr
logical :: default_2018_answers, remap_answers_2018
real :: filt_len, strat_tol, index_scale, tmpReal
real :: maximum_depth ! The maximum depth of the ocean [m] (not in Z).
real :: dz_fixed_sfc, Rho_avg_depth, nlay_sfc_int
Expand Down Expand Up @@ -251,6 +256,15 @@ subroutine initialize_regridding(CS, GV, US, max_depth, param_file, mdl, coord_m
"used. It can be one of the following schemes: "//&
trim(regriddingInterpSchemeDoc), default=trim(string2))
call set_regrid_params(CS, interp_scheme=string)

call get_param(param_file, mdl, "DEFAULT_2018_ANSWERS", default_2018_answers, &
"This sets the default value for the various _2018_ANSWERS parameters.", &
default=.true.)
call get_param(param_file, mdl, "REMAPPING_2018_ANSWERS", remap_answers_2018, &
"If true, use the order of arithmetic and expressions that recover the "//&
"answers from the end of 2018. Otherwise, use updated and more robust "//&
"forms of the same expressions.", default=default_2018_answers)
call set_regrid_params(CS, remap_answers_2018=remap_answers_2018)
endif

if (main_parameters .and. coord_is_state_dependent) then
Expand Down Expand Up @@ -1343,8 +1357,9 @@ subroutine build_rho_grid( G, GV, h, tv, dzInterface, remapCS, CS )
real :: dh
#endif

!### Try replacing both of these with GV%H_subroundoff
if (GV%Boussinesq) then
if (.not.CS%remap_answers_2018) then
h_neglect = GV%H_subroundoff ; h_neglect_edge = GV%H_subroundoff
elseif (GV%Boussinesq) then
h_neglect = GV%m_to_H*1.0e-30 ; h_neglect_edge = GV%m_to_H*1.0e-10
else
h_neglect = GV%kg_m2_to_H*1.0e-30 ; h_neglect_edge = GV%kg_m2_to_H*1.0e-10
Expand Down Expand Up @@ -1455,8 +1470,9 @@ subroutine build_grid_HyCOM1( G, GV, h, tv, h_new, dzInterface, CS )
real :: depth
real :: h_neglect, h_neglect_edge

!### Try replacing both of these with GV%H_subroundoff
if (GV%Boussinesq) then
if (.not.CS%remap_answers_2018) then
h_neglect = GV%H_subroundoff ; h_neglect_edge = GV%H_subroundoff
elseif (GV%Boussinesq) then
h_neglect = GV%m_to_H*1.0e-30 ; h_neglect_edge = GV%m_to_H*1.0e-10
else
h_neglect = GV%kg_m2_to_H*1.0e-30 ; h_neglect_edge = GV%kg_m2_to_H*1.0e-10
Expand Down Expand Up @@ -1588,8 +1604,9 @@ subroutine build_grid_SLight(G, GV, h, tv, dzInterface, CS)
integer :: i, j, k, nz
real :: h_neglect, h_neglect_edge

!### Try replacing both of these with GV%H_subroundoff
if (GV%Boussinesq) then
if (.not.CS%remap_answers_2018) then
h_neglect = GV%H_subroundoff ; h_neglect_edge = GV%H_subroundoff
elseif (GV%Boussinesq) then
h_neglect = GV%m_to_H*1.0e-30 ; h_neglect_edge = GV%m_to_H*1.0e-10
else
h_neglect = GV%kg_m2_to_H*1.0e-30 ; h_neglect_edge = GV%kg_m2_to_H*1.0e-10
Expand Down Expand Up @@ -2213,7 +2230,7 @@ subroutine set_regrid_params( CS, boundary_extrapolation, min_thickness, old_gri
interp_scheme, depth_of_time_filter_shallow, depth_of_time_filter_deep, &
compress_fraction, dz_min_surface, nz_fixed_surface, Rho_ML_avg_depth, &
nlay_ML_to_interior, fix_haloclines, halocline_filt_len, &
halocline_strat_tol, integrate_downward_for_e, &
halocline_strat_tol, integrate_downward_for_e, remap_answers_2018, &
adaptTimeRatio, adaptZoom, adaptZoomCoeff, adaptBuoyCoeff, adaptAlpha, adaptDoMin)
type(regridding_CS), intent(inout) :: CS !< Regridding control structure
logical, optional, intent(in) :: boundary_extrapolation !< Extrapolate in boundary cells
Expand All @@ -2238,6 +2255,9 @@ subroutine set_regrid_params( CS, boundary_extrapolation, min_thickness, old_gri
!! halocline region.
logical, optional, intent(in) :: integrate_downward_for_e !< If true, integrate for interface positions downward
!! from the top.
logical, optional, intent(in) :: remap_answers_2018 !< If true, use the order of arithmetic and expressions
!! that recover the remapping answers from 2018. Otherwise
!! use more robust but mathematically equivalent expressions.
real, optional, intent(in) :: adaptTimeRatio !< Ratio of the ALE timestep to the grid timescale [nondim].
real, optional, intent(in) :: adaptZoom !< Depth of near-surface zooming region [H ~> m or kg m-2].
real, optional, intent(in) :: adaptZoomCoeff !< Coefficient of near-surface zooming diffusivity [nondim].
Expand Down Expand Up @@ -2265,6 +2285,7 @@ subroutine set_regrid_params( CS, boundary_extrapolation, min_thickness, old_gri
if (present(min_thickness)) CS%min_thickness = min_thickness
if (present(compress_fraction)) CS%compressibility_fraction = compress_fraction
if (present(integrate_downward_for_e)) CS%integrate_downward_for_e = integrate_downward_for_e
if (present(remap_answers_2018)) CS%remap_answers_2018 = remap_answers_2018

select case (CS%regridding_scheme)
case (REGRIDDING_ZSTAR)
Expand Down
24 changes: 13 additions & 11 deletions src/ALE/MOM_remapping.F90
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ function isPosSumErrSignificant(n1, sum1, n2, sum2)
end function isPosSumErrSignificant

!> Remaps column of values u0 on grid h0 to grid h1 assuming the top edge is aligned.
subroutine remapping_core_h(CS, n0, h0, u0, n1, h1, u1, h_neglect, h_neglect_edge)
subroutine remapping_core_h(CS, n0, h0, u0, n1, h1, u1, h_neglect, h_neglect_edge)
type(remapping_CS), intent(in) :: CS !< Remapping control structure
integer, intent(in) :: n0 !< Number of cells on source grid
real, dimension(n0), intent(in) :: h0 !< Cell widths on source grid
Expand Down Expand Up @@ -399,22 +399,23 @@ subroutine build_reconstructions_1d( CS, n0, h0, u0, ppoly_r_coefs, &
iMethod = INTEGRATION_PLM
case ( REMAPPING_PPM_H4 )
call edge_values_explicit_h4( n0, h0, u0, ppoly_r_E, h_neglect_edge, answers_2018=CS%answers_2018 )
call PPM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_coefs, h_neglect )
call PPM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_coefs, h_neglect, answers_2018=CS%answers_2018 )
if ( CS%boundary_extrapolation ) then
call PPM_boundary_extrapolation( n0, h0, u0, ppoly_r_E, ppoly_r_coefs, h_neglect )
endif
iMethod = INTEGRATION_PPM
case ( REMAPPING_PPM_IH4 )
call edge_values_implicit_h4( n0, h0, u0, ppoly_r_E, h_neglect_edge, answers_2018=CS%answers_2018 )
call PPM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_coefs, h_neglect )
call PPM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_coefs, h_neglect, answers_2018=CS%answers_2018 )
if ( CS%boundary_extrapolation ) then
call PPM_boundary_extrapolation( n0, h0, u0, ppoly_r_E, ppoly_r_coefs, h_neglect )
endif
iMethod = INTEGRATION_PPM
case ( REMAPPING_PQM_IH4IH3 )
call edge_values_implicit_h4( n0, h0, u0, ppoly_r_E, h_neglect_edge, answers_2018=CS%answers_2018 )
call edge_slopes_implicit_h3( n0, h0, u0, ppoly_r_S, h_neglect, answers_2018=CS%answers_2018 )
call PQM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_S, ppoly_r_coefs, h_neglect )
call PQM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_S, ppoly_r_coefs, h_neglect, &
answers_2018=CS%answers_2018 )
if ( CS%boundary_extrapolation ) then
call PQM_boundary_extrapolation_v1( n0, h0, u0, ppoly_r_E, ppoly_r_S, &
ppoly_r_coefs, h_neglect )
Expand All @@ -423,7 +424,8 @@ subroutine build_reconstructions_1d( CS, n0, h0, u0, ppoly_r_coefs, &
case ( REMAPPING_PQM_IH6IH5 )
call edge_values_implicit_h6( n0, h0, u0, ppoly_r_E, h_neglect_edge, answers_2018=CS%answers_2018 )
call edge_slopes_implicit_h5( n0, h0, u0, ppoly_r_S, h_neglect, answers_2018=CS%answers_2018 )
call PQM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_S, ppoly_r_coefs, h_neglect )
call PQM_reconstruction( n0, h0, u0, ppoly_r_E, ppoly_r_S, ppoly_r_coefs, h_neglect, &
answers_2018=CS%answers_2018 )
if ( CS%boundary_extrapolation ) then
call PQM_boundary_extrapolation_v1( n0, h0, u0, ppoly_r_E, ppoly_r_S, &
ppoly_r_coefs, h_neglect )
Expand Down Expand Up @@ -1628,9 +1630,9 @@ logical function remapping_unit_tests(verbose)
logical :: thisTest, v

v = verbose
answers_2018 = .false. ! .true.
h_neglect = hNeglect_dflt
h_neglect_edge = 1.0e-10
answers_2018 = .true.
h_neglect_edge = hNeglect_dflt ; if (answers_2018) h_neglect_edge = 1.0e-10

write(*,*) '==== MOM_remapping: remapping_unit_tests ================='
remapping_unit_tests = .false. ! Normally return false
Expand Down Expand Up @@ -1677,7 +1679,7 @@ logical function remapping_unit_tests(verbose)
ppoly0_coefs(:,:) = 0.0

call edge_values_explicit_h4( n0, h0, u0, ppoly0_E, h_neglect=1e-10, answers_2018=answers_2018 )
call PPM_reconstruction( n0, h0, u0, ppoly0_E, ppoly0_coefs, h_neglect )
call PPM_reconstruction( n0, h0, u0, ppoly0_E, ppoly0_coefs, h_neglect, answers_2018=answers_2018 )
call PPM_boundary_extrapolation( n0, h0, u0, ppoly0_E, ppoly0_coefs, h_neglect )
u1(:) = 0.
call remapByProjection( n0, h0, u0, ppoly0_E, ppoly0_coefs, &
Expand Down Expand Up @@ -1814,7 +1816,7 @@ logical function remapping_unit_tests(verbose)
ppoly0_E(:,1) = (/0.,2.,4.,6.,8./)
ppoly0_E(:,2) = (/2.,4.,6.,8.,10./)
call PPM_reconstruction(5, (/1.,1.,1.,1.,1./), (/1.,3.,5.,7.,9./), ppoly0_E(1:5,:), &
ppoly0_coefs(1:5,:), h_neglect )
ppoly0_coefs(1:5,:), h_neglect, answers_2018=answers_2018 )
remapping_unit_tests = remapping_unit_tests .or. &
test_answer(v, 5, ppoly0_coefs(:,1), (/1.,2.,4.,6.,9./), 'Line PPM: P0')
remapping_unit_tests = remapping_unit_tests .or. &
Expand All @@ -1830,7 +1832,7 @@ logical function remapping_unit_tests(verbose)
ppoly0_E(:,1) = (/0.,0.,3.,12.,27./)
ppoly0_E(:,2) = (/0.,3.,12.,27.,48./)
call PPM_reconstruction(5, (/1.,1.,1.,1.,1./), (/0.,1.,7.,19.,37./), ppoly0_E(1:5,:), &
ppoly0_coefs(1:5,:), h_neglect )
ppoly0_coefs(1:5,:), h_neglect, answers_2018=answers_2018 )
remapping_unit_tests = remapping_unit_tests .or. &
test_answer(v, 5, ppoly0_E(:,1), (/0.,0.,3.,12.,37./), 'Parabola PPM: left edges')
remapping_unit_tests = remapping_unit_tests .or. &
Expand All @@ -1845,7 +1847,7 @@ logical function remapping_unit_tests(verbose)
ppoly0_E(:,1) = (/0.,0.,6.,10.,15./)
ppoly0_E(:,2) = (/0.,6.,12.,17.,15./)
call PPM_reconstruction(5, (/1.,1.,1.,1.,1./), (/0.,5.,7.,16.,15./), ppoly0_E(1:5,:), &
ppoly0_coefs(1:5,:), h_neglect )
ppoly0_coefs(1:5,:), h_neglect, answers_2018=answers_2018 )
remapping_unit_tests = remapping_unit_tests .or. &
test_answer(v, 5, ppoly0_E(:,1), (/0.,3.,6.,16.,15./), 'Limits PPM: left edges')
remapping_unit_tests = remapping_unit_tests .or. &
Expand Down
Loading

0 comments on commit 7dbca83

Please sign in to comment.