Skip to content

Commit b5930ee

Browse files
authored
Merge pull request #262 from cbegeman/add-omega-sphere-transport
Add support for omega sphere transport tests Add omega support for the sphere_transport test suite
2 parents 943c86d + d6a5d6b commit b5930ee

File tree

13 files changed

+106
-43
lines changed

13 files changed

+106
-43
lines changed

polaris/ocean/config/single_layer.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,5 @@ mpas-ocean:
99
config_disable_thick_vadv: true
1010
config_disable_vel_vadv: true
1111
config_disable_vel_vmix: true
12-
config_disable_tr_all_tend: true
1312
pressure_gradient:
1413
config_pressure_gradient_type: ssh_gradient

polaris/ocean/convergence/analysis.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,17 @@ def run(self):
150150
"""
151151
plt.switch_backend('Agg')
152152
convergence_vars = self.convergence_vars
153+
variables_failed = []
153154
for var in convergence_vars:
154-
self.plot_convergence(
155+
convergence_failed = self.plot_convergence(
155156
variable_name=var["name"],
156157
title=var["title"],
157158
zidx=var["zidx"])
159+
if convergence_failed:
160+
variables_failed.append(var["name"])
161+
if len(variables_failed) >= 1:
162+
raise ValueError('Convergence rate below minimum tolerance for '
163+
f'variables {", ".join(variables_failed)}.')
158164

159165
def plot_convergence(self, variable_name, title, zidx):
160166
"""
@@ -281,8 +287,7 @@ def plot_convergence(self, variable_name, title, zidx):
281287
f'{conv_thresh}')
282288
convergence_failed = True
283289

284-
if convergence_failed:
285-
raise ValueError('Convergence rate below minimum tolerance.')
290+
return convergence_failed
286291

287292
def compute_error(self, refinement_factor, variable_name, zidx=None,
288293
error_type='l2'):

polaris/ocean/suites/omega_pr.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
ocean/planar/manufactured_solution/convergence_both
2+
ocean/spherical/icos/rotation_2d/convergence_both
23
ocean/spherical/icos/cosine_bell/decomp
34
ocean/spherical/icos/cosine_bell/restart

