Skip to content

Commit

Permalink
Include analysis restart in timeSeriesStats restart
Browse files Browse the repository at this point in the history
One version of each restart test does not include analysis restart
(the configuration that E3SM uses) and another does (the default
in standalone MPAS-Ocean).
  • Loading branch information
xylar committed Oct 5, 2022
1 parent 6a137dc commit 8420845
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 30 deletions.
14 changes: 12 additions & 2 deletions compass/ocean/tests/global_ocean/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,24 @@ def __init__(self, mpas_core):
time_integrator=time_integrator))
self.add_test_case(
TimeSeriesStatsRestartTest(
test_group=self, mesh=mesh, init=init, analysis='Daily'))
test_group=self, mesh=mesh, init=init, analysis='Daily',
with_analysis_restart=True))
self.add_test_case(
TimeSeriesStatsRestartTest(
test_group=self, mesh=mesh, init=init, analysis='Daily',
with_analysis_restart=False))
self.add_test_case(
MonthlyOutputTest(
test_group=self, mesh=mesh, init=init,
time_integrator=time_integrator))
self.add_test_case(
TimeSeriesStatsRestartTest(
test_group=self, mesh=mesh, init=init, analysis='Monthly'))
test_group=self, mesh=mesh, init=init, analysis='Monthly',
with_analysis_restart=True))
self.add_test_case(
TimeSeriesStatsRestartTest(
test_group=self, mesh=mesh, init=init, analysis='Monthly',
with_analysis_restart=False))

