Skip to content

Commit

Permalink
Merge branch 'vanroekel/ocean/add-submesoscale-eddies' (PR #5099)
Browse files Browse the repository at this point in the history
Adds submesoscale parameterization for mpas-ocean

Adds the Fox-Kemper et al 2011 parameterization for submesocale eddies.
There is also a substantial eddy parameterization reorganization as the
buoyancy gradient that was calculated within GM is also needed for this
parameterization. There are also cases when we will run with the
submeso parameterization and not GM so that calculation is separate.
The density threshold MLD is also removed from the analysis member as it
is required by numerous calculations in the forward model now.

The contributions of submesoscale eddy velocity to AMOC is also added to
the MOC streamfunction computation.

[NML]
[BFB] - stealth feature not turned on by default
  • Loading branch information
jonbob committed Aug 29, 2022
2 parents 0e2f1e0 + f1b8329 commit bb84429
Show file tree
Hide file tree
Showing 26 changed files with 1,745 additions and 514 deletions.
23 changes: 21 additions & 2 deletions components/mpas-ocean/bld/build-namelist
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,16 @@ 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: submesoscale_eddy_parameterization #
######################################################

add_default($nl, 'config_submesoscale_enable');
add_default($nl, 'config_submesoscale_tau');
add_default($nl, 'config_submesoscale_Ce');
add_default($nl, 'config_submesoscale_Lfmin');
add_default($nl, 'config_submesoscale_ds_max');

############################################
# Namelist group: GM_eddy_parameterization #
############################################
Expand All @@ -592,6 +602,15 @@ 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: eddy_parameterization #
#########################################

add_default($nl, 'config_eddyMLD_dens_threshold');
add_default($nl, 'config_eddyMLD_reference_depth');
add_default($nl, 'config_eddyMLD_reference_pressure');
add_default($nl, 'config_eddyMLD_use_old');

####################################
# Namelist group: Rayleigh_damping #
####################################
Expand Down Expand Up @@ -1291,9 +1310,7 @@ add_default($nl, 'config_AM_mixedLayerDepths_output_stream');
add_default($nl, 'config_AM_mixedLayerDepths_write_on_startup');
add_default($nl, 'config_AM_mixedLayerDepths_compute_on_startup');
add_default($nl, 'config_AM_mixedLayerDepths_Tthreshold');
add_default($nl, 'config_AM_mixedLayerDepths_Dthreshold');
add_default($nl, 'config_AM_mixedLayerDepths_crit_temp_threshold');
add_default($nl, 'config_AM_mixedLayerDepths_crit_dens_threshold');
add_default($nl, 'config_AM_mixedLayerDepths_reference_pressure');
add_default($nl, 'config_AM_mixedLayerDepths_Tgradient');
add_default($nl, 'config_AM_mixedLayerDepths_Dgradient');
Expand Down Expand Up @@ -1681,7 +1698,9 @@ my @groups = qw(run_modes
hmix_del4
hmix_leith
redi_isopycnal_mixing
submesoscale_eddy_parameterization
gm_eddy_parameterization
eddy_parameterization
rayleigh_damping
cvmix
gotm
Expand Down
2 changes: 2 additions & 0 deletions components/mpas-ocean/bld/build-namelist-group-list
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ my @groups = qw(run_modes
hmix_del4
hmix_leith
redi_isopycnal_mixing
submesoscale_eddy_parameterization
gm_eddy_parameterization
eddy_parameterization
rayleigh_damping
cvmix
gotm
Expand Down
21 changes: 19 additions & 2 deletions components/mpas-ocean/bld/build-namelist-section
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,16 @@ 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: submesoscale_eddy_parameterization #
######################################################

add_default($nl, 'config_submesoscale_enable');
add_default($nl, 'config_submesoscale_tau');
add_default($nl, 'config_submesoscale_Ce');
add_default($nl, 'config_submesoscale_Lfmin');
add_default($nl, 'config_submesoscale_ds_max');

############################################
# Namelist group: GM_eddy_parameterization #
############################################
Expand All @@ -135,6 +145,15 @@ 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: eddy_parameterization #
#########################################

add_default($nl, 'config_eddyMLD_dens_threshold');
add_default($nl, 'config_eddyMLD_reference_depth');
add_default($nl, 'config_eddyMLD_reference_pressure');
add_default($nl, 'config_eddyMLD_use_old');

####################################
# Namelist group: Rayleigh_damping #
####################################
Expand Down Expand Up @@ -763,9 +782,7 @@ add_default($nl, 'config_AM_mixedLayerDepths_output_stream');
add_default($nl, 'config_AM_mixedLayerDepths_write_on_startup');
add_default($nl, 'config_AM_mixedLayerDepths_compute_on_startup');
add_default($nl, 'config_AM_mixedLayerDepths_Tthreshold');
add_default($nl, 'config_AM_mixedLayerDepths_Dthreshold');
add_default($nl, 'config_AM_mixedLayerDepths_crit_temp_threshold');
add_default($nl, 'config_AM_mixedLayerDepths_crit_dens_threshold');
add_default($nl, 'config_AM_mixedLayerDepths_reference_pressure');
add_default($nl, 'config_AM_mixedLayerDepths_Tgradient');
add_default($nl, 'config_AM_mixedLayerDepths_Dgradient');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,13 @@
<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>

<!-- submesoscale_eddy_parameterization -->
<config_submesoscale_enable>.false.</config_submesoscale_enable>
<config_submesoscale_tau>172800</config_submesoscale_tau>
<config_submesoscale_Ce>0.06</config_submesoscale_Ce>
<config_submesoscale_Lfmin>1000.0</config_submesoscale_Lfmin>
<config_submesoscale_ds_max>100000.0</config_submesoscale_ds_max>

<!-- GM_eddy_parameterization -->
<config_use_GM>.true.</config_use_GM>
<config_use_GM ocn_grid="oRRS30to10v3">.false.</config_use_GM>
Expand Down Expand Up @@ -191,6 +198,12 @@
<config_GMRedi_Rossby_ramp_min>0.5</config_GMRedi_Rossby_ramp_min>
<config_GMRedi_Rossby_ramp_max>3.0</config_GMRedi_Rossby_ramp_max>

<!-- eddy_parameterization -->
<config_eddyMLD_dens_threshold>0.03</config_eddyMLD_dens_threshold>
<config_eddyMLD_reference_depth>10</config_eddyMLD_reference_depth>
<config_eddyMLD_reference_pressure>1.0e5</config_eddyMLD_reference_pressure>
<config_eddyMLD_use_old>.true.</config_eddyMLD_use_old>

<!-- Rayleigh_damping -->
<config_Rayleigh_friction>.false.</config_Rayleigh_friction>
<config_Rayleigh_damping_coeff>0.0</config_Rayleigh_damping_coeff>
Expand Down Expand Up @@ -725,9 +738,7 @@
<config_AM_mixedLayerDepths_write_on_startup>.false.</config_AM_mixedLayerDepths_write_on_startup>
<config_AM_mixedLayerDepths_compute_on_startup>.true.</config_AM_mixedLayerDepths_compute_on_startup>
<config_AM_mixedLayerDepths_Tthreshold>.true.</config_AM_mixedLayerDepths_Tthreshold>
<config_AM_mixedLayerDepths_Dthreshold>.true.</config_AM_mixedLayerDepths_Dthreshold>
<config_AM_mixedLayerDepths_crit_temp_threshold>0.2</config_AM_mixedLayerDepths_crit_temp_threshold>
<config_AM_mixedLayerDepths_crit_dens_threshold>0.03</config_AM_mixedLayerDepths_crit_dens_threshold>
<config_AM_mixedLayerDepths_reference_pressure>1.0E5</config_AM_mixedLayerDepths_reference_pressure>
<config_AM_mixedLayerDepths_Tgradient>.false.</config_AM_mixedLayerDepths_Tgradient>
<config_AM_mixedLayerDepths_Dgradient>.false.</config_AM_mixedLayerDepths_Dgradient>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,49 @@ Default: Defined in namelist_defaults.xml
</entry>


<!-- submesoscale_eddy_parameterization -->

<entry id="config_submesoscale_enable" type="logical"
category="submesoscale_eddy_parameterization" group="submesoscale_eddy_parameterization">
flag to enable the FK2011 parameterization for submesoscale eddies

Valid values: .true. or .false.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_submesoscale_tau" type="real"
category="submesoscale_eddy_parameterization" group="submesoscale_eddy_parameterization">
timescale for frictional slumping of front (in seconds)

Valid values: positive reals, between 1-10 days
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_submesoscale_Ce" type="real"
category="submesoscale_eddy_parameterization" group="submesoscale_eddy_parameterization">
efficiency of submesoscale eddies

Valid values: 0.06 - 0.08
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_submesoscale_Lfmin" type="real"
category="submesoscale_eddy_parameterization" group="submesoscale_eddy_parameterization">
minimum frontal width (meters)

Valid values: between 200 and 5000m
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_submesoscale_ds_max" type="real"
category="submesoscale_eddy_parameterization" group="submesoscale_eddy_parameterization">
maximum grid scale to scale up buoyancy gradient

Valid values: around 1 degree
Default: Defined in namelist_defaults.xml
</entry>


<!-- GM_eddy_parameterization -->

<entry id="config_use_GM" type="logical"
Expand Down Expand Up @@ -654,6 +697,41 @@ Default: Defined in namelist_defaults.xml
</entry>


<!-- eddy_parameterization -->

<entry id="config_eddyMLD_dens_threshold" type="real"
category="eddy_parameterization" group="eddy_parameterization">
potential density change relative to surface for mixed layer depth threshold method. This calculation is used for the Redi tapering, GM N2_dependent bolus kappa, and the submesoscale eddy parameterization

Valid values: suggested range 0.01 less than or equal to thresh less than or equal to 0.5
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_eddyMLD_reference_depth" type="real"
category="eddy_parameterization" group="eddy_parameterization">
reference depth for threshold computation

Valid values: any positive real, near 10
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_eddyMLD_reference_pressure" type="real"
category="eddy_parameterization" group="eddy_parameterization">
reference pressure for original mixed layer depth calculation

Valid values: positive reals around 1.0e5
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_eddyMLD_use_old" type="logical"
category="eddy_parameterization" group="eddy_parameterization">
switches from old dThreshMLD calculation to new (fixed one)

Valid values: .true. or .false.
Default: Defined in namelist_defaults.xml
</entry>


<!-- Rayleigh_damping -->

<entry id="config_Rayleigh_friction" type="logical"
Expand Down Expand Up @@ -4020,14 +4098,6 @@ Valid values: .true. or .false.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_AM_mixedLayerDepths_Dthreshold" type="logical"
category="AM_mixedLayerDepths" group="AM_mixedLayerDepths">
Logical flag that determines if MLDs are calculated using a critical density threshold

Valid values: .true. or .false.
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_AM_mixedLayerDepths_crit_temp_threshold" type="real"
category="AM_mixedLayerDepths" group="AM_mixedLayerDepths">
temperature change relative to surface for threshold method
Expand All @@ -4036,14 +4106,6 @@ Valid values: all real positive values, suggested range 0.2 less than or equal t
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_AM_mixedLayerDepths_crit_dens_threshold" type="real"
category="AM_mixedLayerDepths" group="AM_mixedLayerDepths">
potential density change relative to surface for threshold method

Valid values: suggested range 0.01 less than or equal to thresh less than or equal to 0.5
Default: Defined in namelist_defaults.xml
</entry>

<entry id="config_AM_mixedLayerDepths_reference_pressure" type="real"
category="AM_mixedLayerDepths" group="AM_mixedLayerDepths">
reference pressure for threshold computation
Expand Down
2 changes: 2 additions & 0 deletions components/mpas-ocean/cime_config/buildnml
Original file line number Diff line number Diff line change
Expand Up @@ -1125,6 +1125,8 @@ def buildnml(case, caseroot, compname):
lines.append(' <var name="mocStreamvalLatAndDepthGM"/>')
lines.append(' <var name="mocStreamvalLatAndDepthRegionGM"/>')

lines.append(' <var name="mocStreamvalLatAndDepthMLE"/>')
lines.append(' <var name="mocStreamvalLatAndDepthRegionMLE"/>')
lines.append(' <var_struct name="tracersSurfaceFlux"/>')
lines.append(' <var name="penetrativeTemperatureFlux"/>')
lines.append(' <var name="latentHeatFlux"/>')
Expand Down
12 changes: 12 additions & 0 deletions components/mpas-ocean/driver/ocn_comp_mct.F
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ module ocn_comp_mct
use ocn_tracer_surface_restoring
use ocn_gm
use ocn_config
use ocn_submesoscale_eddies
use ocn_eddy_parameterization_helpers
!
! !PUBLIC MEMBER FUNCTIONS:
implicit none
Expand Down Expand Up @@ -971,6 +973,16 @@ subroutine ocn_run_mct( EClock, cdata_o, x2o_o, o2x_o)!{{{

call ocn_frazil_forcing_build_arrays(domain, meshPool, forcingPool, statePool, ierr)

call ocn_eddy_compute_mixed_layer_depth(statePool, forcingPool)
if (config_use_GM .or. config_submesoscale_enable) then
call ocn_eddy_compute_buoyancy_gradient()
end if

if (config_submesoscale_enable) then
call mpas_timer_start("submesoscale eddy velocity compute", .false.)
call ocn_submesoscale_compute_velocity()
call mpas_timer_stop("submesoscale eddy velocity compute")
end if
! Compute normalGMBolusVelocity, relativeSlope and RediDiffVertCoef if respective flags are turned on
if (config_use_Redi.or.config_use_GM) then
call ocn_gm_compute_Bolus_velocity(statePool, meshPool, scratchPool, timeLevelIn=1)
Expand Down
Loading

0 comments on commit bb84429

Please sign in to comment.