Skip to content
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

GFDL to main candidate branch (2022-04-04) #1563

Closed

Commits on Feb 15, 2022

  1. +Add MOM_check_scaling.F90 and MOM_scaling_check.F90

      Added two new modules, the MOM6-specific MOM_check_scaling.F90 and the generic
    framework module MOM_scaling_check.F90, to assess the uniqueness of the unit
    scaling factors for all of the variables used by MOM6.  If there are overlaps in
    scaling factors for different units, this also identifies and suggests alternate
    scaling factors with less overlaps.  This commit includes the introduction of
    the new publicly visible routines check_scaling_factors(), scales_to_powers()
    and check_MOM6_scaling_factors.  This new capability does not do anything for
    sufficiently low levels of model verbosity, and it is silent if the scaling
    factors are unique, or if less than 2 dimensions are being rescaled.  All
    answers and output files are bitwise identical, but there can be additional
    messages to stdout.
    Hallberg-NOAA authored and marshallward committed Feb 15, 2022
    Configuration menu
    Copy the full SHA
    56401b6 View commit details
    Browse the repository at this point in the history
  2. +Move MOM_scaling_check.F90 to MOM_unique_scales.F90

      Renamed the framework module MOM_scaling_check.F90 to MOM_unique_scales.F90 to
    help differentiate it from MOM_check_scaling.F90, and renamed the subroutine
    check_scaling_factors() as check_scaling_uniqueness().  Also added
    _Dimensional_consistency.dox to describe the dimensional consistency testing.
    This commit should address the issues raised in the review of MOM6 PR #49.  All
    answers and output are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Feb 15, 2022
    Configuration menu
    Copy the full SHA
    75bf521 View commit details
    Browse the repository at this point in the history