dynamic_adjustment = QU240DynamicAdjustment(
test_group=self, mesh=mesh, init=init,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ class TimeSeriesStatsRestartTest(ForwardTestCase):
"""

def __init__(self, test_group, mesh, init, analysis):
def __init__(self, test_group, mesh, init, analysis,
with_analysis_restart):
"""
Create test case
Expand All @@ -32,8 +33,14 @@ def __init__(self, test_group, mesh, init, analysis):
analysis : {'Daily', 'Monthly'}
The suffix for the ``timeSeriesStats`` analysis member to check.
with_analysis_restart : bool
Whether to save a restart file from ``timeSeriesStats``
"""
name = f'{analysis.lower()}_restart_test'
if with_analysis_restart:
name = f'{analysis.lower()}_analysis_restart'
else:
name = f'{analysis.lower()}_model_restart'
time_integrator = 'split_explicit'
super().__init__(test_group=test_group, mesh=mesh, init=init,
time_integrator=time_integrator, name=name)
Expand All @@ -42,14 +49,35 @@ def __init__(self, test_group, mesh, init, analysis):

output_interval = '0000-00-00_04:00:00'

replacements = dict(analysis=analysis,
output_interval=output_interval)

restart_filename = '../restarts/rst.0001-01-01_04.00.00.nc'
analysis_restart_filename = \
f'../restarts/rst.timeSeriesStats{analysis}.0001-01-01_04.00.00.nc'
if with_analysis_restart:
analysis_restart_filename = \
f'../restarts/rst.timeSeriesStats{analysis}.0001-01-01_04.00.00.nc'
analysis_restart_input_interval = 'initial_only'
analysis_restart_output_interval = 'stream:restart:output_interval'
else:
analysis_restart_filename = None
analysis_restart_input_interval = 'none'
analysis_restart_output_interval = 'none'
analysis_filename = \
f'analysis_members/mpaso.hist.am.timeSeriesStats{analysis}.0001-01-01_08.00.00.nc'
f'analysis_members/mpaso.hist.am.timeSeriesStats{analysis}.0001-01-01_04.00.00.nc'

replacements = dict(
analysis=analysis,
output_interval=output_interval,
analysis_restart_input_interval=analysis_restart_input_interval,
analysis_restart_output_interval=analysis_restart_output_interval)

namelist_options = {
f'config_AM_timeSeriesStats{analysis}_enable': '.true.',
f'config_AM_timeSeriesStats{analysis}_compute_on_startup': '.false.',
f'config_AM_timeSeriesStats{analysis}_write_on_startup': '.false.',
f'config_AM_timeSeriesStats{analysis}_compute_interval': "'00-00-00_01:00:00'",
f'config_AM_timeSeriesStats{analysis}_reset_intervals': "'00-00-00_04:00:00'",
f'config_AM_timeSeriesStats{analysis}_backward_output_offset': "'00-00-00_04:00:00'"}

if not with_analysis_restart:
namelist_options[f'config_AM_timeSeriesStats{analysis}_restart_stream'] = "'none'"

for part in ['full', 'restart']:
name = f'{part}_run'
Expand All @@ -58,14 +86,17 @@ def __init__(self, test_group, mesh, init, analysis):
subdir=name, ntasks=4, openmp_threads=1)

step.add_namelist_file(module, f'namelist.{part}')
step.add_namelist_options(namelist_options)
step.add_streams_file(module, 'streams.forward',
template_replacements=replacements)
if part == 'full':
step.add_output_file(restart_filename)
step.add_output_file(analysis_restart_filename)
if analysis_restart_filename is not None:
step.add_output_file(analysis_restart_filename)
else:
step.add_input_file(restart_filename)
step.add_input_file(analysis_restart_filename)
if analysis_restart_filename is not None:
step.add_input_file(analysis_restart_filename)
step.add_output_file(analysis_filename)
self.add_step(step)

Expand All @@ -77,14 +108,17 @@ def validate(self):
analysis = self.analysis
variables = [
'Time', 'Time_bnds',
f'time{analysis}_avg_activeTracers_temperature',
f'time{analysis}_avg_activeTracers_salinity',
f'time{analysis}_avg_layerThickness',
f'time{analysis}_avg_normalVelocity',
f'time{analysis}_avg_ssh']

if analysis == 'Monthly':
variables.extend([
f'time{analysis}_avg_activeTracers_temperature',
f'time{analysis}_avg_activeTracers_salinity',
f'time{analysis}_avg_layerThickness'])

analysis_filename = \
f'analysis_members/mpaso.hist.am.timeSeriesStats{analysis}.0001-02-01.nc'
f'analysis_members/mpaso.hist.am.timeSeriesStats{analysis}.0001-01-01_04.00.00.nc'

compare_variables(
test_case=self, variables=variables,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
config_start_time = '0001-01-01_00:00:00'
config_run_duration = '08:00:00'
config_dt = '00:30:00'
config_do_restart = .false.
config_AM_timeSeriesStatsDaily_enable = .true.
config_AM_timeSeriesStatsDaily_compute_on_startup = .false.
config_AM_timeSeriesStatsDaily_write_on_startup = .false.
config_AM_timeSeriesStatsDaily_compute_interval = '00-00-00_04:00:00'
config_AM_timeSeriesStatsDaily_reset_intervals = '00-00-00_04:00:00'
config_AM_timeSeriesStatsDaily_backward_output_offset = '00-00-00_04:00:00'
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
config_start_time = '0001-01-01_04:00:00'
config_run_duration = '04:00:00'
config_dt = '00:30:00'
config_do_restart = .true.
config_AM_timeSeriesStatsDaily_enable = .true.
config_AM_timeSeriesStatsDaily_compute_on_startup = .false.
config_AM_timeSeriesStatsDaily_write_on_startup = .false.
config_AM_timeSeriesStatsDaily_compute_interval = '00-00-00_04:00:00'
config_AM_timeSeriesStatsDaily_reset_intervals = '00-00-00_04:00:00'
config_AM_timeSeriesStatsDaily_backward_output_offset = '00-00-00_04:00:00'
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
output_interval="{{ output_interval }}">
</stream>

<immutable_stream name="timeSeriesStats{{ analysis }}Restart"
filename_template="../restarts/rst.timeSeriesStats{{ analysis }}.$Y-$M-$D_$h.$m.$s.nc"/>
<stream name="timeSeriesStats{{ analysis }}Restart"
filename_template="../restarts/rst.timeSeriesStats{{ analysis }}.$Y-$M-$D_$h.$m.$s.nc"
input_interval="{{ analysis_restart_input_interval }}"
output_interval="{{ analysis_restart_output_interval }}"/>

<stream name="timeSeriesStats{{ analysis }}Output"
type="output"
Expand Down

0 comments on commit 8420845

Please sign in to comment.