Skip to content

Internal field index rotation#1088

Merged
Hallberg-NOAA merged 2 commits into
mom-ocean:dev/gfdlfrom
marshallward:index_rotation
Apr 15, 2020
Merged

Internal field index rotation#1088
Hallberg-NOAA merged 2 commits into
mom-ocean:dev/gfdlfrom
marshallward:index_rotation

Conversation

@marshallward
Copy link
Copy Markdown
Collaborator

This patch introduces an index rotation feature applied to all internal
fields. When this feature is enabled, model fields are initialized on
the index map as specified by the configuration or input files. The
values of these arrays are then moved to a rotated index map and saved
to a new rotated array, which are then used for model simulation.

The primary purpose of this feature is to detect regressions in
rotationally symmetric calculations, such as fluid dynamic dynamic
processes and other transport phenomena.

Fields created or read by the drivers are unrotated and are handled as
external user-defined field. External fields are rotated or unrotated
as they pass between the driver and the ocean model.

In order to maintain bit reproducibility, all field initialization is
computed or assigned on the input grid.

This patch also includes an extension of the test suite, which applies a
single quarter-turn to each of the existing tests.

The features of this patch are summarized below.

Two new configuration features are added:

  • ROTATE_INDEX: Boolean flag which enables this feature.
  • INDEX_TURNS: Integer which descibes the number of counterclockwise
    quarter-turns. Default value is 1.

Two new modules and several new functions are added:

  • MOM_array_transform: Fundamental operations for rotating arrays,
    vectors, rotationally equivalent pairs

  • MOM_transform_FMS: Wrappers to FMS operations which can only operate
    on the unrotated index pax.

  • Numerous rotation functions have been introduced in various modules
    associated with initialization (forcing, OBC, etc), which are
    documented in the source code.

The following new features have been added to existing components:

  • paired checksums (uvchksum, hchksum_pair) now include a scalar_pair
    argument to distinguish between rotationally equivalent scalars (e.g.
    grid areas on u- and v-points) and vector components.

  • register_restart_pair was introduced to register rotationally
    associated pairs.

  • turns has been added to the horizontal index (HI) type, as a means
    to track the number of quarter turns in lower level operations.

  • allocate_forcing_type and allocate_mech_forcing have been extended
    to permit allocation based on an exisiting (unrotated) reference,
    alongside the older interface using control flags for each field type.

  • copy_MOM_domain includes a turns argument, to support rotational
    changes to the FMS domain.

Reproducibility:

  • All results should be bitwise reproducible. A nonphysical exception
    exception is the calculation of CFL conditions in systems with zero
    velocity, such as the unit test case. The previous implementation
    could produce a "negative zero" CFL, whose sign would depend on the
    number of rotations.

    The new implementation eliminates these negative zeros, but may also
    change existing CFL calculations, and may report a regression in
    ocean.stats.

  • Rotated diagnostic checksum output is not tested, since there is not
    yet a way to associated rotationally equivalent diagnostics. See
    below for more information.

Current limitations:

  • Only single PE runs can be rotated.

    Currently FMS assumes a specific ordering for assignment of PE IDs
    (east->west, south->north). An index rotation will typically
    re-orient these domains in a way which breaks this default
    assignment. This ID is used to manage MPI message passing
    targets, so any rearrangement of these IDs will cause errors.

    Since we currently cannot control the PE ID assigned by FMS, we are
    currently unable to support index rotation of parallel runs.

  • Certain fields and tracers cannot be rotated.

    There are a small subset of tracers and fields in various
    structures, such as boundary fluxes, which are currently
    unsupported. This is primarily beacuse these tracers are typically
    managed at the driver level.

    There is no reason why these fields cannot be supported, but it
    would require a larger test suite to detect and handle such fields.

  • Diagnostic output is not rotated.

    Diagnostics are computed on the rotated grid, but it would require
    additional FMS wrappers to support registering and writing
    diagnostics on the input index map. This is not yet implemented,
    so all diagnostics are on the rotated index map.

    One additional consequence is that there is no way to register pairs
    of diagnostics, and thus no way to automate the chksum.diag output.
    Currently, diagnostic checksums are disabled in the test suite.

    We hope to resolve this issue in a future patch.

  • Open boundary condition (OBC) rotation is restriced to INDEX_TURNS=1

    Generalized OBC rotation is currently not supported. This is
    primarily due to the sensitivity of segment configuration, which is
    specified with a large number of flags denoting its orientation.

    It is possible to support generalized rotation, but it will require
    a refactor of the OBC segment code.

    We hope to support generalized rotation in a future patch.

  • Incorrect definitions of gridLonT and gridLatT

    Due to certain array length assumptions for 1d axes, we rotate and
    exchange the values of gridLatT and gridLonT during quarter-turn
    operations.

    This is not correct, since these arrays describe latitude and
    longitude, rather than the axes in the first and second dimension.
    However, several other components currently expect the first and
    second reference axis to have matching array lengths, so for now we
    swap these arrays during rotations.

    The 1d arrays are only used for initialization computation (which is
    on the input map) and I/O management, so this error does not affect
    any existing runs. But rotated runs which save these arrays will be
    incorrect.

  • Non-ALE sponge rotation is disabled.

    Only ALE sponge rotation is currently supported.

    It should be possible to extend rotation to include non-ALE sponges
    if needed.

Further comments:

  • Fields are not rotated in-place, since many calculations require that
    both fields exist at any time. While it is unlikely that rotated and
    unrotated fields would persist for an entire run, there is likely to
    be an increase in memory overhead.

  • External fields from the drivers are rotated and unrotated at the
    beginning and end of every timestep, which can create additional
    computational overhead.

    Note that there are control flags, e.g. cycle_start and cycle_end
    which could be used to manage these operations, assuming that the
    driver does not change the fields inbetween coupler steps.

  • This patch fixes what appears to have been an error in the global
    h-point indexes of OBC segments. However, it also seems that these
    indices were unused, so this is unlikely to impact existing runs.

This implementation was proposed by Robert Hallberg and follows an
earlier implementation by Nic Hannah, whose efforts introduced several
changes that implemented the rotational invariance of existing numerical
calculations.

This patch introduces an index rotation feature applied to all internal
fields.  When this feature is enabled, model fields are initialized on
the index map as specified by the configuration or input files.  The
values of these arrays are then moved to a rotated index map and saved
to a new rotated array, which are then used for model simulation.

The primary purpose of this feature is to detect regressions in
rotationally symmetric calculations, such as fluid dynamic dynamic
processes and other transport phenomena.