Commits on Feb 16, 2022

  1. (*)Correct memory declarations in MOM_regridding

      Corrected memory declarations in MOM_regridding.F90 in cases where the
    vertical size of the input and output grids are not the same.  Although this is
    not know to have caused any particular problems, these inconsistencies could
    lead to segmentation faults in cases where the target grid (e.g., diagnostic
    output) is larger than the input grid (e.g., the model's native grid).  In some
    cases, certain grid generation options were only written to work with the same
    size of input and output grids, and error handling has been added to these cases
    to gracefully bring down the model if they are used with different grid sizes.
    All answers are bitwise identical in the MOM6-examples test suite, but it is
    conceivable that this could correct subtle (memory-related) issues in some
    configurations.
    Hallberg-NOAA authored and marshallward committed Feb 16, 2022
    Configuration menu
    Copy the full SHA
    fc5253f View commit details
    Browse the repository at this point in the history

Commits on Feb 17, 2022

  1. Add optional argument to FMS2 version of get_field_size

     - default behavior returns field size using fms1 format.
    MJHarrison-GFDL authored and marshallward committed Feb 17, 2022
    Configuration menu
    Copy the full SHA
    c166358 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    e841609 View commit details
    Browse the repository at this point in the history

Commits on Feb 18, 2022

  1. Configuration menu
    Copy the full SHA
    5f56798 View commit details
    Browse the repository at this point in the history

Commits on Feb 20, 2022

  1. Fixes issues with the GME code and get_param calls for Leith options (#…

    …65)
    
    * Eliminate GET_ALL_PARAMS in hor_visc_init
    
      Added do_not_log arguments to get_param calls in MOM_hor_visc.F90 that are
    only used conditionally, and eliminated the unlogged GET_ALL_PARAMS runtime
    parameter and get_all variable in hor_visc_init().  By design, all logging of
    parameters after this commit is identical to before, even for variables that are
    inactive and therefore should not be logged.  In several places, there were some
    problems, mostly with the GME code, that have been noted in comments marked with
    '###'.  Also cleaned up the code alignment and eliminated unneeded temporary
    variables in a few places in hor_visc().  All solutions are bitwise identical,
    and no output is changed.
    
    * Move call to get get_KH outside k-loop
    
    The call to get the 3-d GME diffusivity arrays and the subsequent
    blocking halo update was moved outside of the k-loop.
    
    * Increase loop range for calculation of GME fluxes
    
    * Makes GME filter rotationally invariant
    
    * Makes the GME filter rotationally invariant
    * Adds a runtime param to allow the user to control how many
    smoothing passes should be done.
    
    * Rearranges the get_param calls related to Leith
    
    The get_param calls for Leith were not in the correct location.
    This commit fixes that.
    
    * Adding halo updates
    
    * Fixes do loops indices and adds diagnostics
    
    * Adds option to save barotropic tension and strain;
    
    * Fixes many i and j loops indices associated with GME to avoid halo
    problems and unnecessary halo updates. With these changes, the
    model is now conserving mass and tracers when USE_GME = True.
    
    * Fixes issues related to the merging with dev/gfdl
    
    * Fixes calculation of FrictWork_GME
    
    The calculation now mimics the calculation of FrictWork and it
    includes the energy diffusion term.
    
    * Removes dependency of FrictWork_GME calculation on MEKE
    
    * Adding sh_xy_sq and sh_xx_sq in the OMP directives
    
    Co-authored-by: Robert Hallberg <[email protected]>
    gustavo-marques and Hallberg-NOAA committed Feb 20, 2022
    Configuration menu
    Copy the full SHA
    32e1ecf View commit details
    Browse the repository at this point in the history
  2. Remove hard-wired parameter in adjustEtaToFitBathymetry (#69)

    Subroutine adjustEtaToFitBathymetry had a hard-wired parameter
    (hTolerance = 0.1) controlling the tolerance when adjusting the
    thickness to fit the bathymetry. This patch adds an user-controlled
    parameter (THICKNESS_TOLERANCE), which replaces hTolerance.
    THICKNESS_TOLERANCE is only activated when ADJUST_THICKNESS=True.
    gustavo-marques committed Feb 20, 2022
    Configuration menu
    Copy the full SHA
    149073f View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    712ff9e View commit details
    Browse the repository at this point in the history

Commits on Feb 21, 2022

  1. Merge pull request #71 from NOAA-GFDL/main_to_dev

    Main to dev
    Hallberg-NOAA committed Feb 21, 2022
    Configuration menu
    Copy the full SHA
    2e72b88 View commit details
    Browse the repository at this point in the history

Commits on Feb 26, 2022

  1. Report mean temperature from MOM_state_stats()

      Actually calculate the mean temperature and salinity reported by
    MOM_state_stats().  Due to an oversight, these means were always being reported
    as 0.  This changes the output when the debugging flag DEBUG_CONSERVATION=True.
    All answers are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Feb 26, 2022
    Configuration menu
    Copy the full SHA
    d46dbc7 View commit details
    Browse the repository at this point in the history
  2. +Add global_mass_int_EFP

      Added the new function global_mass_int_EFP(), which is analogous to
    global_mass_integral but returns its result in extended fixed point (EFP_type)
    format and always uses reproducing sums, to facilitate layout-invariant
    global integrals but with the potential for deferred global reductions so that
    this last step can be combined for various global reductions for efficiency.
    All answers are bitwise identical, but there is a new public interface.
    Hallberg-NOAA authored and marshallward committed Feb 26, 2022
    Configuration menu
    Copy the full SHA
    9c7bf29 View commit details
    Browse the repository at this point in the history
  3. Use global_mass_integral in lateral_bdry_diff

      Use global_mass_integral for the debugging diagnostics of the tracer amounts
    before and after diffusion in lateral_boundary_diffusion, and replaced a call to
    write(*,*) with a call to MOM_mesg to actually write the message.  The
    global_mass_integral uses reproducing sums, and is invariant to layout, while
    MOM_mesg is preferable for output because it will allow us to more cleanly
    control how output is handled and which processors do the writing.  All
    solutions are bitwise identical, although some debugging output will change.
    Hallberg-NOAA authored and marshallward committed Feb 26, 2022
    Configuration menu
    Copy the full SHA
    8197cea View commit details
    Browse the repository at this point in the history
  4. (*)+Reproducing tracer stocks

      Use reproducing sums for tabulating tracer stocks, and move the global sum for
    the tracer stocks form write_energy into call_tracer_stocks.  This involves
    changes to the type of an argument (from real to EFP_type) for two arguments to
    the internal routine store_stocks.  Existing tracer stock packages will still
    work, but to benefit from the reproducing sums, they will also have to change
    their reported values from real to EFP_type.  This is demonstrated for two
    packages (advection_test_tracer and ideal_age_example), where the stocks are now
    found with calls to global_mass_int_EFP(), replacing the previous explicit
    sums.  With this change, the reported stock values from these packages are
    identical for different PE layouts and can be much more accurate than before,
    but they are different from the previously reported values at roundoff (for
    positive-definite tracers), but it could be larger for tracers with a near-zero
    mean value.  All solutions are bitwise identical, but output changes.
    Hallberg-NOAA authored and marshallward committed Feb 26, 2022
    Configuration menu
    Copy the full SHA
    1bf8220 View commit details
    Browse the repository at this point in the history
  5. (*)+Use reproducing stocks for all tracer packages

      Modified the remaining tracer packages to use the reproducing stocks.  The
    reported stock values from these packages will have changed slightly, but they
    now reproduce across PE layouts.  All solutions are bitwise identical, but
    output changes.
    Hallberg-NOAA authored and marshallward committed Feb 26, 2022
    Configuration menu
    Copy the full SHA
    a0d0238 View commit details
    Browse the repository at this point in the history
  6. Removed trailing white space

      Removed trailing white space on two lines.  All answers are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Feb 26, 2022
    Configuration menu
    Copy the full SHA
    a468bee View commit details
    Browse the repository at this point in the history

Commits on Feb 27, 2022

  1. +(*)Add tmp_scale arguments to global_area_mean

      Added new tmp_scale optional arguments to global_area_mean, global_layer_mean,
    global_area_mean_u, global_area_mean_v, global_area_integral, global_volume_mean
    and global_mass_integral.  This argument allows the reproducing sums to work
    with rescaled variables without undoing the scaling of the returned variable.
    Also corrected the area_rescaling in global_area_mean_u and global_area_mean_v,
    which were substantially changing answers when horizontal distances were being
    rescaled (i.e., if L_RESCALE_POWER is not 0).  These routines had only been
    added recently, so this change is only changing answers with HOMOGENIZE_FORCINGS
    = True.
    Hallberg-NOAA committed Feb 27, 2022
    Configuration menu
    Copy the full SHA
    b3e80f7 View commit details
    Browse the repository at this point in the history
  2. +(*)Rescale variables with homogenize_forcing

      Add optional tmp_scale arguments to the various homogenize_field routines and
    use them in numerous calls in homogenize_forcing and homogenize_mech_forcing, so
    that the answers will pass the dimensional rescaling tests for large rescaling
    factors when HOMOGENIZE_FORCINGS = True.  Among other changes is the addition of
    a verticalGrid_type argument to homogenize_forcing.  All answers are bitwise
    identical in the existing MOM6-examples test suite, but it will change answers
    in other cases with dimensional rescaling active and homogenized forcing.
    Hallberg-NOAA committed Feb 27, 2022
    Configuration menu
    Copy the full SHA
    fa2832c View commit details
    Browse the repository at this point in the history

Commits on Feb 28, 2022

  1. (+) Refactor of MOM_file_parser

    This patch includes several minor changes to the MOM_file_parser and
    supporting modules in order to accommodate stronger unit testing.
    
    It includes the following API changes:
    
    - Removal of `static_value` from `get_param`
    
    - Redefined `link_parameter` and `parameter_block` as private
    
    - New functions: `all_across_PEs()`, `any_across_PEs()`
    
    `static_value` was not used in any known experiments (outside of
    internal GFDL testing), and the two derived types describe internal
    operations within `MOM_file_parser`, so we do not expect any disruptions
    from these changes.
    
    A detailed summary of the changes are listed below.
    
    - `assert()` is now used to detect same files with different IO units.
    
      Detection of reopenend files of the same name but different IO unit
      has been changed from `MOM_error(FATAL, ...)` to `assert()`, to
      reflect that this should be a logically impossible result.
    
    - Bugfix: Reopened files are now reported to all PEs.
    
      If an open file is re-opened, then only the root PE will detect this
      and will `return` immediately.  However, the others will proceed into
      `populate_param_data` and will get stuck in a broadcast waiting for
      root.
    
      We fix this by communicating the reopened state to all PEs and allow
      all ranks to return before re-processing the data.
    
      Note that this could also be resolved by allowing all ranks to track
      IO unit numbers, but for now we do not attempt to change this
      behavior.
    
    - `newunit=` used to generate parameter file IO unit
    
      The parameter IO unit is now generated by `newunit=` rather than an
      explicit search for an unused IO unit.  Note that this is a Fortran
      2008 feature.
    
      Testing around available IO units has also been removed.
    
    - Removal of generic IO error handling
    
      Generic "IO error" tests, and corresponding `err=` arguments, have
      been removed in most cases.  We now rely on the Fortran runtime to
      provide diagnostics on these errors, which should typically exceed any
      information that MOM6 could provide.
    
    - Removal of purported `namelist` support
    
      There were several blocks of code provided to support namelist syntax,
      but did not appear to be working, nor was there any known instance of
      it being used by anyone, so it has been removed.
    
    - `#define/undef/=` syntax testing across ranks
    
      Previously, only the root PE would test for consistency of the
      #define-like syntax, even though all ranks have this information.
      This required a second, awkwardly placed syntax test later in the
      subroutine.
    
      This test is redefined to run over all ranks, and the subsequent test
      has been removed.
    
    - `define/override` test reordering
    
      The `found_override` test when coupled to a `#define`-like declaration
      was unreachable due to the presence of an even stronger test related
      to valid syntax.
    
      This test has been moved to provide more detailed information about
      the nature of the error.
    
    - `link_parameter`, `parameter_block` defined as private
    
      Internal derived types of `MOM_file_parser` are redefined as private.
      This preserves the integrity of instances of these types, and also
      prevents creation of implicit object code required to access them
      externally.
    
    - Removal of `static_value` from `get_param` interface
    
      The `static_value` argument of `get_param` has been removed, since it
      is functionally equivalent to `default`.  While this is an API change,
      there is no known case of anyone using this argument.
    
    - The `param_type%doc` fields are now properly deallocated after closed.
    
    - Quotes have been added around some filename error warnings, to help
      detect issues related to whitespace.
    
    - `any_across_PEs` and `all_across_PEs`
    
       New functions for calling `any()` and `all()` across PE ranks have
       been added.  Behavior is in line with other functions, such as
       `min_across_PEs`.
    marshallward committed Feb 28, 2022
    Configuration menu
    Copy the full SHA
    9caa701 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #74 from marshallward/file_parser_refactor

    (+) Refactor of MOM_file_parser
    Hallberg-NOAA committed Feb 28, 2022
    Configuration menu
    Copy the full SHA
    cf193a8 View commit details
    Browse the repository at this point in the history

Commits on Mar 5, 2022

  1. +Add ALE options mimicking Hycom

      Added a number of options to MOM_ALE to mimic options that are found in
    Hycom.  By default, all answers are bitwise identical, but there are several
    new runtime parameters.  The code changes include:
    
     . Added the ability to use a different remapping scheme for velocities than
       for tracers, using the new runtime parameter VELOCITY_REMAPPING_SCHEME
    
     . Added the new runtime option PARTIAL_CELL_VELOCITY_REMAP to use partial cell
       thicknesses for remapping at velocity points, which triggers a call to the
       new internal routine apply_partial_cell_mask.
    
     . Added the new internal routine mask_near_bottom_vel to allow MOM6 to mimic
       Hycom in zeroing out the velocities in thin layers in a bottom boundary
       layer with a thickness given by the new runtime parameter
       REMAP_VEL_MASK_BBL_THICK, while the definition of thin is specified by
       REMAP_VEL_MASK_H_THIN.  Setting these to be negative (as is the default)
       avoids this.
    
     . Modified the interface to remap_all_state_vars to take just the ALE_CS, which
       then provides the remapping control structure that is appropriate for the
       tracers or velocities, rather than also passing this in as an argument.
    
     . Eliminated some unnecessary internal variables, and added others to be
       more explicit avoid array syntax copies in arguments.
    Hallberg-NOAA authored and marshallward committed Mar 5, 2022
    Configuration menu
    Copy the full SHA
    9a01cd5 View commit details
    Browse the repository at this point in the history

Commits on Mar 7, 2022

  1. (*)Avoid negative thicknesses in mixed_layer_restrat

      Enforce a minimum thickness of 0.5*Angstrom in the mixed_layer_restrat
    routines.  The streamfunctions in these routines attempt to limit the
    thicknesses to exceed Angstrom, but they can be less than this due to roundoff.
    The new limit prevents thicknesses from becoming negative when Angstrom is set
    to 0, but should not change any answers for test cases with positive values of
    Angstrom.  Also added some comments describing variables and their units and
    simplified the OMP directives.
    
      Also corrected error messages in MOM_diabatic_aux.F90 to identify the file or
    module where these messages come from, and modified an error message in
    applyTracerBoundaryFluxesInOut so that it is written if the localized fault does
    not happen to occur on the root PE.
    
      All answers in the existing MOM6-examples regression suite are bitwise
    identical.
    Hallberg-NOAA authored and marshallward committed Mar 7, 2022
    Configuration menu
    Copy the full SHA
    4640461 View commit details
    Browse the repository at this point in the history

Commits on Mar 9, 2022

  1. bugfix: static h_new shape remaining_transport_sum

    This patch redefines `h_new` to match the shape of a center-point rather
    than a v-face point.
    
    Dynamic memory builds would have been unaffected by this, and older GCC
    (~7.3.0) compilers appear to have not objected to the shape mismatch,
    but this raised an error in newer GCCs (~9.3.0).
    
    Since this redefines `h_new` from zero-based to 1-based indexing in the
    y-axis, answer changes are very possible.
    marshallward committed Mar 9, 2022
    Configuration menu
    Copy the full SHA
    efa503b View commit details
    Browse the repository at this point in the history

Commits on Mar 10, 2022

  1. Merge pull request #82 from marshallward/offline_static_bugfix

    bugfix: static h_new shape remaining_transport_sum
    Hallberg-NOAA committed Mar 10, 2022
    Configuration menu
    Copy the full SHA
    ab50f0e View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    d7b6f4f View commit details
    Browse the repository at this point in the history

Commits on Mar 12, 2022

  1. +Stop logging NEW_SPONGES

      Stop logging the deprecated run-time parameter NEW_SPONGES, and always log
    INTERPOLATE_SPONGE_TIME_SPACE as if NEW_SPONGES were not used.  This commit will
    address MOM6 issue #46, which can be closed it is accepted.  This will change
    the MOM_parameter_doc entries in some cases, but all answers are bitwise
    identical.
    Hallberg-NOAA committed Mar 12, 2022
    Configuration menu
    Copy the full SHA
    d560169 View commit details
    Browse the repository at this point in the history

Commits on Mar 13, 2022

  1. Fix nolibs build in CI pipeline

    - Enabling pipelines for SIS2 required making the MOM6_SRC macro mandatory.
      It was set in .gitlab-ci.yml for all targets except nolibs build.
    adcroft committed Mar 13, 2022
    Configuration menu
    Copy the full SHA
    3042942 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    92f5a98 View commit details
    Browse the repository at this point in the history
  3. Merge pull request #78 from Hallberg-NOAA/fix_homogenize_forcing

    +(*)Fix dimensional rescaling with HOMOGENIZE_FORCINGS
    adcroft committed Mar 13, 2022
    Configuration menu
    Copy the full SHA
    6e85b23 View commit details
    Browse the repository at this point in the history
  4. +Add Hybgen remapping options

      This commit adds the ability to specify three remapping options derived from
    Hycom's hybgen code.
    
     - Adds the new module MOM_hybgen_remap, which contains the new subroutines
       hybgen_plm_coefs, hybgen_ppm_coefs, and hybgen_weno_coefs
    
     - Adds code to handle PLM_HYBGEN, PPM_HYBGEN and WENO_HYBGEN as valid entries
       for specifying the ALE remapping schemes.  Also added descriptions of units
       to some internal remapping variables.
    
     - Adds the optional argument PCM_cell to regridding_main, remapping_core_h, and
       remap_all_state_vars to specify layers that should use piecewise constant
       remapping, regardless of the overall remapping scheme, to follow the approach
       used in Hycom.  ALE_main uses these new optional arguments, although until
       the Hybgen regridding code is added, they will always be set to false.
    
     - Makes 7 character strings longer in 5 files to accommodate the new
       remapping options.
    
    All answers are bitwise identical, but there are changes to some entries in the
    MOM_parameter_doc files.
    Hallberg-NOAA authored and adcroft committed Mar 13, 2022
    Configuration menu
    Copy the full SHA
    3675c21 View commit details
    Browse the repository at this point in the history

Commits on Mar 14, 2022

  1. Merge pull request #81 from Hallberg-NOAA/add_Hybgen_remapping

    +Add Hybgen remapping options
    adcroft committed Mar 14, 2022
    Configuration menu
    Copy the full SHA
    0f4ebf6 View commit details
    Browse the repository at this point in the history

Commits on Mar 15, 2022

  1. +Add Laplacian diffusion of interface heights

      Added the capability to do Laplacian diffusion of interface heights without
    regard to the density of layers.  This is accomplished by the new internal
    subroutine add_interface_KH, and is controlled by the new runtime parameters
    KH_ETA_CONST and KH_ETA_VEL_SCALE.  The new interface diffusivities are subject
    to CFL bounding when combined with the previous isopycnal slope diffusivities,
    with the two diffusivities reduced proportionately when the CFL limits are
    exceeded.  Also simplified many openMP directives in MOM_thickness_diffuse.F90,
    and fixed a number of spelling errors or other problems in comments, including
    adding units to some variables.  By default, all answers are bitwise identical,
    although there are new runtime parameters a new internal subroutine.
    Hallberg-NOAA authored and marshallward committed Mar 15, 2022
    Configuration menu
    Copy the full SHA
    5a8590b View commit details
    Browse the repository at this point in the history

Commits on Mar 16, 2022

  1. Avoid copying the tracer registry in advect_tracer

      This change avoids an unnecessary copy of the tracer registry in
    advect_tracer().  This should be more efficient, and it should facilitate the
    development of improved tracer budget diagnostic capabilities.  It also adds
    comments describing a few internal variables and their units.  All answers and
    output are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 16, 2022
    Configuration menu
    Copy the full SHA
    14a28f4 View commit details
    Browse the repository at this point in the history
  2. (*)Fix rescaling in RGC_initialize_sponges

      Corrected the dimensional rescaling in RGC_initialize_sponges().  Also added
    comments documenting the units of all the real values in this module.  Only
    dimensional rescaling factors are changed, and the code should now reproduce
    for different values of dimensional rescaling factors.  All answers in the
    MOM6-examples regression suite are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 16, 2022
    Configuration menu
    Copy the full SHA
    a002923 View commit details
    Browse the repository at this point in the history
  3. Corrected the license on RGC_initialization.F90

      Corrected the license on RGC_initialization.F90 to refer to the same
    LICENSE.md file as the rest of the MOM6 code, with the explicit written consent
    of the contributors to this file.  Also changed the local variable "mod" into
    "mdl" in this module to avoid some of the problems we had previously found with
    some compilers from reusing an intrinsic function name for a variable name.  All
    answers are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 16, 2022
    Configuration menu
    Copy the full SHA
    8c6ae0e View commit details
    Browse the repository at this point in the history

Commits on Mar 17, 2022

  1. Configuration menu
    Copy the full SHA
    e308893 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #92 from NOAA-GFDL/main_to_dev

    Update main to dev/gfdl
    marshallward committed Mar 17, 2022
    Configuration menu
    Copy the full SHA
    41b101d View commit details
    Browse the repository at this point in the history
  3. +(*)MOM_hor_visc bug fix and loop size cleanup

      Fixed the bug noted in issue #72 and excessive loop sizes noted in the
    unresolved comments in a recent commit, and cleaned up other aspects of
    MOM_hor_visc, mostly related to the code that is exercised when USE_GME=True.
    
     - Fixed the bug with the wrong arrays being used when ADD_LES_VISCOSITY=True
       that was noted in MOM6 issue #72.
    
     - Corrected some of the overly large loop extents that were noted in unresolved
       comments about MOM6 PR #65.
    
     - Only log USE_KH_BG_2D if a Laplacian viscosity is used.
    
     - Use extra calculations in the halos and marching in to avoid unnecessary halo
       updates in smooth_GME if there multiple smoothing passes.
    
     - Corrected the capitalization of some horizontal indices to follow the MOM6
       convention for indicating the horizontal staggering position.
    
     - Collected the post_data calls for diagnostics with use_GME with the other
       post data calls to collocate some of the potential inter-PE synchronization
       points.
    
     - Fixed the indentation of some expressions that were using less than 4 points
       for some continuation lines.
    
     - Eliminated several unused variables, and fused some loops to allow 2-d
       variables to be replaced with scalars.
    
      With this PR, answers can change when ADD_LES_VISCOSITY=True and there is a
    Smagorinsky or Leith Laplacian viscosity and there is a nonzero background.
    One run-time parameter is no longer logged if LAPLACIAN=false, so there are
    changes to the MOM_parameter_doc files.  All answers in the MOM6-examples test
    suite are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 17, 2022
    Configuration menu
    Copy the full SHA
    ab4d226 View commit details
    Browse the repository at this point in the history
  4. (*)Minor MOM_hor_visc code cleanup

      Minor code cleanup in response to the code review from Gustavo Marques.  In
    particular, this introduces a roundoff-level answer changing code simplification
    for code that is only exercised if USE_GME=True.  In all other cases the answers
    are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 17, 2022
    Configuration menu
    Copy the full SHA
    966d50f View commit details
    Browse the repository at this point in the history

Commits on Mar 21, 2022

  1. +Add unit conversion capability for restarts

      Added optional arguments to framework code to permit the restart files to work
    with dimensionally unscaled variables.  All answers are bitwise identical, but
    there are new optional arguments for multiple public interfaces.
    
     - Added a new conversion factor element, conv, to the field_restart type to
       specify how a field is to be unscaled before writing, and whose reciprocal is
       used to scale restart fields as they are read in.
    
     - Added the new optional argument conversion to each of the
       register_restart_field() and register_restart_pair() routines, which is used
       to specify how each field will be rescaled when it is written to or read from
       a restart file.  The default is the same as setting this to 1.
    
     - Added the new optional argument unscaled to fix_restart_scaling() and
       fix_restart_unit_scaling() to reset the unit conversion factors that will be
       save to the restart files to 1, consistent with writing out fields without
       scaling to the restart files.
    Hallberg-NOAA committed Mar 21, 2022
    Configuration menu
    Copy the full SHA
    11d03b1 View commit details
    Browse the repository at this point in the history
  2. +(*)Write unscaled MOM6 restart files

      Revised the MOM6 code so that the output restart files are always exactly the
    same as they would be if no dimensional rescaling is applied.  The input restart
    files can still have rescaling, so files written by previous versions of the
    code still work exactly as before.  This does change the output, in the sense
    that the restart files are unscaled and some units documents in the restart
    files are corrected, but the solutions themselves are bitwise identical.  Also,
    there are new (non-optional) unit scaling type arguments to several routines.
    The specific changes in this commit include:
    
     - Added conversion factors to all register_restart_field() or
       register_restart_pair() call for variables that are subject to dimensional
       rescaling.
    
     - Revised the calculation of restart rescaling factors to reflect the rescaling
       that now occurs directly in the restore_state() call.
    
     - Added new US arguments to register_restarts_dyn_split_RK2(),
       MEKE_alloc_register_restart(), set_visc_register_restarts()
    
     - Added a new GV argument to mixedlayer_restrat_register_restarts()
    
     - Used the new unscaled argument in calls to fix_restart_scaling() and
       fix_restart_unit_scaling()
    
     - Revised several calls to register_restart_field() to avoid using the variant
       that uses a var_desc type, eliminating the need for some modules to reference
       the vardesc type or the routine var_desc().
    
     - Added or corrected unit descriptions to the comments describing a few
       variables.
    
     - Noted a few probably bugs in comments with ###, but did not fix them.
    Hallberg-NOAA committed Mar 21, 2022
    Configuration menu
    Copy the full SHA
    7c3f31b View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    2993f1b View commit details
    Browse the repository at this point in the history

Commits on Mar 22, 2022

  1. Merge pull request #87 from Hallberg-NOAA/stop_logging_NEW_SPONGES

    +Stop logging NEW_SPONGES
    Hallberg-NOAA committed Mar 22, 2022
    Configuration menu
    Copy the full SHA
    0ff0daa View commit details
    Browse the repository at this point in the history
  2. Ice dynamics (#80)

    * In MOM_ice_shelf_dynamics.F90 changes are  made to calc_shelf_visc() and calc_shelf_driving_stress() to account for an irregular quadrilateral grid. In MOM_ice_shelf_initialize.F90 changes are made to initialize_ice_thickness_from_file() to correct masks at initialization.
    
    * Changed indentation
    
    * Changes are made to 'calc_shelf_visc()` to make computations of the velocity derivatives rotation-invariant. Changes in `update_ice_shelf()` utilize G%IareaT(:,:) instead of 1/G%areaT(:,:).
    
    * Allocate shelf_sfc_mass_flux for dynamic ice shelf configurations
    
    * Conditional allocation of ice shelf fluxes and data override call for sfc mass flux
    
    * get rid of excessive line length
    
    * call data override init for ice shelves
    
    * A new subroutine change_thickness_using_precip() changes the ice thickness in response to the atmospheric mass flux
    
    * Conditional calls to data_override
    
      - Introduces a new flag: DATA_OVERRIDE_SHELF_FLUXES, which
        if set to True, and ACTIVE_SHELF_DYNAMICS is also True, will
        enable data_override capability for the surface mass deposition
        (only avaialble for MOSAIC grid types)
    
    * Changes are made to extrapolate_metric() in MOM_grid_initialize.F90 to avoid negative values at the southern boundary of the domain. This is done for grids extending over Antarctica.
    
    * Reversed changes in MOM_grid_initialize.F90 to debug a regression test.
    
    * Uncommented lines reading the ice velocity from file
    
    * Changes to scaling factors and conversions of the 'sfc_mass_flux' parameter
    
    * Remove unnecessary diagnostics for ice shelves from MOM_forcing_type
    
    * Correct rescaling for data override of ice shelf sfc mass fluxes
    
    * Add diagnostic rescaling for ice shelf mass fluxes
    
    * Uncommented assignement of 'area_shelf_h(i,j)=G%areaT(i,j)' in MOM_ice_shelf_initialize.F90 and modified the four halo updates in MOM_ice_shelf.F90.
    
    Co-authored-by: Matthew Harrison <[email protected]>
    OlgaSergienko and MJHarrison-GFDL committed Mar 22, 2022
    Configuration menu
    Copy the full SHA
    115d714 View commit details
    Browse the repository at this point in the history
  3. add missing shared variable

    raphaeldussin authored and marshallward committed Mar 22, 2022
    Configuration menu
    Copy the full SHA
    ce22d7a View commit details
    Browse the repository at this point in the history

Commits on Mar 23, 2022

  1. reworked algebra corner spread, rotation parenthesis (#90)

    * reworked algebra corner spread, rotation parenthesis
    
    * replace .lt. by <
    
    Co-authored-by: Raphael Dussin <[email protected]>
    raphaeldussin and Raphael Dussin committed Mar 23, 2022
    Configuration menu
    Copy the full SHA
    8bf9abb View commit details
    Browse the repository at this point in the history

Commits on Mar 28, 2022

  1. +Better multi-line parameter specification handling

      Added the ability to detect and handle multiline parameter specifications that
    are longer than INPUT_STR_LENGTH after the lines have been concatenated.  Many
    instances where character strings are set to length INPUT_STR_LENGTH are
    replaced by param_file_type%max_line_len.  This commit partially addresses MOM6
    issue #75.  All answers and output are bitwise identical in cases that worked
    previously, but there is a new element in the publicly visible param_file_type,
    and some cases where there had previously been errors due to very long input
    specification may now work.
    Hallberg-NOAA authored and marshallward committed Mar 28, 2022
    Configuration menu
    Copy the full SHA
    97331e7 View commit details
    Browse the repository at this point in the history
  2. Support arbitrarily long parameter spec lines

      Make the lines of the param_file_type individually allocatable to support
    arbitrarily long input lines.  This required the introduction of a new private
    type to hold the actual allocatable array, so the lines are now an array of this
    type.  All answers are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 28, 2022
    Configuration menu
    Copy the full SHA
    3b5d264 View commit details
    Browse the repository at this point in the history
  3. Reduce the populate_param_data memory footprint

      Use a character buffer to minimize the memory footprint associated with
    reading the input parameters on root_PE and broadcasting it to all PEs.  All
    answers are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 28, 2022
    Configuration menu
    Copy the full SHA
    4e94c5d View commit details
    Browse the repository at this point in the history
  4. Set INPUT_STR_LENGTH to 1024

      Now that INPUT_STR_LENGTH is only used as the size of a single temporary
    character string, the maximum permitted line length can be increased to a larger
    value without unduly impacting the memory footprint of the model, so it has been
    increased to 1024.  If this is not large enough, considering that MOM6 also
    supports line continuation, there is a bigger problem than this limit.  Some
    message strings were also changed to be allocatable, while others have sizes
    that are set using param_file_type%max_line_len.  Also eliminated the hard-coded
    internal parameter all_PEs_read, which had a note that it should have been
    eliminated in about 2010 (before MOM6 existed).  All answers and output are
    bitwise identical.
    Hallberg-NOAA authored and marshallward committed Mar 28, 2022
    Configuration menu
    Copy the full SHA
    2ac64b3 View commit details
    Browse the repository at this point in the history
  5. Error handler support

    This patch introduces some limited support for error handling in a POSIX
    environment.  A partial interface to the POSIX system calls is included
    as part of the implementation of this feature.
    
    An internal global logical flag, `ignore_fatal` is added to the
    `MOM_error_handler` module which controls the behavior of `FATAL`
    errors.  If true, then `FATAL` errors trigger a signal (here `SIGUSR1`)
    which call a handler which restores the program to the earlier state.
    
    This change allows us to test `FATAL` errors at runtime without stopping
    program execution, so that we can cycle through multiple errors.
    
    This feature is toggled with two new functions, `disable_fatal_errors()`
    and `enable_fatal_errors()`.
    
    This is implemented in part using POSIX system calls from the C standard
    library (libc), using the C interoperability layer.  Details which are
    unspecified by the POSIX standard, such as the definitions of signals or
    the datatype size, are defined in a header (`posix.h`) which can be
    optionally configured at compile-time.
    
    The header defaults to use typical Linux POSIX values, and may be
    configured by autoconf for more exotic platforms in a later patch.
    
    The previous state is set and restored by the `setjmp`/`longjmp` (or
    `sigsetjmp`/`siglongjmp`) functions.  Although these functions behave as
    expected on all tested platforms, a code which uses these functions is
    not standards-conforming.  If issues arise in the future, error handling
    may not be available on those platforms, and compile-time configuration
    may be required to disable these features.
    
    No existing code is using these features, but are expected to be part of
    a future patch.
    
    Error handler API:
    * `disable_fatal_errors`
    * `enable_fatal_errors`
    
    New POSIX API:
    * `chmod`
    * `signal`
    * `kill`
    * `getpid`
    * `getppid`
    * `sleep`
    * `setjmp`
    * `sigsetjmp`
    * `longjmp`
    * `siglongjmp`
    
    New derived types:
    * `jmp_buf`
    * `sigjmp_buf`
    
    New interface (for signal handlers):
    * `handler_interface`
    
    New compile-time macros:
    * `JMP_BUF_SIZE`
    * `SIGJMP_BUF_SIZE`
    * `SIGSETJMP_NAME`
    * `POSIX_SIGUSR1`
    marshallward authored and adcroft committed Mar 28, 2022
    Configuration menu
    Copy the full SHA
    4c5e98e View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    fa55d54 View commit details
    Browse the repository at this point in the history

Commits on Mar 30, 2022

  1. Merge pull request #94 from Hallberg-NOAA/unscale_restarts

    MOM6: +(*)Write unscaled restart files.
    marshallward committed Mar 30, 2022
    Configuration menu
    Copy the full SHA
    eae86d6 View commit details
    Browse the repository at this point in the history

Commits on Mar 31, 2022

  1. add residual loss term for internal tides (#95)

    Co-authored-by: Raphael Dussin <[email protected]>
    Co-authored-by: Marshall Ward <[email protected]>
    3 people committed Mar 31, 2022
    Configuration menu
    Copy the full SHA
    08582ee View commit details
    Browse the repository at this point in the history

Commits on Apr 1, 2022

  1. +Refactor writing the vertical_coordinate file

      Rearrange how the vertical_coordinate file is written, to avoid an unnecessary
    repetition of the writing of this file, and to prepare for the Hybgen grid
    generator code to write its own version of this file.  The specific changes
    include:
    
     - Added the new subroutine write_regrid_file() to write the vertical_coordinate
       file when in ALE mode.
    
     - Relocated the code to write the vertical_coordinate file in ALE mode
       from ALE_writeCoordinateFile to write_regrid_file()
    
     - Moved the call to write_vertgrid_file() into initialize_MOM(), and do not
       call it when USE_REGRIDDING=True, since in this case this file will be
       rewritten again when write_regrid_file() is called.
    
     - Eliminated the write_geom and output_dir arguments to MOM_initialize_coord()
    
    All answers and output are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Apr 1, 2022
    Configuration menu
    Copy the full SHA
    356671c View commit details
    Browse the repository at this point in the history

Commits on Apr 2, 2022

  1. +Add optional conversion argument to register_diag_scalar

      Add the optional conversion argument to register_diag_scalar, which works
    analogously to the argument that is already available in register_diag_field.
    All answers are bitwise identical, but there is a new optional argument in a
    public type.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    9c4363e View commit details
    Browse the repository at this point in the history
  2. Convert global_area_mean diagnostics when writing

      Use conversion argument during registration and tmp_scale argument in the
    calls to global_area_mean for averaged fields in the MOM_forcing_type and
    MOM_diagnostics modules.  Also added or corrected some descriptive comments and
    fixed an extra unit conversion factor in one recently added calculation of ustar
    that was likely not used.  All answers are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    a6992a9 View commit details
    Browse the repository at this point in the history
  3. Simplify diagnostics using global_area_integral

      Use the tmp_scale argument in calls to global_area_integral to simplify some
    global integrals, and added dimensional rescaling for the time_step element of
    the ice_shelf control structure.  Also corrected some dimensional descriptions
    in comments.  All answers are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    39206d9 View commit details
    Browse the repository at this point in the history
  4. Rescale new_depth in apply_topography_edits_from_file

      Rescaled the new_depth variable in apply_topography_edits_from_file, and used
    source arguments to initialize 6 allocated variables.  All answers are bitwise
    identical.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    305f744 View commit details
    Browse the repository at this point in the history
  5. MOM_internal_tides diagnostic code simplification

      Replaced a call to global_area_mean with a call to global_area_integral in a
    diagnostic calculation in the internal_tides module.  Also added descriptions of
    the dimensions of a number of variables in this module, or eliminated the
    dimension description of several integers (for which units make no sense).  Only
    an unused debugging diagnostic is changed, and all solutions are bitwise
    identical.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    c626cc4 View commit details
    Browse the repository at this point in the history
  6. +Avoid nonsensical units descriptions

      Eliminated units arguments for logical, integer, or character string get_param
    calls where the units make no sense.  In some other cases, calls were slightly
    revised to place the units and scale arguments on the same line for easier
    detection of inconsistent settings.  All answers are bitwise identical, but
    the MOM_parameter_doc.all files for some test cases are corrected.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    6bfd073 View commit details
    Browse the repository at this point in the history
  7. Minor get_param call reformatting

      Revised get_param calls to put the units and scale arguments on the same line,
    to help detect inconsistent settings.  All answers and output are bitwise
    identical.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    063ef75 View commit details
    Browse the repository at this point in the history
  8. MOM_neutral_diffusion code cleanup

      Eliminated a commented-out get_param call and use a source argument to
    initialize some arrays.  All answers and output are bitwise identical.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    db59e14 View commit details
    Browse the repository at this point in the history
  9. +Corrected units in dumbbell get_param calls

      Corrected the units in some get_param calls in the dumbbell test case.  All
    answers are bitwise identical, but there will be minor changes in the
    MOM_parameter_doc files for the dumbbell test case.
    Hallberg-NOAA authored and marshallward committed Apr 2, 2022
    Configuration menu
    Copy the full SHA
    edd3f9c View commit details
    Browse the repository at this point in the history

Commits on Apr 4, 2022

  1. Add missing h_neglect (#98)

    Co-authored-by: Robert Hallberg <[email protected]>
    NoraLoose and Hallberg-NOAA committed Apr 4, 2022
    Configuration menu
    Copy the full SHA
    78c574b View commit details
    Browse the repository at this point in the history