Skip to content

Commit

Permalink
Merge branch 'darincomeau/ocn/gm-horizontal-resolution-function' into…
Browse files Browse the repository at this point in the history
… next (PR #4864)

Add horizontal tapering function to mesoscale eddy parameterizations

This PR adds a new 'RossbyRadius' option to the horizontal tapering of
GM and Redi, which is based on Hallberg (2013) -
https://doi.org/10.1016/j.ocemod.2013.08.007, which turns the
parameterization on if the Rossby Radius is resolved by at least two
cells. These flags are:
* config_Redi_horizontal_taper = 'ramp' (def), 'none', 'RossbyRadius'
* config_GM_horizontal_taper   = 'ramp' (def), 'none', 'RossbyRadius'
This PR replaces the variable `gmResolutionTaper`, which was used for
both GM and Redi, to the separate variables `RediHorizontalTaper` and
`gmHorizontalTaper` so that Redi and GM tapering can be chosen
separately, and it is clear in the code. Logic was added to the GM and
Redi schemes so that the there is a base value in the arrays for Redi
Kappa and GM Kappa. The base value is then multiplied by the taper
array, which has a value between 0 and 1. Arrays that are static in time
are computed on init. Under the following conditions, the arrays are
recomputed at every time step:
* config_Redi_horizontal_taper = 'RossbyRadius' (recompute
  RediHorizontalTaper and RediKappa)
* config_GM_horizontal_taper =  'RossbyRadius' (recompute
  gmHorizontalTaper)

[NML] adds MPAS-Ocean namelist options
[BFB]
  • Loading branch information
jonbob committed May 23, 2022
2 parents 406142e + 11b48ab commit 6205d82
Show file tree
Hide file tree
Showing 9 changed files with 354 additions and 193 deletions.
17 changes: 8 additions & 9 deletions components/mpas-ocean/bld/build-namelist
Original file line number Diff line number Diff line change
Expand Up @@ -550,14 +550,6 @@ add_default($nl, 'config_Leith_parameter');
add_default($nl, 'config_Leith_dx');
add_default($nl, 'config_Leith_visc2_max');

####################################################
# Namelist group: mesoscale_eddy_parameterizations #
####################################################

add_default($nl, 'config_eddying_resolution_taper');
add_default($nl, 'config_eddying_resolution_ramp_min');
add_default($nl, 'config_eddying_resolution_ramp_max');

#########################################
# Namelist group: Redi_isopycnal_mixing #
#########################################
Expand All @@ -572,6 +564,9 @@ add_default($nl, 'config_Redi_N2_based_taper_enable');
add_default($nl, 'config_Redi_N2_based_taper_min');
add_default($nl, 'config_Redi_N2_based_taper_limit_term1');
add_default($nl, 'config_Redi_min_layers_diag_terms');
add_default($nl, 'config_Redi_horizontal_taper');
add_default($nl, 'config_Redi_horizontal_ramp_min');
add_default($nl, 'config_Redi_horizontal_ramp_max');

############################################
# Namelist group: GM_eddy_parameterization #
Expand All @@ -591,6 +586,11 @@ add_default($nl, 'config_GM_EG_riMin');
add_default($nl, 'config_GM_EG_kappa_factor');
add_default($nl, 'config_GM_EG_Rossby_factor');
add_default($nl, 'config_GM_EG_Rhines_factor');
add_default($nl, 'config_GM_horizontal_taper');
add_default($nl, 'config_GM_horizontal_ramp_min');
add_default($nl, 'config_GM_horizontal_ramp_max');
add_default($nl, 'config_GMRedi_Rossby_ramp_min');
add_default($nl, 'config_GMRedi_Rossby_ramp_max');

####################################
# Namelist group: Rayleigh_damping #
Expand Down Expand Up @@ -1679,7 +1679,6 @@ my @groups = qw(run_modes
hmix_leith
redi_isopycnal_mixing
gm_eddy_parameterization
mesoscale_eddy_parameterizations
rayleigh_damping
cvmix
gotm
Expand Down
1 change: 0 additions & 1 deletion components/mpas-ocean/bld/build-namelist-group-list
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ my @groups = qw(run_modes
hmix_del2
hmix_del4
hmix_leith
mesoscale_eddy_parameterizations
redi_isopycnal_mixing
gm_eddy_parameterization
rayleigh_damping
Expand Down
16 changes: 8 additions & 8 deletions components/mpas-ocean/bld/build-namelist-section
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,6 @@ add_default($nl, 'config_Leith_parameter');
add_default($nl, 'config_Leith_dx');
add_default($nl, 'config_Leith_visc2_max');

####################################################
# Namelist group: mesoscale_eddy_parameterizations #
####################################################

add_default($nl, 'config_eddying_resolution_taper');
add_default($nl, 'config_eddying_resolution_ramp_min');
add_default($nl, 'config_eddying_resolution_ramp_max');

#########################################
# Namelist group: Redi_isopycnal_mixing #
#########################################
Expand All @@ -115,6 +107,9 @@ add_default($nl, 'config_Redi_N2_based_taper_enable');
add_default($nl, 'config_Redi_N2_based_taper_min');
add_default($nl, 'config_Redi_N2_based_taper_limit_term1');
add_default($nl, 'config_Redi_min_layers_diag_terms');
add_default($nl, 'config_Redi_horizontal_taper');
add_default($nl, 'config_Redi_horizontal_ramp_min');
add_default($nl, 'config_Redi_horizontal_ramp_max');

############################################
# Namelist group: GM_eddy_parameterization #
Expand All @@ -134,6 +129,11 @@ add_default($nl, 'config_GM_EG_riMin');
add_default($nl, 'config_GM_EG_kappa_factor');
add_default($nl, 'config_GM_EG_Rossby_factor');
add_default($nl, 'config_GM_EG_Rhines_factor');
add_default($nl, 'config_GM_horizontal_taper');
add_default($nl, 'config_GM_horizontal_ramp_min');
add_default($nl, 'config_GM_horizontal_ramp_max');
add_default($nl, 'config_GMRedi_Rossby_ramp_min');
add_default($nl, 'config_GMRedi_Rossby_ramp_max');

####################################
# Namelist group: Rayleigh_damping #
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,6 @@
<config_Leith_dx>15000.0</config_Leith_dx>
<config_Leith_visc2_max>2.5e3</config_Leith_visc2_max>

<!-- mesoscale_eddy_parameterizations -->
<config_eddying_resolution_taper>'ramp'</config_eddying_resolution_taper>
<config_eddying_resolution_ramp_min>20e3</config_eddying_resolution_ramp_min>
<config_eddying_resolution_ramp_min ocn_grid="WCAtl12to45E2r4">30e3</config_eddying_resolution_ramp_min>
<config_eddying_resolution_ramp_max>30e3</config_eddying_resolution_ramp_max>
<config_eddying_resolution_ramp_max ocn_grid="WCAtl12to45E2r4">40e3</config_eddying_resolution_ramp_max>

<!-- Redi_isopycnal_mixing -->
<config_use_Redi>.true.</config_use_Redi>
<config_use_Redi ocn_grid="oRRS30to10v3">.false.</config_use_Redi>
Expand All @@ -153,6 +146,11 @@
<config_Redi_N2_based_taper_min>0.1</config_Redi_N2_based_taper_min>
<config_Redi_N2_based_taper_limit_term1>.true.</config_Redi_N2_based_taper_limit_term1>
<config_Redi_min_layers_diag_terms>6</config_Redi_min_layers_diag_terms>
<config_Redi_horizontal_taper>'ramp'</config_Redi_horizontal_taper>
<config_Redi_horizontal_ramp_min>20e3</config_Redi_horizontal_ramp_min>
<config_Redi_horizontal_ramp_min ocn_grid="WCAtl12to45E2r4">30e3</config_Redi_horizontal_ramp_min>
<config_Redi_horizontal_ramp_max>30e3</config_Redi_horizontal_ramp_max>
<config_Redi_horizontal_ramp_max ocn_grid="WCAtl12to45E2r4">40e3</config_Redi_horizontal_ramp_max>

<!-- GM_eddy_parameterization -->
<config_use_GM>.true.</config_use_GM>
Expand Down Expand Up @@ -185,6 +183,13 @@
<config_GM_EG_kappa_factor>3.0</config_GM_EG_kappa_factor>
<config_GM_EG_Rossby_factor>2.0</config_GM_EG_Rossby_factor>
<config_GM_EG_Rhines_factor>0.3</config_GM_EG_Rhines_factor>
<config_GM_horizontal_taper>'ramp'</config_GM_horizontal_taper>
<config_GM_horizontal_ramp_min>20e3</config_GM_horizontal_ramp_min>
<config_GM_horizontal_ramp_min ocn_grid="WCAtl12to45E2r4">30e3</config_GM_horizontal_ramp_min>
<config_GM_horizontal_ramp_max>30e3</config_GM_horizontal_ramp_max>
<config_GM_horizontal_ramp_max ocn_grid="WCAtl12to45E2r4">40e3</config_GM_horizontal_ramp_max>
<config_GMRedi_Rossby_ramp_min>0.5</config_GMRedi_Rossby_ramp_min>
<config_GMRedi_Rossby_ramp_max>3.0</config_GMRedi_Rossby_ramp_max>

<!-- Rayleigh_damping -->
<config_Rayleigh_friction>.false.</config_Rayleigh_friction>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -392,33 +392,6 @@ Default: Defined in namelist_defaults.xml
</entry>


<!-- mesoscale_eddy_parameterizations -->

<entry id="config_eddying_resolution_taper" type="char*1024"
category="mesoscale_eddy_parameterizations" group="mesoscale_eddy_parameterizations">
Control how the Redi and GM Bolus $\kappa$ value varies as a function of horizontal resolution

Valid values: 'none' and 'ramp'
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_eddying_resolution_ramp_min" type="real"
category="mesoscale_eddy_parameterizations" group="mesoscale_eddy_parameterizations">
Minimum value in grid cell size for Redi and GM $\kappa$ ramp function. Here cell size refers to dcEdge. Used when config_eddying_resolution_taper is set to ramp.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_eddying_resolution_ramp_max" type="real"
category="mesoscale_eddy_parameterizations" group="mesoscale_eddy_parameterizations">
Maximum value in grid cell size for Redi and GM $\kappa$ ramp function. Here cell size refers to dcEdge. Used when config_eddying_resolution_taper is set to ramp.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>


<!-- Redi_isopycnal_mixing -->

<entry id="config_use_Redi" type="logical"
Expand Down Expand Up @@ -501,6 +474,30 @@ Valid values: any integer between 0 (all layers on) and nVertLevels (all layers
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_Redi_horizontal_taper" type="char*1024"
category="Redi_isopycnal_mixing" group="Redi_isopycnal_mixing">
Control how the Redi $\kappa$ value varies as a function of horizontal resolution. 'none' is constant, 'ramp' is strictly based on resolution, 'RossbyRadius' follows Hallberg (2013) - https://doi.org/10.1016/j.ocemod.2013.08.007

Valid values: 'none', 'ramp', 'RossbyRadius'
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_Redi_horizontal_ramp_min" type="real"
category="Redi_isopycnal_mixing" group="Redi_isopycnal_mixing">
Minimum value in grid cell size for Redi $\kappa$ ramp function. Here cell size refers to dcEdge. Used when config_Redi_horizontal_taper is set to ramp.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_Redi_horizontal_ramp_max" type="real"
category="Redi_isopycnal_mixing" group="Redi_isopycnal_mixing">
Maximum value in grid cell size for Redi $\kappa$ ramp function. Here cell size refers to dcEdge. Used when config_Redi_horizontal_taper is set to ramp.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>


<!-- GM_eddy_parameterization -->

Expand Down Expand Up @@ -616,6 +613,46 @@ Valid values: small positive values less than equal to one
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_GM_horizontal_taper" type="char*1024"
category="GM_eddy_parameterization" group="GM_eddy_parameterization">
Control how the GM Bolus value varies as a function of horizontal resolution. 'none' is constant, 'ramp' is strictly based on resolution, 'RossbyRadius' follows Hallberg (2013) - https://doi.org/10.1016/j.ocemod.2013.08.007

Valid values: 'none', 'ramp', 'RossbyRadius'
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_GM_horizontal_ramp_min" type="real"
category="GM_eddy_parameterization" group="GM_eddy_parameterization">
Minimum value in grid cell size for GM $\kappa$ ramp function. Here cell size refers to dcEdge. Used when config_GM_horizontal_taper is set to ramp.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_GM_horizontal_ramp_max" type="real"
category="GM_eddy_parameterization" group="GM_eddy_parameterization">
Maximum value in grid cell size for GM $\kappa$ ramp function. Here cell size refers to dcEdge. Used when config_GM_horizontal_taper is set to ramp.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_GMRedi_Rossby_ramp_min" type="real"
category="GM_eddy_parameterization" group="GM_eddy_parameterization">
Minimum value of the ratio between grid-cell size (dcEdge) and Rossby radius for GM and Redi $\kappa$ ramp functions. Used when config_GM_horizontal_taper and/or config_Redi_horizontal_taper are set to RossbyRadius.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_GMRedi_Rossby_ramp_max" type="real"
category="GM_eddy_parameterization" group="GM_eddy_parameterization">
Maximum value of the ratio between grid-cell size (dcEdge) and Rossby radius for GM and Redi $\kappa$ ramp functions. Used when config_GM_horizontal_taper and/or config_Redi_horizontal_taper are set to RossbyRadius.

Valid values: Any positive real value.
Default: Defined in namelist_defaults.xml
</entry>


<!-- Rayleigh_damping -->

Expand Down
Loading

0 comments on commit 6205d82

Please sign in to comment.