Fields created or read by the drivers are unrotated and are handled as
external user-defined field.  External fields are rotated or unrotated
as they pass between the driver and the ocean model.

In order to maintain bit reproducibility, all field initialization is
computed or assigned on the input grid.

This patch also includes an extension of the test suite, which applies a
single quarter-turn to each of the existing tests.

The features of this patch are summarized below.

Two new configuration features are added:

- ROTATE_INDEX: Boolean flag which enables this feature.
- INDEX_TURNS: Integer which descibes the number of counterclockwise
    quarter-turns.  Default value is 1.

Two new modules and several new functions are added:

- MOM_array_transform:  Fundamental operations for rotating arrays,
    vectors, rotationally equivalent pairs

- MOM_transform_FMS: Wrappers to FMS operations which can only operate
    on the unrotated index pax.

- Numerous rotation functions have been introduced in various modules
  associated with initialization (forcing, OBC, etc), which are
  documented in the source code.

The following new features have been added to existing components:

- paired checksums (`uvchksum`, `hchksum_pair`) now include a `scalar_pair`
  argument to distinguish between rotationally equivalent scalars (e.g.
  grid areas on u- and v-points) and vector components.

- `register_restart_pair` was introduced to register rotationally
  associated pairs.

- `turns` has been added to the horizontal index (HI) type, as a means
  to track the number of quarter turns in lower level operations.

- `allocate_forcing_type` and `allocate_mech_forcing` have been extended
  to permit allocation based on an exisiting (unrotated) reference,
  alongside the older interface using control flags for each field type.

- copy_MOM_domain includes a `turns` argument, to support rotational
  changes to the FMS domain.

Reproducibility:

- All results should be bitwise reproducible.  A nonphysical exception
  exception is the calculation of CFL conditions in systems with zero
  velocity, such as the unit test case.  The previous implementation
  could produce a "negative zero" CFL, whose sign would depend on the
  number of rotations.

  The new implementation eliminates these negative zeros, but may also
  change existing CFL calculations, and may report a regression in
  `ocean.stats`.

- Rotated diagnostic checksum output is not tested, since there is not
  yet a way to associated rotationally equivalent diagnostics.  See
  below for more information.

Current limitations:

- Only single PE runs can be rotated.

    Currently FMS assumes a specific ordering for assignment of PE IDs
    (east->west, south->north).  An index rotation will typically
    re-orient these domains in a way which breaks this default
    assignment.  This ID is used to manage MPI message passing
    targets, so any rearrangement of these IDs will cause errors.

    Since we currently cannot control the PE ID assigned by FMS, we are
    currently unable to support index rotation of parallel runs.

- Certain fields and tracers cannot be rotated.

    There are a small subset of tracers and fields in various
    structures, such as boundary fluxes, which are currently
    unsupported.  This is primarily beacuse these tracers are typically
    managed at the driver level.

    There is no reason why these fields cannot be supported, but it
    would require a larger test suite to detect and handle such fields.

- Diagnostic output is not rotated.

    Diagnostics are computed on the rotated grid, but it would require
    additional FMS wrappers to support registering and writing
    diagnostics on the input index map.  This is not yet implemented,
    so all diagnostics are on the rotated index map.

    One additional consequence is that there is no way to register pairs
    of diagnostics, and thus no way to automate the chksum.diag output.
    Currently, diagnostic checksums are disabled in the test suite.

    We hope to resolve this issue in a future patch.

- Open boundary condition (OBC) rotation is restriced to INDEX_TURNS=1

    Generalized OBC rotation is currently not supported.  This is
    primarily due to the sensitivity of segment configuration, which is
    specified with a large number of flags denoting its orientation.

    It is possible to support generalized rotation, but it will require
    a refactor of the OBC segment code.

    We hope to support generalized rotation in a future patch.

- Incorrect definitions of gridLonT and gridLatT

    Due to certain array length assumptions for 1d axes, we rotate and
    exchange the values of gridLatT and gridLonT during quarter-turn
    operations.

    This is not correct, since these arrays describe latitude and
    longitude, rather than the axes in the first and second dimension.
    However, several other components currently expect the first and
    second reference axis to have matching array lengths, so for now we
    swap these arrays during rotations.

    The 1d arrays are only used for initialization computation (which is
    on the input map) and I/O management, so this error does not affect
    any existing runs.  But rotated runs which save these arrays will be
    incorrect.

- Non-ALE sponge rotation is disabled.

    Only ALE sponge rotation is currently supported.

    It should be possible to extend rotation to include non-ALE sponges
    if needed.

Further comments:

- Fields are not rotated in-place, since many calculations require that
  both fields exist at any time.  While it is unlikely that rotated and
  unrotated fields would persist for an entire run, there is likely to
  be an increase in memory overhead.

- External fields from the drivers are rotated and unrotated at the
  beginning and end of every timestep, which can create additional
  computational overhead.

  Note that there are control flags, e.g. `cycle_start` and `cycle_end`
  which could be used to manage these operations, assuming that the
  driver does not change the fields inbetween coupler steps.

- This patch fixes what appears to have been an error in the global
  h-point indexes of OBC segments.  However, it also seems that these
  indices were unused, so this is unlikely to impact existing runs.

This implementation was proposed by Robert Hallberg and follows an
earlier implementation by Nic Hannah, whose efforts introduced several
changes that implemented the rotational invariance of existing numerical
calculations.
@codecov-io
Copy link
Copy Markdown

codecov-io commented Apr 14, 2020

Codecov Report

Merging #1088 into dev/gfdl will decrease coverage by 0.44%.
The diff coverage is 29.70%.

Impacted file tree graph

@@             Coverage Diff              @@
##           dev/gfdl    #1088      +/-   ##
============================================
- Coverage     46.26%   45.81%   -0.45%     
============================================
  Files           213      215       +2     
  Lines         67954    69130    +1176     
============================================
+ Hits          31436    31671     +235     
- Misses        36518    37459     +941     
Impacted Files Coverage Δ
src/core/MOM_transcribe_grid.F90 36.32% <0.00%> (-9.09%) ⬇️
src/core/MOM_variables.F90 57.77% <0.00%> (-19.45%) ⬇️
src/diagnostics/MOM_debugging.F90 13.29% <ø> (ø)
src/framework/MOM_array_transform.F90 0.00% <0.00%> (ø)
src/framework/MOM_dyn_horgrid.F90 84.37% <ø> (ø)
src/parameterizations/vertical/MOM_ALE_sponge.F90 26.28% <0.00%> (-4.30%) ⬇️
src/framework/MOM_hor_index.F90 25.39% <2.70%> (-30.16%) ⬇️
src/core/MOM_forcing_type.F90 62.79% <10.40%> (-8.11%) ⬇️
src/core/MOM_open_boundary.F90 31.27% <25.52%> (-1.49%) ⬇️
src/core/MOM.F90 66.33% <39.09%> (-3.41%) ⬇️
... and 22 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 3e9c645...f632ffc. Read the comment docs.

