Source code for polaris.tasks.ocean.cosine_bell.restart

from polaris import Task as Task
from polaris.mesh.add_step import add_uniform_spherical_base_mesh_step
from polaris.ocean.convergence import (
    get_resolution_for_task as get_resolution_for_task,
)
from polaris.tasks.ocean.cosine_bell.init import Init as Init
from polaris.tasks.ocean.cosine_bell.restart.restart_step import (
    RestartStep as RestartStep,
)
from polaris.tasks.ocean.cosine_bell.validate import Validate as Validate


[docs] class Restart(Task): """ A cosine bell restart test case, which makes sure the model produces identical results with one longer run and two shorter runs with a restart in between. """
[docs] def __init__( self, component, config, prefix, refinement_factor, refinement ): """ Create the convergence test Parameters ---------- component : polaris.tasks.ocean.Ocean The ocean component that this task belongs to config : polaris.config.PolarisConfigParser A shared config parser prefix : str The prefix on the mesh name, step names and a subdirectory in the work directory indicating the mesh type ('icos': uniform or 'qu': less regular JIGSAW meshes) refinement_factor : float The factor by which to scale space, time or both refinement : str Refinement type. One of 'space', 'time' or 'both' indicating both space and time """ task_subdir = f'spherical/{prefix}/cosine_bell/restart' name = f'{prefix}_cosine_bell_restart' config_filename = 'cosine_bell.cfg' super().__init__(component=component, name=name, subdir=task_subdir) self.set_shared_config(config, link=config_filename) resolution = get_resolution_for_task( config, refinement_factor, refinement=refinement ) icosahedral = prefix == 'icos' base_mesh_step, mesh_name = add_uniform_spherical_base_mesh_step( resolution, icosahedral ) name = f'{prefix}_init_{mesh_name}' init_subdir = f'spherical/{prefix}/cosine_bell/init/{mesh_name}' if init_subdir in component.steps: init_step = component.steps[init_subdir] else: init_step = Init( component=component, name=name, subdir=init_subdir, base_mesh=base_mesh_step, ) init_step.set_shared_config(config, link=config_filename) self.add_step(base_mesh_step, symlink=f'base_mesh/{mesh_name}') self.add_step(init_step, symlink=f'init/{mesh_name}') step_names = ['full_run', 'restart_run'] for name in step_names: subdir = f'{task_subdir}/{name}' do_restart = name == 'restart_run' step = RestartStep( component=component, name=name, subdir=subdir, mesh=base_mesh_step, init=init_step, refinement_factor=refinement_factor, refinement=refinement, do_restart=do_restart, ) step.set_shared_config(config, link=config_filename) self.add_step(step) self.add_step( Validate( component=component, step_subdirs=step_names, indir=task_subdir ) )