polaris/ocean/tasks/sphere_transport/analysis.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ def __init__(self, component, subdir, case_name,
3939
self.case_name = case_name
4040
convergence_vars = [{'name': 'tracer1',
4141
'title': 'tracer1',
42-
'zidx': 1},
42+
'zidx': 0},
4343
{'name': 'tracer2',
4444
'title': 'tracer2',
45-
'zidx': 1},
45+
'zidx': 0},
4646
{'name': 'tracer3',
4747
'title': 'tracer3',
48-
'zidx': 1}]
48+
'zidx': 0}]
4949
super().__init__(component=component, subdir=subdir,
5050
dependencies=dependencies,
5151
convergence_vars=convergence_vars,
@@ -71,8 +71,14 @@ def convergence_parameters(self, field_name=None):
7171
The maximum convergence rate
7272
"""
7373
config = self.config
74+
model = config.get('ocean', 'model')
75+
if model == 'omega' and self.case_name == 'rotation_2d':
76+
order = 2
77+
else:
78+
order = 3
7479
section = config[self.case_name]
75-
conv_thresh = section.getfloat(f'convergence_thresh_{field_name}')
80+
conv_thresh = section.getfloat(
81+
f'convergence_thresh_{field_name}_order{order}')
7682

7783
section = config['convergence']
7884
error_type = section.get('error_type')

polaris/ocean/tasks/sphere_transport/correlated_tracers_2d.cfg

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ vel_amp = 10.
99
correlation_coefficients = -0.8, 0.0, 0.9
1010

1111
# convergence threshold below which the test fails
12-
convergence_thresh_tracer1 = 1.5
13-
convergence_thresh_tracer2 = 1.3
14-
convergence_thresh_tracer3 = 1.0
12+
convergence_thresh_tracer1_order3 = 1.5
13+
convergence_thresh_tracer2_order3 = 1.3
14+
convergence_thresh_tracer3_order3 = 1.0
1515

1616
# time in days at which to evaluate mixing
1717
mixing_evaluation_time = 6.0

polaris/ocean/tasks/sphere_transport/divergent_2d.cfg

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
vel_amp = 5.
66

77
# convergence threshold below which the test fails
8-
convergence_thresh_tracer1 = 1.8
9-
convergence_thresh_tracer2 = 1.5
10-
convergence_thresh_tracer3 = 0.3
8+
convergence_thresh_tracer1_order3 = 1.8
9+
convergence_thresh_tracer2_order3 = 1.5
10+
convergence_thresh_tracer3_order3 = 0.3

polaris/ocean/tasks/sphere_transport/forward.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,13 @@ def __init__(self, component, name, subdir, base_mesh, init,
6060
graph_target=f'{base_mesh.path}/graph.info',
6161
refinement_factor=refinement_factor,
6262
refinement=refinement)
63+
64+
def setup(self):
65+
"""
66+
TEMP: symlink initial condition to name hard-coded in Omega
67+
"""
68+
super().setup()
69+
model = self.config.get('ocean', 'model')
70+
# TODO: remove as soon as Omega no longer hard-codes this file
71+
if model == 'omega':
72+
self.add_input_file(filename='OmegaMesh.nc', target='init.nc')

polaris/ocean/tasks/sphere_transport/forward.yaml

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
mpas-ocean:
2-
run_modes:
3-
config_ocean_run_mode: forward
1+
ocean:
42
time_management:
53
config_stop_time: none
64
config_run_duration: {{ run_duration }}
5+
time_integration:
6+
config_dt: {{ dt }}
7+
config_time_integrator: {{ time_integrator }}
8+
9+
mpas-ocean:
10+
run_modes:
11+
config_ocean_run_mode: forward
712
decomposition:
813
config_block_decomp_file_prefix: graph.info.part.
914
advection:
1015
config_vert_coord_movement: impermeable_interfaces
11-
time_integration:
12-
config_dt: {{ dt }}
13-
config_time_integrator: {{ time_integrator }}
1416
debug:
1517
config_disable_thick_sflux: true
1618
config_disable_vel_all_tend: true
@@ -57,3 +59,31 @@ mpas-ocean:
5759
- refLayerThickness
5860
- kineticEnergyCell
5961
- relativeVorticityCell
62+
63+
Omega:
64+
Tendencies:
65+
ThicknessFluxTendencyEnable : false
66+
PVTendencyEnable : false
67+
KETendencyEnable : false
68+
SSHTendencyEnable : false
69+
VelDiffTendencyEnable: false
70+
VelHyperDiffTendencyEnable: false
71+
TracerHorzAdvTendencyEnable : true
72+
TracerDiffTendencyEnable : false
73+
TracerHyperDiffTendencyEnable : false
74+
Dimension:
75+
NVertLevels: 1
76+
IOStreams:
77+
InitialState:
78+
Filename: init.nc
79+
Contents:
80+
- State
81+
- Tracers
82+
History:
83+
Filename: output.nc
84+
Freq: {{ output_freq }}
85+
FreqUnits: seconds
86+
Contents:
87+
- Tracers
88+
- LayerThickness
89+
- NormalVelocity

polaris/ocean/tasks/sphere_transport/init.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import numpy as np
22
import xarray as xr
3-
from mpas_tools.io import write_netcdf
43

5-
from polaris import Step
4+
from polaris.ocean.model import OceanIOStep
65
from polaris.ocean.tasks.sphere_transport.resources.flow_types import (
76
flow_divergent,
87
flow_nondivergent,
@@ -17,7 +16,7 @@
1716
from polaris.ocean.vertical import init_vertical_coord
1817

1918

20-
class Init(Step):
19+
class Init(OceanIOStep):
2120
"""
2221
A step for an initial condition for for the cosine bell test case
2322
"""
@@ -156,4 +155,4 @@ def run(self):
156155
ds['fEdge'] = xr.zeros_like(ds_mesh.xEdge)
157156
ds['fVertex'] = xr.zeros_like(ds_mesh.xVertex)
158157

159-
write_netcdf(ds, 'initial_state.nc')
158+
self.write_model_dataset(ds, 'initial_state.nc')

polaris/ocean/tasks/sphere_transport/nondivergent_2d.cfg

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
vel_amp = 10.
66

77
# convergence threshold below which the test fails
8-
convergence_thresh_tracer1 = 1.5
9-
convergence_thresh_tracer2 = 1.1
10-
convergence_thresh_tracer3 = 0.3
8+
convergence_thresh_tracer1_order3 = 1.5
9+
convergence_thresh_tracer2_order3 = 1.1
10+
convergence_thresh_tracer3_order3 = 0.3
1111

1212
# time in days at which to evaluate filament preservation
1313
filament_evaluation_time = 6.0

0 commit comments

Comments
 (0)