@marshallward
Copy link
Copy Markdown
Collaborator Author

marshallward commented Apr 14, 2020

Gaea regression test: https://gitlab.gfdl.noaa.gov/ogrp/MOM6/pipelines/10178

Regression has passed (excluding parameters).

Comment thread src/framework/MOM_array_transform.F90 Outdated
A = A_in
case(1)
A = transpose(A_in)
A = A(n:1:-1, :)
Copy link
Copy Markdown
Collaborator

@Hallberg-NOAA Hallberg-NOAA Apr 15, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The use of array syntax is generally discouraged in MOM6, as described in the MOM6 style guide (see https://github.com/NOAA-GFDL/MOM6/wiki/Code-style-guide#array-syntax). In this case, there is a certain compactness to this copy as it avoids the need for an explicit temporary array, but I think that it would be preferable to write this line as A(:,:) = A(n:1:-1, :) to make it more explicit that array syntax is being used.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. Adding A(:,:) = A(n:1:-1,:) works better than adding HI to these interfaces and since these operations are over the entire array the syntax works well. It's the partial loop ranges that are indecipherable using array syntax.

Comment thread src/framework/MOM_array_transform.F90 Outdated

select case (modulo(turns, 4))
case(0)
A = A_in
Copy link
Copy Markdown
Collaborator

@Hallberg-NOAA Hallberg-NOAA Apr 15, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be rewritten as A(:,:) = A_in(:,:) to make it more explicit what is going on. Please see the comment a few lines below for an expanded discussion of this point.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, I will overhaul this entire file.

Comment thread src/framework/MOM_transform_FMS.F90 Outdated

qturns = 0
if (present(turns)) &
qturns = turns
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps this would be even more elegant and robust to user silliness if this line were to read qturns = modulo(turns, 4).

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can add it, but I will say that values outside 0-3 are handled by rotate_array and allocate_rotated_array, so it's probably not necessary in this case.

In fact, I think I have too many modulo() calls in the higher level functions, and would ideally only like to handle the modulo at the lowest level.

But happy to add it if you think it will help.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It probably doesn't matter too much either way since this is not performance critical code, but since there is an extra allocate and a set of copies, the modulo is probably a cheaper alternative and it would avoid unnecessarily bloating the memory of the model (which might actually matter). However, if there is already a modulo on the number of turns in the calling code above this, then it does not help. I would defer to your judgement, @marshallward, on the right approach here.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you are right.. I missed that qturns = 4 will do the allocate. Yeah, in that case I will apply the change.

Copy link
Copy Markdown
Collaborator

@Hallberg-NOAA Hallberg-NOAA left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there were an award for the cleanest major pull request with the best documentation, this PR would win it hands-down. This set of changes was masterfully executed and wonderfully explained, and I am happy to approve it.

I have a couple of comments at specific points in the MOM_array_transform.F90 code about the use of array syntax (generally don't use it, but be very explicit that it is being used when there is a compelling reason to use it), and some suggested improvements by replacing turns with modulo(turns, 4). I am happy to approve and merge these changes as is, or after these few minor points have been addressed.

This PR also raises some other topics for discussion after it is merged, including:

  • The use of pointer, intent(inout) which seems like a good idea that should be used more widely if it is legal, especially if pointer, intent(in) is legal.
  • Reconsidering the use of the vardesc type. We had been phasing it out, but with the new paired restart calls it makes a lot of sense to retain it.
  • What is the right balance between code compactness (e.g., the use of ; to group logically connected assigments) versus stylistic alignment (e.g., closing a subroutine argument list with a single line ) aligned with the opening ( ), or whether this is a point where a bit of individual style should be encouraged.

Comment thread src/core/MOM_forcing_type.F90 Outdated

call cpu_clock_begin(handles%id_clock_forcing)

! NOTE: post_data expects data to be on the input index map, so any rotations
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should have said "post_data expect data to be on the rotated index map...

Comment thread src/framework/MOM_array_transform.F90 Outdated

integer :: k

do k = lbound(A_in, 3), ubound(A_in, 3)
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since these dummy arrays are 1-indexed by default, use of lbound and ubound is not adding any value and potentially causing confusion, so I will rewrite this and the other loops as 1-to-n.

Array index assignment in rotation is now explicit (i.e. A(:,:)).

Modulo operators are applied to the turns in the rotated mpp checksums,
in order to prevent redundant allocations of identical arrays.  Explicit
deallocation of the rotated checksum has also been added.

An error in the comments of external forcing diagnostics was also
amended.

Thanks to Robert Hallberg for these suggestions.
@marshallward
Copy link
Copy Markdown
Collaborator Author

I've pushed an updated with your suggested changes, as well as my own described above, thanks @Hallberg-NOAA.

I agree that vardesc still seems to have some value. I personally prefer passing structs of metadata over functions with lots of arguments, but can defer this discussion.

Thanks also for indulging my whitespace indentations. Let's schedule a whitespace battle royale at some point.

@marshallward
Copy link
Copy Markdown
Collaborator Author

marshallward commented Apr 15, 2020

Updated Gaea regression test: https://gitlab.gfdl.noaa.gov/ogrp/MOM6/pipelines/10188

Updated regression has passed.

Copy link
Copy Markdown
Collaborator

@adcroft adcroft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes order of parameters in MOM_parameter_doc files so will handle manually.

Copy link
Copy Markdown
Collaborator

@adcroft adcroft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm holding this up briefly since moving initialization calls around moved some parameter documentation into the wrong module blocks. A small PR (#1090) is incoming that should precede both this and #1089.

No changes needed on this PR.

@Hallberg-NOAA Hallberg-NOAA merged commit e8dba19 into mom-ocean:dev/gfdl Apr 15, 2020
@Hallberg-NOAA
Copy link
Copy Markdown
Collaborator

Hallberg-NOAA commented Apr 15, 2020 via email

@adcroft
Copy link
Copy Markdown
Collaborator

adcroft commented Apr 16, 2020

Indeed, there are now conflicts that I had set things up to handle more smoothly. Misbehave again and I'll remove your push privileges. 😁

FYI, you did not record the MOM6 commits in the MOM6-examples commit message. I'll add them when I next update MOM6-examples.

marshallward referenced this pull request in NOAA-GFDL/MOM6-examples Apr 16, 2020
- NOAA-GFDL/MOM6@6c0e58b7d Merge pull request #1090 from adcroft/rm-gearth-from-obcs
- NOAA-GFDL/MOM6@b4c4f28aa Resolve conflict with NOAA-GFDL/MOM6#1088
- NOAA-GFDL/MOM6@71d1c733e Merge branch 'dev/gfdl' into rm-gearth-from-obcs
- NOAA-GFDL/MOM6@e8dba197b Merge branch 'index_rotation' into dev/gfdl
- NOAA-GFDL/MOM6@c325f9c1b Removes G_EARTH from OBCs
- NOAA-GFDL/MOM6@f632ffc87 Explicit array rotation index; modulo chksum turns
- NOAA-GFDL/MOM6@22215cb0b Internal field index rotation
- NOAA-GFDL/MOM6@3e9c645d1 Merge pull request #1087 from adcroft/vkernal-tests-to-stdout
- NOAA-GFDL/MOM6@3767883f3 Replaced 0,6 with stderr,stdout
- NOAA-GFDL/MOM6@30063376c Write test fails to both stderr and stdout
- NOAA-GFDL/MOM6@978d772be Moved vkernel unit tests to stdout
@nichannah
Copy link
Copy Markdown
Collaborator

Well done Marshall!

@MJHarrison-GFDL
Copy link
Copy Markdown
Contributor

MJHarrison-GFDL commented Apr 17, 2020 via email

marshallward referenced this pull request in NOAA-GFDL/MOM6-examples Apr 21, 2020
…ssure

- NOAA-GFDL/MOM6@c745c5b14 Merge pull request #1089 from Hallberg-NOAA/rescale_pressure
- NOAA-GFDL/MOM6@8cddc685a Merge branch 'dev/gfdl' into rescale_pressure
- NOAA-GFDL/MOM6@59d2537ac Merge pull request #1070 from ashao/remap_v_extensive
- NOAA-GFDL/MOM6@f5eb17194 Eliminated some US args in MOM_neutral_diffusion
- NOAA-GFDL/MOM6@18b21938b Fixed compile time bugs in mom_surface_forcing_mct
- NOAA-GFDL/MOM6@37d30b596 Eliminated the use of GV%mks_g_Earth
- NOAA-GFDL/MOM6@3a817efe9 Fixed a diagnostic halo extent
- NOAA-GFDL/MOM6@e3c434e57 Store return values from EOS_domain
- NOAA-GFDL/MOM6@718c3ab1f Removed US argument to find_depth_of_pressure_in_cell
- NOAA-GFDL/MOM6@9c5239eaf Corrected MOM_EOS dimensional rescaling problem
- NOAA-GFDL/MOM6@f0f894c57 Merge branch 'Adcroft_rescale_pressure' into rescale_pressure
- NOAA-GFDL/MOM6@7282956a8 Merge branch 'rescale_pressure' of git://github.com/adcroft/MOM6 into Adcroft_rescale_pressure
- NOAA-GFDL/MOM6@cdeda16d3 Switched versions of calculate_density in 22 calls
- NOAA-GFDL/MOM6@760dc3960 +Rescaled variables in coord_adapt
- NOAA-GFDL/MOM6@9b53927c1 Rescaled internal MOM_CVMix variables
- NOAA-GFDL/MOM6@371ed85ca Initialize scaling params without EOS_init()
- NOAA-GFDL/MOM6@0caf9ccab Missed a conflict resolution
- NOAA-GFDL/MOM6@353f441f9 Merge branch 'dev/gfdl' of https://github.com/NOAA-GFDL/MOM6 into remap_v_extensive
- NOAA-GFDL/MOM6@abecf021e Merge branch 'Hallberg-NOAA-rescale_pressure' into rescale_pressure
- NOAA-GFDL/MOM6@4f42d7278 Fixed the spelling in an openMP directive
- NOAA-GFDL/MOM6@18d520e3c Remove optional US from most MOM_EOS functions
- NOAA-GFDL/MOM6@acf23a413 Use the 'dom=' interface to calculate_density
- NOAA-GFDL/MOM6@c309289b6 Add doxygen comments for h_begin in diag_ctrl
- NOAA-GFDL/MOM6@415a6bce2 Adds unit conversions to EOS type
- NOAA-GFDL/MOM6@ab9d8e95f +Added dom interface to calculate_density
- NOAA-GFDL/MOM6@620a97c4d Merge branch 'dev/gfdl' into rescale_pressure
- NOAA-GFDL/MOM6@6c0e58b7d Merge pull request #1090 from adcroft/rm-gearth-from-obcs
- NOAA-GFDL/MOM6@b4c4f28aa Resolve conflict with NOAA-GFDL/MOM6#1088
- NOAA-GFDL/MOM6@71d1c733e Merge branch 'dev/gfdl' into rm-gearth-from-obcs
- NOAA-GFDL/MOM6@e8dba197b Merge branch 'index_rotation' into dev/gfdl
- NOAA-GFDL/MOM6@c325f9c1b Removes G_EARTH from OBCs
- NOAA-GFDL/MOM6@f632ffc87 Explicit array rotation index; modulo chksum turns
- NOAA-GFDL/MOM6@a00c3277f (*)Reordered setting calculate_density loop bounds
- NOAA-GFDL/MOM6@77b6b7471 (*)Set loop bounds in calculate_density calls
- NOAA-GFDL/MOM6@87054b464 Added an omitted dOxygen comment
- NOAA-GFDL/MOM6@ae944c212 Merge branch 'dev/gfdl' into rescale_pressure
- NOAA-GFDL/MOM6@da120120c Minor cleanup related to pressure rescaling
- NOAA-GFDL/MOM6@b84b2d35f Rescaled variables in convert_thickness
- NOAA-GFDL/MOM6@4182ad23c +Add optional US arg to calculate_compress
- NOAA-GFDL/MOM6@bb73bb8f3 +(*)Rescaled pressures used to build coordinates
- NOAA-GFDL/MOM6@a01dae523 Corrected 3 openMP declarations
- NOAA-GFDL/MOM6@608d210a6 Rescaled pressures in wave speed calculations
- NOAA-GFDL/MOM6@ad0c70e2a Rescaled three diagnosed densities
- NOAA-GFDL/MOM6@030a63681 Nullify a pointer in neutral diffusion unit tests
- NOAA-GFDL/MOM6@7643bce4e Simpler calculate_density in ISOMIP_initialization
- NOAA-GFDL/MOM6@a7836f0a7 +Rescaled variables in MOM_neutral_diffusion.F90
- NOAA-GFDL/MOM6@b72afce2b +Made arguments to unit_scaling_init optional
- NOAA-GFDL/MOM6@22215cb0b Internal field index rotation
- NOAA-GFDL/MOM6@04fcfd456 +Rescaled args to find_depth_of_pressure_in_cell
- NOAA-GFDL/MOM6@2a951e7b7 Redirected various EOS interfaces to common code
- NOAA-GFDL/MOM6@00db8d5fb Corrected a bug in calculate_spec_vol_derivs_H1_1d
- NOAA-GFDL/MOM6@500c9e313 Rescaled pressures in 17 calculate_density calls
- NOAA-GFDL/MOM6@8df34f4e2 Rescaled internal MOM_diapyc_energy_req variables
- NOAA-GFDL/MOM6@1e8c50166 Corrected pressure units in comments
- NOAA-GFDL/MOM6@6948cb743 +Replaced optional pres_scale args with US args
- NOAA-GFDL/MOM6@fb820c1e7 +Rescaled pressure arguments to multiple routines
- NOAA-GFDL/MOM6@3223eb6bd +Rescaled the units of tv%P_Ref to [R L2 T-2]
- NOAA-GFDL/MOM6@2fc1c2e5a Use new HI_1d forms of calculate_density calls
- NOAA-GFDL/MOM6@ce0905e17 +Add hor_index_type variants of EOS routines
- NOAA-GFDL/MOM6@1252e3b82 Pass rescaled pressures to calculate_TFreeze
- NOAA-GFDL/MOM6@5e1645878 +Add optional pres_scale arg to calculate_TFreeze
- NOAA-GFDL/MOM6@3e9c645d1 Merge pull request #1087 from adcroft/vkernal-tests-to-stdout
- NOAA-GFDL/MOM6@3767883f3 Replaced 0,6 with stderr,stdout
- NOAA-GFDL/MOM6@916be3c56 Rescaled ice_shelf_CS%g_Earth like GV%g_Earth
- NOAA-GFDL/MOM6@30063376c Write test fails to both stderr and stdout
- NOAA-GFDL/MOM6@978d772be Moved vkernel unit tests to stdout
- NOAA-GFDL/MOM6@20ae74d65 Merge branch 'dev/gfdl' into rescale_pressure
- NOAA-GFDL/MOM6@6af725f2b +Rescaled the units of fluxes%p_surf
- NOAA-GFDL/MOM6@fc9dfd071 Merge branch 'ESMG-dev/esmg' into dev/gfdl
- NOAA-GFDL/MOM6@27e7a1f2d Merge branch 'dev/esmg' of https://github.com/ESMG/MOM6 into ESMG-dev/esmg
- NOAA-GFDL/MOM6@7e6443238 Merge branch 'Hallberg-NOAA-fix_iceshelf_problems' into dev/gfdl
- NOAA-GFDL/MOM6@6d7dde480 Use combined scaling factors
- NOAA-GFDL/MOM6@f9b63f304 +Added RL2_T2_to_Pa element to unit_scale_type
- NOAA-GFDL/MOM6@efbbd317b Rescaled pressures in calculate_vertical_integrals
- NOAA-GFDL/MOM6@f29e32a44 Rescaled pressure in calc_isoneutral_slopes
- NOAA-GFDL/MOM6@94f94ede6 Rescaled pressure in find_eta routines
- NOAA-GFDL/MOM6@3b3c34ab9 +Rescaled non-Boussinesq pressure force calcs
- NOAA-GFDL/MOM6@7632abe2d +Add optional SV_scale arg to int_specific_vol_dp
- NOAA-GFDL/MOM6@63c451005 +Rescaled Boussinesq pressure force calculations
- NOAA-GFDL/MOM6@5a56df7d7 +Add optional pres_scale arguments to EOS routines
- NOAA-GFDL/MOM6@f75edd93a Added a ramp option for SSH OBCs.
- NOAA-GFDL/MOM6@43ebd34bb Removed spaces from a blank line
- NOAA-GFDL/MOM6@4693962ce Merge branch 'dev/gfdl' into fix_iceshelf_problems
- NOAA-GFDL/MOM6@5ec169e95 Merge branch 'dev/master' into dev/gfdl
- NOAA-GFDL/MOM6@bcc3f5ed8 Merge branch 'dev/gfdl' into fix_iceshelf_problems
- NOAA-GFDL/MOM6@7cdffb103 (*)Use state%taux_shelf to set state%ustar_shelf
- NOAA-GFDL/MOM6@684681b2b +Ice shelf code cleanup
- NOAA-GFDL/MOM6@010492e2c Merge branch 'gustavo-marques-dev-master-candidate-ncar-2020-03-27' into dev/master
- NOAA-GFDL/MOM6@04d5a83dc (*)Use a blend of ice-shelf and open water fluxes
- NOAA-GFDL/MOM6@fcb1e92a1 +Add optional arg to ice_shelf_min_thickness_calve
- NOAA-GFDL/MOM6@e87c66427 (*)Removed rescaling from mean_melt_flux to vprec
- NOAA-GFDL/MOM6@e88732c3e (*)Do not use Hml>0 as an ice shelf melt filter
- NOAA-GFDL/MOM6@1a8c75aa6 (*+)Set ice shelf latent heat consistently
- NOAA-GFDL/MOM6@880da8024 (*+)Corrected a bug in setting ustar_shelf
- NOAA-GFDL/MOM6@3c3f72167 (*+)Corrected bugs in 3-eqn ice shelf skin salinity
- NOAA-GFDL/MOM6@7121619b2 (*)Use global_area_integral in add_shelf_flux
- NOAA-GFDL/MOM6@63fd8e1e8 +Added optional arg area to global_area_integral
- NOAA-GFDL/MOM6@7fb8f5555 Flipped the sign convention for wT_flux
- NOAA-GFDL/MOM6@e73db3840 Merge branch 'dev-master-candidate-ncar-2020-03-27' of https://github.com/gustavo-marques/MOM6 into gustavo-marques-dev-master-candidate-ncar-2020-03-27
- NOAA-GFDL/MOM6@6ce3dd9b7 Change CDRAG_MEKE to MEKE_CDRAG
- NOAA-GFDL/MOM6@0cddf1f28 Merge pull request #146 from NCAR/fix_tracer_advect_omp
- NOAA-GFDL/MOM6@8025fd4d7 refactor advect_x and advect_y calls
- NOAA-GFDL/MOM6@3768a118d make advect_y thread-safe
- NOAA-GFDL/MOM6@3d05d8537 make T_adx_2d diagnostics thread-safe
- NOAA-GFDL/MOM6@6636e0f43 fix OMP directive variable list
- NOAA-GFDL/MOM6@afe033517 Merge pull request #144 from gustavo-marques/merge_GME_outside_MEKE
- NOAA-GFDL/MOM6@1f308a02f Extend loop indices and add calls to pass_vector
- NOAA-GFDL/MOM6@24782fa85 Move allocation of diagnostic arrays
- NOAA-GFDL/MOM6@9a330fab8 Loop over recreation of diagnostic grid explicitly
- NOAA-GFDL/MOM6@e23f03c81 Fix compilation errors
- NOAA-GFDL/MOM6@3a3a10217 Merge branch 'remap_v_extensive' of github.com:ashao/MOM6 into remap_v_extensive
- NOAA-GFDL/MOM6@1ecade5e0 Updates GME by removing dependency on MEKE
- NOAA-GFDL/MOM6@46ce21ec7 Store h_extensive for both native and remapped coordinates
- NOAA-GFDL/MOM6@c01201978 Merge pull request #143 from gustavo-marques/fix_vhGM_GEOMETRIC
- NOAA-GFDL/MOM6@3477bbe45 Revert "Set target diagnostic grid based on boolean"
- NOAA-GFDL/MOM6@9abcb1036 Set target diagnostic grid based on boolean
- NOAA-GFDL/MOM6@c42982419 Fix a bug in the vmGM field when using GEOMETRIC
- NOAA-GFDL/MOM6@0eb06153a Merge pull request #142 from NCAR/omp_fixes
- NOAA-GFDL/MOM6@f83292592 initialize fluid entrainment arrays
- NOAA-GFDL/MOM6@276c6b4d2 call chksum for drag_vel if its allocated
- NOAA-GFDL/MOM6@447806678 uncomment omp do block in advect_tracer
- NOAA-GFDL/MOM6@75334543b fix omp in calculate_diagnostic_fields
- NOAA-GFDL/MOM6@988f8f2b0 Merge branch 'dev/gfdl' into remap_v_extensive
- NOAA-GFDL/MOM6@ed51bcd66 Modify remapping of vertically extensive diagnostics
- NOAA-GFDL/MOM6@21918b451 comment out OMP directives in KPP_compute_BLD temporarily
- NOAA-GFDL/MOM6@049abb032 fix omp directives in set_viscous_BBL
- NOAA-GFDL/MOM6@67e5481df fix omp directive for melt_potential
- NOAA-GFDL/MOM6@46b1f34a0 correct namespace name for doxygen
- NOAA-GFDL/MOM6@83da0906a Merge pull request #141 from alperaltuntas/fix_gnu_bugs
- NOAA-GFDL/MOM6@ba5a44271 if not allocated, do not assign R_rho
- NOAA-GFDL/MOM6@435a7412c Close param file before it gets opened by ocean_model_init again.
- NOAA-GFDL/MOM6@ab54b961c Merge pull request #140 from alperaltuntas/fix_omp2
- NOAA-GFDL/MOM6@a9c896e65 set CS%MEKE_equilibrium_restoring, to false by default
- NOAA-GFDL/MOM6@3540446d5 fix unitialized logical var in MOM_MEKE
- NOAA-GFDL/MOM6@63cf741f4 fix kpp omp directives
- NOAA-GFDL/MOM6@22f0242e7 Merge branch 'dev/ncar' of https://github.com/NCAR/MOM6 into dev/ncar
- NOAA-GFDL/MOM6@1ed6b9462 Merge pull request #139 from gustavo-marques/update_LBD
- NOAA-GFDL/MOM6@9db5ba14a Improve documentation and unit tests
- NOAA-GFDL/MOM6@0525a4c10 Change flux limiting calculation
- NOAA-GFDL/MOM6@248a87ca4 Fix units description and delete placeholder for the pressure reconstruction
- NOAA-GFDL/MOM6@c8361e799 Add a note saying khtr_avg should be computed once khtr is 3D
- NOAA-GFDL/MOM6@dce59f430 Fix a bug in the LBD method 2
- NOAA-GFDL/MOM6@5c8b32fb1 Fix a bug when checking if hbl > htot
- NOAA-GFDL/MOM6@408bd2f63 Merge branch 'near_surface_fluxes' of github.com:ashao/MOM6 into near_surface_fluxes
- NOAA-GFDL/MOM6@31d2941d0 Fix bug in boundary_k_range if hbl > htot
- NOAA-GFDL/MOM6@4fe019156 Compute tracer tendency due to lateral diffusion
- NOAA-GFDL/MOM6@e2bafc51c fix omp directives in MOM_thickness_diffuse
- NOAA-GFDL/MOM6@1ae069b37 Merge branch 'dev/ncar' into near_surface_fluxes
- NOAA-GFDL/MOM6@44d36c4a2 Merge pull request #138 from gustavo-marques/fix_ocean_model_data_get
- NOAA-GFDL/MOM6@1d1914ff9 Merge pull request #136 from gustavo-marques/merge-dev-master-candidate-2019-12-17
- NOAA-GFDL/MOM6@0188f3507 Merge branch 'dev-master-candidate-2019-12-17' into merge-dev-master-candidate-2019-12-17
- NOAA-GFDL/MOM6@f7debedda Delete ocean_model_data_get from MCT and NUOPC caps
- NOAA-GFDL/MOM6@a12abd6db Revert "Merge pull request #133 from gustavo-marques/clean_caps"
- NOAA-GFDL/MOM6@c7c7bf184 Merge branch 'dev-master-candidate-2019-12-17' into merge-dev-master-candidate-2019-12-17
- NOAA-GFDL/MOM6@c3581144d Merge pull request #135 from gustavo-marques/LBD_merge
- NOAA-GFDL/MOM6@d276f3f84 Merge branch 'dev/ncar' into near_surface_fluxes
- NOAA-GFDL/MOM6@8a3e3e7e4 Merge branch 'near_surface_fluxes' into LBD_merge
- NOAA-GFDL/MOM6@2cccc837a Merge pull request #134 from gustavo-marques/fix_leith
- NOAA-GFDL/MOM6@3d17e0390 Merge pull request #133 from gustavo-marques/clean_caps
- NOAA-GFDL/MOM6@e53814498 remove duplicate fld_list_add calls
- NOAA-GFDL/MOM6@2c7de6631 Merge pull request #132 from NOAA-EMC/dev/emc
- NOAA-GFDL/MOM6@78bb4c14c Delete quotes from doxygen comment
- NOAA-GFDL/MOM6@8c95cc061 Fix bugs in Leith add new input parameter
- NOAA-GFDL/MOM6@c50a97891 Toggle continuous neutral diffusion in interior only
- NOAA-GFDL/MOM6@89eaede6c Delete ocean_model_data_get* from all the caps
- NOAA-GFDL/MOM6@20d076b4d Modify continuous neutral diffusion to account for boundary layer
- NOAA-GFDL/MOM6@a2d9636e2 Merge pull request #131 from gustavo-marques/meke_khtr
- NOAA-GFDL/MOM6@cb79e977f add changes from old MOM6 repo in cmeps_integration branch that were (#10)
- NOAA-GFDL/MOM6@97d07bcb4 Set the default for CDRAG_MEKE to CDRAG
- NOAA-GFDL/MOM6@02c986a77 Set default value to 0.003
- NOAA-GFDL/MOM6@e71a5736a Fix doxygen references
- NOAA-GFDL/MOM6@9303e9946 Fix typos and bugs
- NOAA-GFDL/MOM6@f3dba1609 Add new option to avoid negative thicknesses
- NOAA-GFDL/MOM6@7135281fb Merge pull request #8 from DeniseWorthen/feature/runoff_optional
- NOAA-GFDL/MOM6@147f7a382 Merge pull request #130 from DeniseWorthen/feature/runoff_optional
- NOAA-GFDL/MOM6@2c6bdf925 Create a separate param for MEKE bottom drag (CDRAG_MEKE)
- NOAA-GFDL/MOM6@b66eafe4e backs out change in standard name for liquid and frozen heat flux since this will require a change in the nuopc field_dictionary. The fields are not currently used.
- NOAA-GFDL/MOM6@b1ce184a3 Documentation and minor improvements
- NOAA-GFDL/MOM6@0a89aaca9 Fix registry of lbd diagnostics
- NOAA-GFDL/MOM6@6bce8ab9e Clean the code and fix line length exceeding 120
- NOAA-GFDL/MOM6@7f2b93e4c Replace lbm to lbd (lateral boundary diffusion)
- NOAA-GFDL/MOM6@64be85f76 minor text changes; uncomment runoff heat flux terms; required change made in feature/runoff_names branch of NEMS
- NOAA-GFDL/MOM6@419a021d9 removes data_override and associated calls from mom_cap renames: iob%rofl_flux => iob%lrunoff iob%rofi_flux => iob%frunoff iob%runoff_hflx = > iob%lrunoff_hflx iob%calving_hflx => iob%frunoff_hflx makes changes in mom_cap_methods and mom_surface_forcing_nuopc consistent w/ new iob names temporarily comments out _hflx terms in mom_cap,mom_cap_methods adds flag in mom_surface_forcing_nuopc for adding liquid river runoff via data_override
- NOAA-GFDL/MOM6@ba6140c33 Merge pull request #1 from NOAA-EMC/dev/emc
- NOAA-GFDL/MOM6@9a6f7f65e Merge NOAA-GFDL dev/master from 20191107
- NOAA-GFDL/MOM6@07481e41d updating mom_cap to add data override which was deleted in merge
- NOAA-GFDL/MOM6@100e92db5 Merge remote-tracking branch 'GFDL/dev/master' into testnewdevmaster20191107
- NOAA-GFDL/MOM6@80743e6cb Adding river runoff (from Jiande) Squashed commit of the following:
- NOAA-GFDL/MOM6@462768be6 Merge pull request #128 from gustavo-marques/fix_MEKE_GM_src
- NOAA-GFDL/MOM6@050aa31b3 Moves allocation of CS%equilibrium_value inside subroutine MEKE_equilibrium_restoring
- NOAA-GFDL/MOM6@3f041d93f MEKE diagnostic array fixes
- NOAA-GFDL/MOM6@2bb321efb Merge pull request #127 from gustavo-marques/depth_scaled_khth
- NOAA-GFDL/MOM6@ebf5ee0d3 Adds MEKE_equilibrium_restoring
- NOAA-GFDL/MOM6@1522ad0d7 Minor changes in the doxygen comments
- NOAA-GFDL/MOM6@223037c76 Deletes unneeded variables from calc_depth_function
- NOAA-GFDL/MOM6@67016eba9 Reverts description in DO_DYNAMICS to older version as this was changed by mistake.
- NOAA-GFDL/MOM6@bb785a8e0 Adds option to scale KHTH with depth
- NOAA-GFDL/MOM6@839217d9d Rearranged MEKE_EQUILIBRIUM subroutine
- NOAA-GFDL/MOM6@486da1dfc Replaces trunit to conc in the documentation
- NOAA-GFDL/MOM6@15c9f0646 Hard-code min of SN to be 1.0e-7
- NOAA-GFDL/MOM6@8f3cf968d Add placeholders for adding method3 and applying filter on method1
- NOAA-GFDL/MOM6@5583f84db Renames lateral_boundary_mixing to lateral_boundary_diffusion
- NOAA-GFDL/MOM6@69ec18c3a Removes redundant statement in netrual diffusion
- NOAA-GFDL/MOM6@af410950e Fix uninitialized variables in find_surface when NDIFF_INTERIOR_ONLY = False
- NOAA-GFDL/MOM6@e806fbabd Fixes a bug in the bulk_method
- NOAA-GFDL/MOM6@d7da98270 Improves the calculation of F_bulk to minimize roundoff errors
- NOAA-GFDL/MOM6@82c1bca13 First set of commits to limit neutral diffusion to the interior
- NOAA-GFDL/MOM6@3c5c7d181 Merge branch 'rewrite_discontinuous_sort' into near_surface_fluxes
- NOAA-GFDL/MOM6@91ca2d13e Fix flux limiter in LBM when < 0
- NOAA-GFDL/MOM6@ca23e661b Make fluxes_bulk_method more roundoff safe
- NOAA-GFDL/MOM6@5aaf34b7f Add flux limiter for bulk layer fluxes
- NOAA-GFDL/MOM6@9f15e4f7a Adds new unit test and fixes diagnostics
- NOAA-GFDL/MOM6@c8805391f Update LBM flux names and fix posting of 2d diags
- NOAA-GFDL/MOM6@bcec94ce2 Merge branch 'dev/ncar' into fix_MEKE_GM_src
- NOAA-GFDL/MOM6@bb46c38d8 Calculates bottomFac2 IF CS%MEKE_GEOMETRIC=True
- NOAA-GFDL/MOM6@66a8f0afb Fix bug in LBM diagnostics and add diags
- NOAA-GFDL/MOM6@a4f9550f9 Added new equilibrium formula for MEKE
- NOAA-GFDL/MOM6@73d0d7895 Fixes a bug in method2 of LBM, where diffusivities were not used
- NOAA-GFDL/MOM6@4d5c7862f Fixes undoxygenized LBM module variables
- NOAA-GFDL/MOM6@e5645b14c Fixes line length exceeding 120
- NOAA-GFDL/MOM6@f38a36972 Fixes unit test for layer by layer and removes the hbl_min = MIN(hbl_L, hbl_R)
- NOAA-GFDL/MOM6@c41b8b0c7 Adds two unit tests for layer by layer method
- NOAA-GFDL/MOM6@6d6d3b8a4 Adds two unit tests for layer by layer method
- NOAA-GFDL/MOM6@3cb68d348 Adds missing arguments after merge
- NOAA-GFDL/MOM6@62e322735 Adding layer by layer method for bottom boundary
- NOAA-GFDL/MOM6@8d9c6a430 Merge branch 'dev/ncar' into near_surface_fluxes
- NOAA-GFDL/MOM6@3bb1f5561 Adding first version of LBM method=2
- NOAA-GFDL/MOM6@4d0aed6b2 Fixes units and moves bulk diags inside if statement
- NOAA-GFDL/MOM6@f6800c2bc Update halos for hbl in LBM
- NOAA-GFDL/MOM6@915bcb19f Diagnostics for lateral boundary mixing scheme
- NOAA-GFDL/MOM6@223a815a2 Merge branch 'near_surface_fluxes' of github.com:ashao/MOM6 into HEAD
- NOAA-GFDL/MOM6@322aa77b8 Rename MOM_boundary_lateral_mixing.F90 for consistency
- NOAA-GFDL/MOM6@332a2648d Try to restore commits from accidental move of file
- NOAA-GFDL/MOM6@e5f96f424 Fix minor bugs in lateral boundary mixing
- NOAA-GFDL/MOM6@9b4d2c2bb Only allocate KPP_CS if requested
- NOAA-GFDL/MOM6@8ab7aa8ef Convert diffusive flux convergence to a change in tracer
- NOAA-GFDL/MOM6@8a4ed840d Guard against case where the boundary layer is 0 on one column
- NOAA-GFDL/MOM6@df938a1bb Add masking in lateral_boundary_fluxes
- NOAA-GFDL/MOM6@ae6529ea8 Hook lateral boundary mixing into tracer_hor_diff
- NOAA-GFDL/MOM6@a4dbeb158 Hook in lateral boundary mixing initialization
- NOAA-GFDL/MOM6@2b10a8bbc Skeleton for boundary layer mixing interfaces
- NOAA-GFDL/MOM6@4e63c751c Update API for boundary_layer_fluxes unit tests
- NOAA-GFDL/MOM6@79bea6876 New unit tests for surface boundary fluxes
- NOAA-GFDL/MOM6@f87aaa22b Fixes bulk_average calculation and takes into account partial cells when computing fluxes
- NOAA-GFDL/MOM6@a36f5d64c Removes more trailing space
- NOAA-GFDL/MOM6@17385cc86 Removes trailing space and fixes line length exceeded
- NOAA-GFDL/MOM6@667782043 Updates layer_fluxes_bulk_method and bulk_average
- NOAA-GFDL/MOM6@838523136 Add function and unit tests for boundary layer mixing
- NOAA-GFDL/MOM6@654a12c60 Add additional unit tests for bulk method
- NOAA-GFDL/MOM6@576fafbf2 Initial commit for implementing near-surface mixing
@marshallward marshallward deleted the index_rotation branch September 2, 2020 14:53
Hallberg-NOAA pushed a commit to Hallberg-NOAA/MOM6 that referenced this pull request May 15, 2026
…nservation, and adding time integration (mom-ocean#1088)

* Add ability to use different ML depths with brine plume

Codes in 3 options, MLD_003, MLD_EN1, and H_EPBL, all of which can be passed to brine plume param to set the plume depth

* Update brine plume scheme to conserve salt and time integrate

- Brine plume scheme failed dimensional consistency because it was not multiplied by the time step.  The units of plume_flux in the description are updated, which exposes why it failed the time dimension consistency test.
- The brine plume scheme was moved after the application of other fluxes that can add salt/heat/mass to the ocean in applyboundaryfluxesinout.  This change made it easier to track that it only moves salt in the vertical and doesn't create/destroy salt.
- The brine plume salt flux is now multipled by dt to convert from a rate to an amount.  This has a large impact on the behavior, but is approximately compensated by an unrealated bug in SIS2.
- The brine plume scheme did not conserve salt because it could neglect salt if the mixed layer depth wasn't deeper than the center of the bottom grid cell, possibly due to round off.  A new condition is added to insert salt into the bottom layer if it is thick enough to accept salt.  This significantly improves conservation, though round-off level errors are still possible.
- Complete a stub for a brine plume diagnostic, which can be used to verify how the brine plume scheme moves salt in the vertical.
- Adds an option to increase the vertical scale for brine plumes proportionally to the chosen mixed layer depth.
- Updated some parameter names and formatting related to the MLD used in the brine scheme.

* Fix OMP directives for brine plume helpers in MOM_diabatic_aux

* Updates for conservation in brine plume parameterization

- The brine plume salt flux contribution is no longer added to the top level and subtracted later in the brine plume part. Rather, the salt that is added in applyboundaryfluxes now has the brine plume salt flux removed.  The salt flux is then simply applied by adding it back in during the brine plume part.
- The code to handle flux deposition within the mixed layer was rewritten to ensure the salt flux is entirely used by the bottom-most finite thickness layer.
- The flux is now prescribed by analytical integral over the layer instead of midpoint quadrature.
- Debugging options are enhanced to better track and report on salt conservation.

* Make sure salt added/removed in brine plume is always computed

* Fix formatting and OMP directive

* Clean up brine plume commit, standard out, and debug options

* Fix OMP associated with brine plume

* Fix OMP associated with brine plume (again)

---------

Authored-by: brandon.reichl <brandon.reichl@noaa.gov>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants