From a522c3dbc9b364564010356d3c88d5f37d6ba2a3 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Mon, 21 Oct 2024 16:50:16 -0500 Subject: [PATCH 01/20] Add barotropic gyre initial state --- .../ocean/tasks/barotropic_gyre/__init__.py | 35 ++++ polaris/ocean/tasks/barotropic_gyre/init.py | 159 ++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 polaris/ocean/tasks/barotropic_gyre/__init__.py create mode 100644 polaris/ocean/tasks/barotropic_gyre/init.py diff --git a/polaris/ocean/tasks/barotropic_gyre/__init__.py b/polaris/ocean/tasks/barotropic_gyre/__init__.py new file mode 100644 index 000000000..f2873406c --- /dev/null +++ b/polaris/ocean/tasks/barotropic_gyre/__init__.py @@ -0,0 +1,35 @@ +from polaris import Step, Task +from polaris.config import PolarisConfigParser +from polaris.ocean.tasks.barotropic_gyre.init import Init + + +def add_barotropic_gyre_tasks(component): + """ + Add a task that defines a convergence test for inertial gravity waves + + component : polaris.ocean.Ocean + the ocean component that the task will be added to + """ + component.add_task(BarotropicGyre(component=component)) + + +class BarotropicGyre(Task): + """ + The convergence test case for inertial gravity waves + """ + + def __init__(self, component): + """ + Create the test case + + Parameters + ---------- + component : polaris.ocean.Ocean + The ocean component that this task belongs to + """ + name = 'barotropic_gyre' + subdir = f'planar/{name}' + super().__init__(component=component, name=name, subdir=subdir) + init_step = Init(component=component, + subdir=self.subdir) + self.add_step(init_step) diff --git a/polaris/ocean/tasks/barotropic_gyre/init.py b/polaris/ocean/tasks/barotropic_gyre/init.py new file mode 100644 index 000000000..53ccfee8e --- /dev/null +++ b/polaris/ocean/tasks/barotropic_gyre/init.py @@ -0,0 +1,159 @@ +import numpy as np +import xarray as xr +from mpas_tools.io import write_netcdf +from mpas_tools.mesh.conversion import convert, cull +from mpas_tools.planar_hex import make_planar_hex_mesh + +from polaris import Step +from polaris.mesh.planar import compute_planar_hex_nx_ny +from polaris.ocean.vertical import init_vertical_coord +from polaris.viz import plot_horiz_field + + +class Init(Step): + """ + A step for creating a mesh and initial condition for baroclinic channel + tasks + + Attributes + ---------- + resolution : float + The resolution of the task in km + """ + def __init__(self, component, subdir): + """ + Create the step + + Parameters + ---------- + component : polaris.Component + The component the step belongs to + """ + super().__init__(component=component, name='init', indir=subdir) + + for file in ['base_mesh.nc', 'culled_mesh.nc', 'culled_graph.info']: + self.add_output_file(file) + self.add_output_file('initial_state.nc', + validate_vars=['layerThickness']) + + def run(self): + """Create the at rest inital condition for the barotropic gyre testcase + """ + config = self.config + logger = self.logger + # domain parameters + lx = config.getfloat("barotropic_gyre", "lx") + ly = config.getfloat("barotropic_gyre", "ly") + resolution = config.getfloat("barotropic_gyre", "resolution") + + # convert cell spacing to meters + dc = resolution * 1e3 + + nx, ny = compute_planar_hex_nx_ny(lx, ly, resolution) + ds_mesh = make_planar_hex_mesh( + nx=nx, ny=ny, dc=dc, nonperiodic_x=True, nonperiodic_y=True) + write_netcdf(ds_mesh, 'base_mesh.nc') + + ds_mesh = cull(ds_mesh, logger=logger) + ds_mesh = convert(ds_mesh, graphInfoFileName='culled_graph.info', + logger=logger) + write_netcdf(ds_mesh, 'culled_mesh.nc') + + # vertical coordinate parameters + bottom_depth = config.getfloat('vertical_grid', 'bottom_depth') + # coriolis parameters + f_0 = config.getfloat("barotropic_gyre", "f_0") + beta = config.getfloat("barotropic_gyre", "beta") + # surface (wind) forcing parameters + tau_0 = config.getfloat("barotropic_gyre", "tau_0") + # horizontal momentum diffusion parameters + nu_2 = config.getfloat("barotropic_gyre", "nu_2") + + # calculate the boundary layer thickness for specified parameters + M = (np.pi * 2) / np.sqrt(3) * (nu_2 / beta)**(1. / 3.) + + # ensure the boundary layer is at least 3 gridcells wide + if M <= 3. * resolution: + raise ValueError("resolution is too coarse to properly resolve the" + "the boundary (i.e. Munk) layer") + + # create a copy of the culled mesh to place the IC's into + ds = ds_mesh.copy() + + # set the ssh initial condition to zero + ds["ssh"] = xr.zeros_like(ds.xCell) + ds['bottomDepth'] = bottom_depth * xr.ones_like(ds.xCell) + + # use polaris framework functions to initialize the vertical coordinate + init_vertical_coord(config, ds) + + # set the coriolis values + for loc in ["Cell", "Edge", "Vertex"]: + ds[f"f{loc}"] = f_0 + beta * ds[f"y{loc}"] + + # set the initial condition for normalVelocity + ds["normalVelocity"] = xr.zeros_like(ds.xEdge).expand_dims( + ["Time", "nVertLevels"], + axis=[0, -1]) + + # write the initial condition file + write_netcdf(ds_mesh, 'initial_state.nc') + + # set the wind stress forcing + ds_forcing = ds_mesh.copy() + # Convert from km to m + ly = ly * 1e3 + ds_forcing["windStressZonal"] = \ + -tau_0 * np.cos(np.pi * (ds.yCell - ds.yCell.min()) / ly) + ds_forcing["windStressMeridional"] = xr.zeros_like(ds.xCell) + write_netcdf(ds_forcing, 'forcing.nc') + + cell_mask = ds.maxLevelCell >= 1 + + plot_horiz_field(ds_forcing, ds_mesh, 'windStressZonal', + 'forcing_wind_stress_zonal.png', cmap='cmo.balance', + show_patch_edges=True, cell_mask=cell_mask, + vmin=-0.1, vmax=0.1) + + +def exact_ssh_solution( + ds, tau_0=0.1, rho=1.e3, g=9.81, nu_2=4.e2, beta=1e-11, f_0=1e-4): + """ + Exact solution to the sea surface height for the linearized Munk layer + experiments. + + Parameters + ---------- + ds : xarray.Dataset + Must contain the fields: `xCell`, `yCell`, .... + tau_0 : Float + .... [N m-2] + rho : Float + Constant ocean density [kg m-3] + g : Float + Gravitational acceleration constant [m s-2] + nu_2 : Float + Viscosity [m2 s-1] + beta : Float + ... [s-1 m-1] + f_0 : Float + ... [s-1] + """ + + xCell = ds.xCell + yCell = ds.yCell + L_x = float(xCell.max() - xCell.min()) + L_y = float(yCell.max() - yCell.min()) + layerThickness = ds.restingThickness.squeeze() + + pi = np.pi + sqrt3 = np.sqrt(3) + delta_m = (nu_2 / beta)**(1. / 3.) + gamma = (sqrt3 * ds.xCell) / (2. * delta_m) + + ssh = (tau_0 / (rho * g * layerThickness)) * (ds.fCell / beta) *\ + (1. - ds.xCell / L_x) * pi * np.sin(pi * ds.yCell / L_y) *\ + (1. - np.exp(-1. * ds.xCell / (2. * delta_m)) * + (np.cos(gamma) + (1. / sqrt3) * np.sin(gamma))) + + return ssh From 4dc06b182bb4b54b85aeb673a6cfb733358bf8f3 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Sun, 3 Nov 2024 18:34:04 -0600 Subject: [PATCH 02/20] Clean-up initial state step --- polaris/ocean/tasks/barotropic_gyre/init.py | 73 ++++++--------------- 1 file changed, 20 insertions(+), 53 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/init.py b/polaris/ocean/tasks/barotropic_gyre/init.py index 53ccfee8e..8de3d1860 100644 --- a/polaris/ocean/tasks/barotropic_gyre/init.py +++ b/polaris/ocean/tasks/barotropic_gyre/init.py @@ -31,7 +31,8 @@ def __init__(self, component, subdir): """ super().__init__(component=component, name='init', indir=subdir) - for file in ['base_mesh.nc', 'culled_mesh.nc', 'culled_graph.info']: + for file in ['base_mesh.nc', 'culled_mesh.nc', 'culled_graph.info', + 'forcing.nc']: self.add_output_file(file) self.add_output_file('initial_state.nc', validate_vars=['layerThickness']) @@ -62,7 +63,7 @@ def run(self): # vertical coordinate parameters bottom_depth = config.getfloat('vertical_grid', 'bottom_depth') # coriolis parameters - f_0 = config.getfloat("barotropic_gyre", "f_0") + f0 = config.getfloat("barotropic_gyre", "f_0") beta = config.getfloat("barotropic_gyre", "beta") # surface (wind) forcing parameters tau_0 = config.getfloat("barotropic_gyre", "tau_0") @@ -89,23 +90,32 @@ def run(self): # set the coriolis values for loc in ["Cell", "Edge", "Vertex"]: - ds[f"f{loc}"] = f_0 + beta * ds[f"y{loc}"] + ds[f"f{loc}"] = f0 + beta * ds[f"y{loc}"] + ds.attrs['nx'] = nx + ds.attrs['ny'] = ny + ds.attrs['dc'] = dc # set the initial condition for normalVelocity - ds["normalVelocity"] = xr.zeros_like(ds.xEdge).expand_dims( - ["Time", "nVertLevels"], - axis=[0, -1]) + normal_velocity, _ = xr.broadcast( + xr.zeros_like(ds_mesh.xEdge), ds.refBottomDepth) + normal_velocity = normal_velocity.transpose('nEdges', 'nVertLevels') + normal_velocity = normal_velocity.expand_dims(dim='Time', axis=0) + ds['normalVelocity'] = normal_velocity # write the initial condition file - write_netcdf(ds_mesh, 'initial_state.nc') + write_netcdf(ds, 'init.nc') # set the wind stress forcing - ds_forcing = ds_mesh.copy() + ds_forcing = xr.Dataset() # Convert from km to m ly = ly * 1e3 + wind_stress_zonal = -tau_0 * \ + np.cos(np.pi * (ds.yCell - ds.yCell.min()) / ly) + wind_stress_meridional = xr.zeros_like(ds.xCell) ds_forcing["windStressZonal"] = \ - -tau_0 * np.cos(np.pi * (ds.yCell - ds.yCell.min()) / ly) - ds_forcing["windStressMeridional"] = xr.zeros_like(ds.xCell) + wind_stress_zonal.expand_dims(dim='Time', axis=0) + ds_forcing["windStressMeridional"] = \ + wind_stress_meridional.expand_dims(dim='Time', axis=0) write_netcdf(ds_forcing, 'forcing.nc') cell_mask = ds.maxLevelCell >= 1 @@ -114,46 +124,3 @@ def run(self): 'forcing_wind_stress_zonal.png', cmap='cmo.balance', show_patch_edges=True, cell_mask=cell_mask, vmin=-0.1, vmax=0.1) - - -def exact_ssh_solution( - ds, tau_0=0.1, rho=1.e3, g=9.81, nu_2=4.e2, beta=1e-11, f_0=1e-4): - """ - Exact solution to the sea surface height for the linearized Munk layer - experiments. - - Parameters - ---------- - ds : xarray.Dataset - Must contain the fields: `xCell`, `yCell`, .... - tau_0 : Float - .... [N m-2] - rho : Float - Constant ocean density [kg m-3] - g : Float - Gravitational acceleration constant [m s-2] - nu_2 : Float - Viscosity [m2 s-1] - beta : Float - ... [s-1 m-1] - f_0 : Float - ... [s-1] - """ - - xCell = ds.xCell - yCell = ds.yCell - L_x = float(xCell.max() - xCell.min()) - L_y = float(yCell.max() - yCell.min()) - layerThickness = ds.restingThickness.squeeze() - - pi = np.pi - sqrt3 = np.sqrt(3) - delta_m = (nu_2 / beta)**(1. / 3.) - gamma = (sqrt3 * ds.xCell) / (2. * delta_m) - - ssh = (tau_0 / (rho * g * layerThickness)) * (ds.fCell / beta) *\ - (1. - ds.xCell / L_x) * pi * np.sin(pi * ds.yCell / L_y) *\ - (1. - np.exp(-1. * ds.xCell / (2. * delta_m)) * - (np.cos(gamma) + (1. / sqrt3) * np.sin(gamma))) - - return ssh From a4e709f65e3e69af49708587a57e174c0481058c Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Wed, 30 Oct 2024 17:08:08 -0500 Subject: [PATCH 03/20] Move parameter checks to init step setup --- polaris/ocean/tasks/barotropic_gyre/init.py | 44 +++++++++++++++------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/init.py b/polaris/ocean/tasks/barotropic_gyre/init.py index 8de3d1860..8b11ad39b 100644 --- a/polaris/ocean/tasks/barotropic_gyre/init.py +++ b/polaris/ocean/tasks/barotropic_gyre/init.py @@ -6,6 +6,7 @@ from polaris import Step from polaris.mesh.planar import compute_planar_hex_nx_ny +from polaris.ocean.tasks.barotropic_gyre.resources import compute_max_time_step from polaris.ocean.vertical import init_vertical_coord from polaris.viz import plot_horiz_field @@ -34,8 +35,37 @@ def __init__(self, component, subdir): for file in ['base_mesh.nc', 'culled_mesh.nc', 'culled_graph.info', 'forcing.nc']: self.add_output_file(file) - self.add_output_file('initial_state.nc', - validate_vars=['layerThickness']) + self.add_output_file('init.nc', validate_vars=['layerThickness']) + + def setup(self): + + super().setup() + + config = self.config + + resolution = config.getfloat("barotropic_gyre", "resolution") + # coriolis parameter + beta = config.getfloat("barotropic_gyre", "beta") + # laplacian horizontal viscosity + nu_2 = config.getfloat("barotropic_gyre", "nu_2") + + # calculate the boundary layer thickness for specified parameters + M = (np.pi * 2) / np.sqrt(3) * (nu_2 / beta)**(1. / 3.) + + # ensure the boundary layer is at least 3 gridcells wide + if M <= 3. * resolution: # TODO should resolution be * 1.e3? + raise ValueError("resolution is too coarse to properly resolve the" + "the boundary (i.e. Munk) layer") + + # check whether viscosity suitable for stability + stability_parameter_max = 0.6 + dt_max = compute_max_time_step(config) + dt = dt_max / 3. + nu_2_max = stability_parameter_max * (resolution * 1.e3)**2. / \ + (8 * dt) + if nu_2 > nu_2_max: + raise ValueError(f'Laplacian viscosity cannot be set to {nu_2}; ' + f'maximum value is {nu_2_max}') def run(self): """Create the at rest inital condition for the barotropic gyre testcase @@ -67,16 +97,6 @@ def run(self): beta = config.getfloat("barotropic_gyre", "beta") # surface (wind) forcing parameters tau_0 = config.getfloat("barotropic_gyre", "tau_0") - # horizontal momentum diffusion parameters - nu_2 = config.getfloat("barotropic_gyre", "nu_2") - - # calculate the boundary layer thickness for specified parameters - M = (np.pi * 2) / np.sqrt(3) * (nu_2 / beta)**(1. / 3.) - - # ensure the boundary layer is at least 3 gridcells wide - if M <= 3. * resolution: - raise ValueError("resolution is too coarse to properly resolve the" - "the boundary (i.e. Munk) layer") # create a copy of the culled mesh to place the IC's into ds = ds_mesh.copy() From 21d8a73b5a8fef579de2f6f15d4e8bdf03de5da5 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Mon, 21 Oct 2024 16:52:47 -0500 Subject: [PATCH 04/20] Add barotropic_gyre task --- polaris/ocean/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/polaris/ocean/__init__.py b/polaris/ocean/__init__.py index c09979dc5..966f71ac8 100644 --- a/polaris/ocean/__init__.py +++ b/polaris/ocean/__init__.py @@ -1,5 +1,6 @@ from polaris import Component from polaris.ocean.tasks.baroclinic_channel import add_baroclinic_channel_tasks +from polaris.ocean.tasks.barotropic_gyre import add_barotropic_gyre_tasks from polaris.ocean.tasks.cosine_bell import add_cosine_bell_tasks from polaris.ocean.tasks.geostrophic import add_geostrophic_tasks from polaris.ocean.tasks.ice_shelf_2d import add_ice_shelf_2d_tasks @@ -28,6 +29,7 @@ def __init__(self): # planar: please keep these in alphabetical order add_baroclinic_channel_tasks(component=self) + add_barotropic_gyre_tasks(component=self) add_ice_shelf_2d_tasks(component=self) add_inertial_gravity_wave_tasks(component=self) add_internal_wave_tasks(component=self) From 3ce7b1de3f1e46f3b8cbc1ce120aee878a0a5d8d Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Mon, 21 Oct 2024 16:53:03 -0500 Subject: [PATCH 05/20] Add config file --- .../ocean/tasks/barotropic_gyre/__init__.py | 4 ++ .../tasks/barotropic_gyre/barotropic_gyre.cfg | 45 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 polaris/ocean/tasks/barotropic_gyre/barotropic_gyre.cfg diff --git a/polaris/ocean/tasks/barotropic_gyre/__init__.py b/polaris/ocean/tasks/barotropic_gyre/__init__.py index f2873406c..a8419804c 100644 --- a/polaris/ocean/tasks/barotropic_gyre/__init__.py +++ b/polaris/ocean/tasks/barotropic_gyre/__init__.py @@ -33,3 +33,7 @@ def __init__(self, component): init_step = Init(component=component, subdir=self.subdir) self.add_step(init_step) + + config_filename = 'barotropic_gyre.cfg' + self.config.add_from_package('polaris.ocean.tasks.barotropic_gyre', + config_filename) diff --git a/polaris/ocean/tasks/barotropic_gyre/barotropic_gyre.cfg b/polaris/ocean/tasks/barotropic_gyre/barotropic_gyre.cfg new file mode 100644 index 000000000..4d3388ee5 --- /dev/null +++ b/polaris/ocean/tasks/barotropic_gyre/barotropic_gyre.cfg @@ -0,0 +1,45 @@ +[barotropic_gyre] + +# distance in kilometers between cell centers +resolution = 20 + +# Longituidinal domain length in kilometers +lx = 1200 + +# Latitudinal domain length in kilometers +ly = 1200 + +# Maximum amplitude of the zonal wind stress [N m-2] +tau_0 = 0.1 + +# Horizontal visocity [m2 s-1] +nu_2 = 4e2 + +# [s-1 m-1] +beta = 10e-11 + +# [s-1] +f_0 = 10e-4 + +# homogenous fluid density [kg m-3] +rho_0 = 1000 + +[vertical_grid] + +# The type of vertical grid +grid_type = uniform + +# Number of vertical levels +vert_levels = 1 + +# Depth of the bottom of the ocean +bottom_depth = 5000.0 + +# The type of vertical coordinate (e.g. z-level, z-star) +coord_type = z-star + +# Whether to use "partial" or "full", or "None" to not alter the topography +partial_cell_type = None + +# The minimum fraction of a layer for partial cells +min_pc_fraction = 0.1 From ba62f331cbf8fcbb90ebbdb640fd186c6979a422 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Wed, 30 Oct 2024 17:05:31 -0500 Subject: [PATCH 06/20] Add forward step --- .../ocean/tasks/barotropic_gyre/__init__.py | 9 +- .../ocean/tasks/barotropic_gyre/forward.py | 154 ++++++++++++++++++ .../ocean/tasks/barotropic_gyre/forward.yaml | 50 ++++++ .../ocean/tasks/barotropic_gyre/resources.py | 9 + 4 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 polaris/ocean/tasks/barotropic_gyre/forward.py create mode 100644 polaris/ocean/tasks/barotropic_gyre/forward.yaml create mode 100644 polaris/ocean/tasks/barotropic_gyre/resources.py diff --git a/polaris/ocean/tasks/barotropic_gyre/__init__.py b/polaris/ocean/tasks/barotropic_gyre/__init__.py index a8419804c..99bc58dca 100644 --- a/polaris/ocean/tasks/barotropic_gyre/__init__.py +++ b/polaris/ocean/tasks/barotropic_gyre/__init__.py @@ -1,5 +1,6 @@ from polaris import Step, Task from polaris.config import PolarisConfigParser +from polaris.ocean.tasks.barotropic_gyre.forward import Forward from polaris.ocean.tasks.barotropic_gyre.init import Init @@ -30,10 +31,14 @@ def __init__(self, component): name = 'barotropic_gyre' subdir = f'planar/{name}' super().__init__(component=component, name=name, subdir=subdir) - init_step = Init(component=component, - subdir=self.subdir) + init_step = Init(component=component, subdir=self.subdir) self.add_step(init_step) config_filename = 'barotropic_gyre.cfg' self.config.add_from_package('polaris.ocean.tasks.barotropic_gyre', config_filename) + self.add_step( + Forward(component=component, indir=self.subdir, ntasks=None, + min_tasks=None, openmp_threads=1, + run_time_steps=3, + graph_target=f'{init_step.path}/culled_graph.info')) diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.py b/polaris/ocean/tasks/barotropic_gyre/forward.py new file mode 100644 index 000000000..1a7b80872 --- /dev/null +++ b/polaris/ocean/tasks/barotropic_gyre/forward.py @@ -0,0 +1,154 @@ +import time +from math import ceil + +from polaris.mesh.planar import compute_planar_hex_nx_ny +from polaris.ocean.model import OceanModelStep, get_time_interval_string +from polaris.ocean.tasks.barotropic_gyre.resources import compute_max_time_step + + +class Forward(OceanModelStep): + """ + A step for performing forward ocean component runs as part of barotropic + gyre tasks. + + Attributes + ---------- + resolution : float + The resolution of the task in km + + dt : float + The model time step in seconds + + run_time_steps : int or None + Number of time steps to run for + """ + def __init__(self, component, name='forward', subdir=None, + indir=None, ntasks=None, min_tasks=None, openmp_threads=1, + nu=None, run_time_steps=None, graph_target='graph.info'): + """ + Create a new task + + Parameters + ---------- + component : polaris.Component + The component the step belongs to + + name : str + the name of the task + + subdir : str, optional + the subdirectory for the step. If neither this nor ``indir`` + are provided, the directory is the ``name`` + + indir : str, optional + the directory the step is in, to which ``name`` will be appended + + ntasks : int, optional + the number of tasks the step would ideally use. If fewer tasks + are available on the system, the step will run on all available + tasks as long as this is not below ``min_tasks`` + + min_tasks : int, optional + the number of tasks the step requires. If the system has fewer + than this number of tasks, the step will fail + + openmp_threads : int, optional + the number of OpenMP threads the step will use + + run_time_steps : int or None + Number of time steps to run for + + graph_target : str, optional + The graph file name (relative to the base work directory). + If none, it will be created. + """ + self.run_time_steps = run_time_steps + super().__init__(component=component, name=name, subdir=subdir, + indir=indir, ntasks=ntasks, min_tasks=min_tasks, + openmp_threads=openmp_threads, + graph_target=graph_target) + + # make sure output is double precision + self.add_yaml_file('polaris.ocean.config', 'output.yaml') + # TODO if model == 'mpas-ocean': + self.add_yaml_file('polaris.ocean.config', 'single_layer.yaml') + + self.add_input_file(filename='init.nc', + target='../init/init.nc') + self.add_input_file(filename='forcing.nc', + target='../init/forcing.nc') + + self.add_output_file( + filename='output.nc', + validate_vars=['temperature', 'salinity', 'layerThickness', + 'normalVelocity']) + + self.package = 'polaris.ocean.tasks.barotropic_gyre' + self.yaml_filename = 'forward.yaml' + + def compute_cell_count(self): + """ + Compute the approximate number of cells in the mesh, used to constrain + resources + + Returns + ------- + cell_count : int or None + The approximate number of cells in the mesh + """ + section = self.config['barotropic_gyre'] + lx = section.getfloat('lx') + resolution = section.getfloat('resolution') + ly = section.getfloat('ly') + nx, ny = compute_planar_hex_nx_ny(lx, ly, resolution) + cell_count = nx * ny + return cell_count + + def dynamic_model_config(self, at_setup): + """ + Add model config options, namelist, streams and yaml files using config + options or template replacements that need to be set both during step + setup and at runtime + + Parameters + ---------- + at_setup : bool + Whether this method is being run during setup of the step, as + opposed to at runtime + """ + super().dynamic_model_config(at_setup) + + config = self.config + + nu = config.getfloat("barotropic_gyre", "nu_2") + rho_0 = config.getfloat("barotropic_gyre", "rho_0") + + dt_max = compute_max_time_step(config) + dt = dt_max / 3. + dt_str = get_time_interval_string(seconds=dt) + + options = {'config_dt': dt_str, + 'config_density0': rho_0} + self.add_model_config_options(options=options, + config_model='mpas-ocean') + + if self.run_time_steps is not None: + run_duration = ceil(self.run_time_steps * dt) + stop_time_str = time.strftime('0001-01-01_%H:%M:%S', + time.gmtime(run_duration)) + output_interval_str = time.strftime('0000_%H:%M:%S', + time.gmtime(run_duration)) + else: + stop_time_str = time.strftime('0004-01-01_00:00:00') + output_interval_str = time.strftime('0000-01-00_00:00:00') + + replacements = dict( + dt=dt_str, + stop_time=stop_time_str, + output_interval=output_interval_str, + nu=f'{nu:02g}', + ) + + # make sure output is double precision + self.add_yaml_file(self.package, self.yaml_filename, + template_replacements=replacements) diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.yaml b/polaris/ocean/tasks/barotropic_gyre/forward.yaml new file mode 100644 index 000000000..5c04e0af4 --- /dev/null +++ b/polaris/ocean/tasks/barotropic_gyre/forward.yaml @@ -0,0 +1,50 @@ +ocean: + time_management: + config_stop_time: {{ stop_time }} + config_run_duration: none + time_integration: + config_dt: {{ dt }} + config_time_integrator: RK4 + hmix_del2: + config_use_mom_del2: true + config_mom_del2: {{ nu }} + streams: + mesh: + filename_template: init.nc + input: + filename_template: init.nc + forcing: + filename_template: forcing.nc + input_interval: initial_only + type: input + contents: + - windStressZonal + - windStressMeridional + restart: {} + output: + type: output + filename_template: output.nc + output_interval: {{ output_interval }} + clobber_mode: truncate + contents: + - xtime + - normalVelocity + - layerThickness + - ssh + +mpas-ocean: + advection: + config_thickness_flux_type: constant + forcing: + config_use_bulk_wind_stress: true + debug: + config_disable_vel_hadv: true + config_disable_vel_hmix: false + config_disable_tr_all_tend: true + +Omega: + Tendencies: + VelDiffTendencyEnable: true + VelHyperDiffTendencyEnable: false + Dimension: + NVertLevels: 1 diff --git a/polaris/ocean/tasks/barotropic_gyre/resources.py b/polaris/ocean/tasks/barotropic_gyre/resources.py new file mode 100644 index 000000000..9e8ff03b0 --- /dev/null +++ b/polaris/ocean/tasks/barotropic_gyre/resources.py @@ -0,0 +1,9 @@ +def compute_max_time_step(config): + u_max = 1 # m/s + stability_parameter_max = 0.5 + resolution = config.getfloat('barotropic_gyre', 'resolution') + f_0 = config.getfloat("barotropic_gyre", "f_0") + dt_max = min(stability_parameter_max * resolution * 1e3 / + (2 * u_max), + stability_parameter_max / f_0) + return dt_max From cba0fa40f7ecfc35eee10009c792dfe72c75e908 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Fri, 1 Nov 2024 19:05:35 -0500 Subject: [PATCH 07/20] Reorg task and steps --- .../ocean/tasks/barotropic_gyre/__init__.py | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/__init__.py b/polaris/ocean/tasks/barotropic_gyre/__init__.py index 99bc58dca..d44b0ff99 100644 --- a/polaris/ocean/tasks/barotropic_gyre/__init__.py +++ b/polaris/ocean/tasks/barotropic_gyre/__init__.py @@ -11,7 +11,15 @@ def add_barotropic_gyre_tasks(component): component : polaris.ocean.Ocean the ocean component that the task will be added to """ - component.add_task(BarotropicGyre(component=component)) + test_name = 'default' + subdir = f'planar/barotropic_gyre/{test_name}' + config_filename = 'barotropic_gyre.cfg' + config = PolarisConfigParser(filepath=f'{subdir}/{config_filename}') + config.add_from_package('polaris.ocean.tasks.barotropic_gyre', + config_filename) + component.add_task(BarotropicGyre(component=component, + test_name=test_name, + config=config)) class BarotropicGyre(Task): @@ -19,7 +27,7 @@ class BarotropicGyre(Task): The convergence test case for inertial gravity waves """ - def __init__(self, component): + def __init__(self, component, test_name, config, smoke_test=False): """ Create the test case @@ -28,17 +36,27 @@ def __init__(self, component): component : polaris.ocean.Ocean The ocean component that this task belongs to """ - name = 'barotropic_gyre' - subdir = f'planar/{name}' + group_name = 'barotropic_gyre' + name = f'{group_name}_{test_name}' + subdir = f'planar/{group_name}/{test_name}' super().__init__(component=component, name=name, subdir=subdir) - init_step = Init(component=component, subdir=self.subdir) - self.add_step(init_step) config_filename = 'barotropic_gyre.cfg' - self.config.add_from_package('polaris.ocean.tasks.barotropic_gyre', - config_filename) - self.add_step( - Forward(component=component, indir=self.subdir, ntasks=None, - min_tasks=None, openmp_threads=1, - run_time_steps=3, - graph_target=f'{init_step.path}/culled_graph.info')) + + init = Init(component=component, subdir=subdir) + init.set_shared_config(config, link=config_filename) + self.add_step(init) + + forward = Forward(component=component, indir=self.subdir, ntasks=None, + min_tasks=None, openmp_threads=1, + name='short_forward', run_time_steps=3, + graph_target=f'{init.path}/culled_graph.info') + forward.set_shared_config(config, link=config_filename) + self.add_step(forward) + + forward = Forward(component=component, indir=self.subdir, ntasks=None, + min_tasks=None, openmp_threads=1, + name='long_forward', + graph_target=f'{init.path}/culled_graph.info') + forward.set_shared_config(config, link=config_filename) + self.add_step(forward, run_by_default=False) From 542e74d8c718c220e1c000fdf9409456f636b4ad Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Mon, 4 Nov 2024 17:49:57 -0600 Subject: [PATCH 08/20] Add analysis step, combined with viz --- .../ocean/tasks/barotropic_gyre/__init__.py | 5 + .../ocean/tasks/barotropic_gyre/analysis.py | 166 ++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 polaris/ocean/tasks/barotropic_gyre/analysis.py diff --git a/polaris/ocean/tasks/barotropic_gyre/__init__.py b/polaris/ocean/tasks/barotropic_gyre/__init__.py index d44b0ff99..d4935af77 100644 --- a/polaris/ocean/tasks/barotropic_gyre/__init__.py +++ b/polaris/ocean/tasks/barotropic_gyre/__init__.py @@ -1,5 +1,6 @@ from polaris import Step, Task from polaris.config import PolarisConfigParser +from polaris.ocean.tasks.barotropic_gyre.analysis import Analysis from polaris.ocean.tasks.barotropic_gyre.forward import Forward from polaris.ocean.tasks.barotropic_gyre.init import Init @@ -60,3 +61,7 @@ def __init__(self, component, test_name, config, smoke_test=False): graph_target=f'{init.path}/culled_graph.info') forward.set_shared_config(config, link=config_filename) self.add_step(forward, run_by_default=False) + + analysis = Analysis(component=component, indir=self.subdir) + analysis.set_shared_config(config, link=config_filename) + self.add_step(analysis, run_by_default=False) diff --git a/polaris/ocean/tasks/barotropic_gyre/analysis.py b/polaris/ocean/tasks/barotropic_gyre/analysis.py new file mode 100644 index 000000000..47ec284cb --- /dev/null +++ b/polaris/ocean/tasks/barotropic_gyre/analysis.py @@ -0,0 +1,166 @@ +from math import pi + +import cmocean # noqa: F401 +import matplotlib.pyplot as plt +import numpy as np +import xarray as xr +from mpas_tools.cime.constants import constants + +from polaris.mpas import area_for_field +from polaris.ocean.model import OceanIOStep +from polaris.viz import plot_horiz_field, use_mplstyle + + +class Analysis(OceanIOStep): + """ + A step for analysing the output from the barotropic gyre + test case + """ + + def __init__(self, component, indir): + """ + Create the step + + Parameters + ---------- + component : polaris.Component + The component the step belongs to + + indir : str + the directory the step is in, to which ``name`` will be appended + """ + super().__init__(component=component, name='analysis', indir=indir) + self.add_input_file( + filename='mesh.nc', + target='../init/culled_mesh.nc') + self.add_input_file( + filename='init.nc', + target='../init/init.nc') + self.add_input_file( + filename='output.nc', + target='../long_forward/output.nc') + + def run(self): + + ds_mesh = xr.open_dataset('mesh.nc') + ds_init = xr.open_dataset('init.nc') + ds = xr.open_dataset('output.nc') + + error = self.compute_error(ds_mesh, ds, variable_name='ssh') + print(f'L2 error norm for SSH field: {error:1.2e}') + + field_mpas = ds.ssh.isel(Time=-1) + field_exact = self.exact_solution(ds_mesh, self.config) + ds['ssh_exact'] = field_exact + ds['ssh_error'] = field_mpas - field_exact + eta0 = np.max(np.abs(ds.ssh.values)) + error_range = np.max(np.abs(ds.ssh_error.values)) + + use_mplstyle() + fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 2)) + cell_mask = ds_init.maxLevelCell >= 1 + patches, patch_mask = plot_horiz_field( + ds, ds_mesh, 'ssh', ax=axes[0], cmap='cmo.balance', + t_index=ds.sizes["Time"] - 1, vmin=-eta0, vmax=eta0, + cmap_title="SSH", cell_mask=cell_mask) + plot_horiz_field(ds, ds_mesh, 'ssh_exact', ax=axes[1], + cmap='cmo.balance', + vmin=-eta0, vmax=eta0, cmap_title="SSH", + patches=patches, patch_mask=patch_mask) + plot_horiz_field(ds, ds_mesh, 'ssh_error', ax=axes[2], + cmap='cmo.balance', cmap_title="dSSH", + vmin=-error_range, vmax=error_range, + patches=patches, patch_mask=patch_mask) + + axes[0].set_title('Numerical solution') + axes[1].set_title('Analytical solution') + axes[2].set_title('Error (Numerical - Analytical)') + fig.savefig('comparison.png', bbox_inches='tight', pad_inches=0.1) + + def compute_error(self, ds_mesh, ds_out, variable_name, error_type='l2'): + """ + Compute the error for a given resolution + + Parameters + ---------- + ds_mesh: xarray.Dataset + the mesh dataset + + ds_out: xarray.Dataset + the output dataset + + variable_name : str + The variable name of which to evaluate error with respect to the + exact solution + + zidx : int, optional + The z index to use to slice the field given by variable name + + error_type: {'l2', 'inf'}, optional + The type of error to compute + + Returns + ------- + error : float + The error of the variable given by variable_name + """ + norm_type = {'l2': None, 'inf': np.inf} + + field_exact = self.exact_solution(ds_mesh, self.config) + ds_out = ds_out.isel(Time=-1) + field_mpas = ds_out[variable_name] + diff = field_exact - field_mpas + + # Only the L2 norm is area-weighted + if error_type == 'l2': + area = area_for_field(ds_mesh, diff) + field_exact = field_exact * area + diff = diff * area + error = np.linalg.norm(diff, ord=norm_type[error_type]) + + # Normalize the error norm by the vector norm of the exact solution + den = np.linalg.norm(field_exact, ord=norm_type[error_type]) + error = np.divide(error, den) + + return error + + def exact_solution(self, ds_mesh, config): + """ + Exact solution to the sea surface height for the linearized Munk layer + experiments. + + Parameters + ---------- + ds_mesh : xarray.Dataset + Must contain the fields: `xCell`, `yCell`, .... + """ + + x = ds_mesh.xCell + x = x - x.min() + y = ds_mesh.yCell + y = y - y.min() + L_x = float(x.max() - x.min()) + L_y = float(y.max() - y.min()) + # vertical coordinate parameters + H = config.getfloat('vertical_grid', 'bottom_depth') + # coriolis parameters + f_0 = config.getfloat("barotropic_gyre", "f_0") + beta = config.getfloat("barotropic_gyre", "beta") + # surface (wind) forcing parameters + tau_0 = config.getfloat("barotropic_gyre", "tau_0") + # Laplacian viscosity + nu = config.getfloat("barotropic_gyre", "nu_2") + + # TODO get gravity and rho_sw + rho_0 = config.getfloat("barotropic_gyre", "rho_0") + g = constants['SHR_CONST_G'] + f = f_0 + beta * y + delta_m = (nu / beta)**(1. / 3.) + gamma = (np.sqrt(3.) * x) / (2. * delta_m) + + ssh = ((tau_0 / (rho_0 * g * H)) * f / beta * + (1. - x / L_x) * pi * np.sin(pi * y / L_y) * + (1. - np.exp(-1. * x / (2. * delta_m)) * + (np.cos(gamma) + (1. / np.sqrt(3.)) * np.sin(gamma)))) + + return ssh From 2a73c5c8b8645109389d9d4cc286403c7488dda2 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Wed, 6 Nov 2024 16:12:25 -0600 Subject: [PATCH 09/20] Update analysis and viz --- .../ocean/tasks/barotropic_gyre/__init__.py | 3 +- .../ocean/tasks/barotropic_gyre/analysis.py | 134 ++++++++++-------- 2 files changed, 80 insertions(+), 57 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/__init__.py b/polaris/ocean/tasks/barotropic_gyre/__init__.py index d4935af77..afb617fc1 100644 --- a/polaris/ocean/tasks/barotropic_gyre/__init__.py +++ b/polaris/ocean/tasks/barotropic_gyre/__init__.py @@ -62,6 +62,7 @@ def __init__(self, component, test_name, config, smoke_test=False): forward.set_shared_config(config, link=config_filename) self.add_step(forward, run_by_default=False) - analysis = Analysis(component=component, indir=self.subdir) + analysis = Analysis(component=component, indir=self.subdir, + boundary_condition='free slip') analysis.set_shared_config(config, link=config_filename) self.add_step(analysis, run_by_default=False) diff --git a/polaris/ocean/tasks/barotropic_gyre/analysis.py b/polaris/ocean/tasks/barotropic_gyre/analysis.py index 47ec284cb..430638c77 100644 --- a/polaris/ocean/tasks/barotropic_gyre/analysis.py +++ b/polaris/ocean/tasks/barotropic_gyre/analysis.py @@ -4,11 +4,11 @@ import matplotlib.pyplot as plt import numpy as np import xarray as xr -from mpas_tools.cime.constants import constants +from mpas_tools.ocean import compute_barotropic_streamfunction from polaris.mpas import area_for_field from polaris.ocean.model import OceanIOStep -from polaris.viz import plot_horiz_field, use_mplstyle +from polaris.viz import use_mplstyle class Analysis(OceanIOStep): @@ -17,7 +17,7 @@ class Analysis(OceanIOStep): test case """ - def __init__(self, component, indir): + def __init__(self, component, indir, boundary_condition='free slip'): """ Create the step @@ -39,6 +39,7 @@ def __init__(self, component, indir): self.add_input_file( filename='output.nc', target='../long_forward/output.nc') + self.boundary_condition = boundary_condition def run(self): @@ -46,38 +47,55 @@ def run(self): ds_init = xr.open_dataset('init.nc') ds = xr.open_dataset('output.nc') - error = self.compute_error(ds_mesh, ds, variable_name='ssh') - print(f'L2 error norm for SSH field: {error:1.2e}') + field_mpas = compute_barotropic_streamfunction( + ds_init.isel(Time=0), ds, prefix='', time_index=-1) + field_exact = self.exact_solution( + ds_mesh, self.config, loc='Vertex', + boundary_condition=self.boundary_condition) - field_mpas = ds.ssh.isel(Time=-1) - field_exact = self.exact_solution(ds_mesh, self.config) - ds['ssh_exact'] = field_exact - ds['ssh_error'] = field_mpas - field_exact - eta0 = np.max(np.abs(ds.ssh.values)) - error_range = np.max(np.abs(ds.ssh_error.values)) + ds['psi'] = field_mpas + ds['psi_exact'] = field_exact + ds['psi_error'] = field_mpas - field_exact + + error = self.compute_error(ds_mesh, ds, variable_name='psi', + boundary_condition=self.boundary_condition) + print(f'L2 error norm for {self.boundary_condition} bsf: {error:1.2e}') use_mplstyle() - fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 2)) - cell_mask = ds_init.maxLevelCell >= 1 - patches, patch_mask = plot_horiz_field( - ds, ds_mesh, 'ssh', ax=axes[0], cmap='cmo.balance', - t_index=ds.sizes["Time"] - 1, vmin=-eta0, vmax=eta0, - cmap_title="SSH", cell_mask=cell_mask) - plot_horiz_field(ds, ds_mesh, 'ssh_exact', ax=axes[1], - cmap='cmo.balance', - vmin=-eta0, vmax=eta0, cmap_title="SSH", - patches=patches, patch_mask=patch_mask) - plot_horiz_field(ds, ds_mesh, 'ssh_error', ax=axes[2], - cmap='cmo.balance', cmap_title="dSSH", - vmin=-error_range, vmax=error_range, - patches=patches, patch_mask=patch_mask) - - axes[0].set_title('Numerical solution') - axes[1].set_title('Analytical solution') - axes[2].set_title('Error (Numerical - Analytical)') + pad = 20 + fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12, 2)) + x0 = ds_mesh.xEdge.min() + y0 = ds_mesh.yEdge.min() + x_vertex = (ds_mesh['xVertex'] - x0) * 1.e-3 + y_vertex = (ds_mesh['yVertex'] - y0) * 1.e-3 + eta0 = max(np.max(np.abs(field_exact.values)), + np.max(np.abs(field_mpas.values))) + s = axes[0].tricontourf(x_vertex, y_vertex, field_mpas, 10, + vmin=-eta0, vmax=eta0, cmap='cmo.balance') + cbar = fig.colorbar(s, ax=axes[0]) + cbar.ax.set_title(r'$\psi$') + s = axes[1].tricontourf(x_vertex, y_vertex, field_exact, 10, + vmin=-eta0, vmax=eta0, cmap='cmo.balance') + cbar = fig.colorbar(s, ax=axes[1]) + cbar.ax.set_title(r'$\psi$') + eta0 = np.max(np.abs(field_mpas.values - field_exact.values)) + s = axes[2].tricontourf(x_vertex, y_vertex, field_mpas - field_exact, + 10, vmin=-eta0, vmax=eta0, cmap='cmo.balance') + cbar = fig.colorbar(s, ax=axes[2]) + cbar.ax.set_title(r'$d\psi$') + axes[0].set_title('Numerical solution', pad=pad) + axes[0].set_ylabel('y (km)') + axes[0].set_xlabel('x (km)') + axes[1].set_title('Analytical solution', pad=pad) + axes[1].set_xlabel('x (km)') + axes[2].set_title('Error (Numerical - Analytical)', pad=pad) + axes[2].set_xlabel('x (km)') + for ax in axes: + ax.set_aspect('equal') fig.savefig('comparison.png', bbox_inches='tight', pad_inches=0.1) - def compute_error(self, ds_mesh, ds_out, variable_name, error_type='l2'): + def compute_error(self, ds_mesh, ds_out, variable_name, error_type='l2', + loc='Vertex', boundary_condition='free slip'): """ Compute the error for a given resolution @@ -106,7 +124,9 @@ def compute_error(self, ds_mesh, ds_out, variable_name, error_type='l2'): """ norm_type = {'l2': None, 'inf': np.inf} - field_exact = self.exact_solution(ds_mesh, self.config) + field_exact = self.exact_solution( + ds_mesh, self.config, loc=loc, + boundary_condition=self.boundary_condition) ds_out = ds_out.isel(Time=-1) field_mpas = ds_out[variable_name] diff = field_exact - field_mpas @@ -124,7 +144,8 @@ def compute_error(self, ds_mesh, ds_out, variable_name, error_type='l2'): return error - def exact_solution(self, ds_mesh, config): + def exact_solution(self, ds_mesh, config, loc='Cell', + boundary_condition='free slip'): """ Exact solution to the sea surface height for the linearized Munk layer experiments. @@ -132,35 +153,36 @@ def exact_solution(self, ds_mesh, config): Parameters ---------- ds_mesh : xarray.Dataset - Must contain the fields: `xCell`, `yCell`, .... + Must contain the fields: f'x{loc}', f'y{loc}' """ - x = ds_mesh.xCell - x = x - x.min() - y = ds_mesh.yCell - y = y - y.min() + x = ds_mesh[f'x{loc}'] + x = x - ds_mesh.xEdge.min() + y = ds_mesh[f'y{loc}'] + y = y - ds_mesh.yEdge.min() L_x = float(x.max() - x.min()) L_y = float(y.max() - y.min()) - # vertical coordinate parameters - H = config.getfloat('vertical_grid', 'bottom_depth') - # coriolis parameters - f_0 = config.getfloat("barotropic_gyre", "f_0") + + # df/dy where f is coriolis parameter beta = config.getfloat("barotropic_gyre", "beta") - # surface (wind) forcing parameters - tau_0 = config.getfloat("barotropic_gyre", "tau_0") # Laplacian viscosity nu = config.getfloat("barotropic_gyre", "nu_2") - # TODO get gravity and rho_sw - rho_0 = config.getfloat("barotropic_gyre", "rho_0") - g = constants['SHR_CONST_G'] - f = f_0 + beta * y - delta_m = (nu / beta)**(1. / 3.) - gamma = (np.sqrt(3.) * x) / (2. * delta_m) - - ssh = ((tau_0 / (rho_0 * g * H)) * f / beta * - (1. - x / L_x) * pi * np.sin(pi * y / L_y) * - (1. - np.exp(-1. * x / (2. * delta_m)) * - (np.cos(gamma) + (1. / np.sqrt(3.)) * np.sin(gamma)))) - - return ssh + # Compute some non-dimensional numbers + delta_m = (nu / (beta * L_y**3.))**(1. / 3.) + gamma = (np.sqrt(3.) * x) / (2. * delta_m * L_x) + + if boundary_condition == 'no slip': + psi = (pi * np.sin(pi * y / L_y) * + (1. - (x / L_x) - + np.exp(-x / (2. * delta_m * L_x)) * + (np.cos(gamma) + + ((1. - 2 * delta_m) / np.sqrt(3.)) * np.sin(gamma)) + + delta_m * np.exp(((x / L_x) - 1) / delta_m))) + + elif boundary_condition == 'free slip': + psi = (pi * (1. - x / L_x) * np.sin(pi * y / L_y) * + (1. - + np.exp(-x / (2. * delta_m * L_x)) * + (np.cos(gamma) + (1. / np.sqrt(3.)) * np.sin(gamma)))) + return psi From affc7a17698a6ee5d8db017ce5328e647fdce8d9 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Thu, 7 Nov 2024 10:09:54 -0600 Subject: [PATCH 10/20] Only add single layer options to MPAS-Ocean --- polaris/ocean/tasks/barotropic_gyre/forward.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.py b/polaris/ocean/tasks/barotropic_gyre/forward.py index 1a7b80872..1f0123a9d 100644 --- a/polaris/ocean/tasks/barotropic_gyre/forward.py +++ b/polaris/ocean/tasks/barotropic_gyre/forward.py @@ -70,8 +70,6 @@ def __init__(self, component, name='forward', subdir=None, # make sure output is double precision self.add_yaml_file('polaris.ocean.config', 'output.yaml') - # TODO if model == 'mpas-ocean': - self.add_yaml_file('polaris.ocean.config', 'single_layer.yaml') self.add_input_file(filename='init.nc', target='../init/init.nc') @@ -120,6 +118,10 @@ def dynamic_model_config(self, at_setup): config = self.config + model = config.get('ocean', 'model') + if model == 'mpas-ocean': + self.add_yaml_file('polaris.ocean.config', 'single_layer.yaml') + nu = config.getfloat("barotropic_gyre", "nu_2") rho_0 = config.getfloat("barotropic_gyre", "rho_0") From 8fa894dd6b0ec888bceacb613309c246b2116e57 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Thu, 7 Nov 2024 10:16:42 -0600 Subject: [PATCH 11/20] Fixup cfg file links --- polaris/ocean/tasks/barotropic_gyre/__init__.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/__init__.py b/polaris/ocean/tasks/barotropic_gyre/__init__.py index afb617fc1..25c3d3ed5 100644 --- a/polaris/ocean/tasks/barotropic_gyre/__init__.py +++ b/polaris/ocean/tasks/barotropic_gyre/__init__.py @@ -13,14 +13,8 @@ def add_barotropic_gyre_tasks(component): the ocean component that the task will be added to """ test_name = 'default' - subdir = f'planar/barotropic_gyre/{test_name}' - config_filename = 'barotropic_gyre.cfg' - config = PolarisConfigParser(filepath=f'{subdir}/{config_filename}') - config.add_from_package('polaris.ocean.tasks.barotropic_gyre', - config_filename) component.add_task(BarotropicGyre(component=component, - test_name=test_name, - config=config)) + test_name=test_name)) class BarotropicGyre(Task): @@ -28,7 +22,7 @@ class BarotropicGyre(Task): The convergence test case for inertial gravity waves """ - def __init__(self, component, test_name, config, smoke_test=False): + def __init__(self, component, test_name): """ Create the test case @@ -42,7 +36,12 @@ def __init__(self, component, test_name, config, smoke_test=False): subdir = f'planar/{group_name}/{test_name}' super().__init__(component=component, name=name, subdir=subdir) - config_filename = 'barotropic_gyre.cfg' + config = self.config + config_filename = f'{group_name}.cfg' + config.filepath = f'{subdir}/{config_filename}' + config.add_from_package(f'polaris.ocean.tasks.{group_name}', + config_filename) + self.set_shared_config(config, link=config_filename) init = Init(component=component, subdir=subdir) init.set_shared_config(config, link=config_filename) From 4f061d0a557e20dacf5a1aa450ba4d763f1a64e7 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Thu, 7 Nov 2024 10:17:56 -0600 Subject: [PATCH 12/20] Turn drag off --- polaris/ocean/tasks/barotropic_gyre/forward.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.yaml b/polaris/ocean/tasks/barotropic_gyre/forward.yaml index 5c04e0af4..e592baca4 100644 --- a/polaris/ocean/tasks/barotropic_gyre/forward.yaml +++ b/polaris/ocean/tasks/barotropic_gyre/forward.yaml @@ -35,6 +35,8 @@ ocean: mpas-ocean: advection: config_thickness_flux_type: constant + bottom_drag: + config_implicit_constant_bottom_drag_coeff: 0. forcing: config_use_bulk_wind_stress: true debug: From d591be6b36ce81f58934b24faab888a02b00f33b Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Thu, 7 Nov 2024 12:41:50 -0600 Subject: [PATCH 13/20] Move max time step computation --- polaris/ocean/tasks/barotropic_gyre/forward.py | 12 +++++++++++- polaris/ocean/tasks/barotropic_gyre/init.py | 2 +- polaris/ocean/tasks/barotropic_gyre/resources.py | 9 --------- 3 files changed, 12 insertions(+), 11 deletions(-) delete mode 100644 polaris/ocean/tasks/barotropic_gyre/resources.py diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.py b/polaris/ocean/tasks/barotropic_gyre/forward.py index 1f0123a9d..173c28fd7 100644 --- a/polaris/ocean/tasks/barotropic_gyre/forward.py +++ b/polaris/ocean/tasks/barotropic_gyre/forward.py @@ -3,7 +3,6 @@ from polaris.mesh.planar import compute_planar_hex_nx_ny from polaris.ocean.model import OceanModelStep, get_time_interval_string -from polaris.ocean.tasks.barotropic_gyre.resources import compute_max_time_step class Forward(OceanModelStep): @@ -154,3 +153,14 @@ def dynamic_model_config(self, at_setup): # make sure output is double precision self.add_yaml_file(self.package, self.yaml_filename, template_replacements=replacements) + + +def compute_max_time_step(config): + u_max = 1 # m/s + stability_parameter_max = 0.25 + resolution = config.getfloat('barotropic_gyre', 'resolution') + f_0 = config.getfloat("barotropic_gyre", "f_0") + dt_max = min(stability_parameter_max * resolution * 1e3 / + (2 * u_max), + stability_parameter_max / f_0) + return dt_max diff --git a/polaris/ocean/tasks/barotropic_gyre/init.py b/polaris/ocean/tasks/barotropic_gyre/init.py index 8b11ad39b..964cfae1c 100644 --- a/polaris/ocean/tasks/barotropic_gyre/init.py +++ b/polaris/ocean/tasks/barotropic_gyre/init.py @@ -6,7 +6,7 @@ from polaris import Step from polaris.mesh.planar import compute_planar_hex_nx_ny -from polaris.ocean.tasks.barotropic_gyre.resources import compute_max_time_step +from polaris.ocean.tasks.barotropic_gyre.forward import compute_max_time_step from polaris.ocean.vertical import init_vertical_coord from polaris.viz import plot_horiz_field diff --git a/polaris/ocean/tasks/barotropic_gyre/resources.py b/polaris/ocean/tasks/barotropic_gyre/resources.py deleted file mode 100644 index 9e8ff03b0..000000000 --- a/polaris/ocean/tasks/barotropic_gyre/resources.py +++ /dev/null @@ -1,9 +0,0 @@ -def compute_max_time_step(config): - u_max = 1 # m/s - stability_parameter_max = 0.5 - resolution = config.getfloat('barotropic_gyre', 'resolution') - f_0 = config.getfloat("barotropic_gyre", "f_0") - dt_max = min(stability_parameter_max * resolution * 1e3 / - (2 * u_max), - stability_parameter_max / f_0) - return dt_max From c1be0bbe00d88e3d75cb6be4adac041cc2ab34f2 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Fri, 8 Nov 2024 11:13:47 -0600 Subject: [PATCH 14/20] fixup resolution check --- polaris/ocean/tasks/barotropic_gyre/init.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/init.py b/polaris/ocean/tasks/barotropic_gyre/init.py index 964cfae1c..ad5a9ac4b 100644 --- a/polaris/ocean/tasks/barotropic_gyre/init.py +++ b/polaris/ocean/tasks/barotropic_gyre/init.py @@ -51,11 +51,11 @@ def setup(self): # calculate the boundary layer thickness for specified parameters M = (np.pi * 2) / np.sqrt(3) * (nu_2 / beta)**(1. / 3.) - # ensure the boundary layer is at least 3 gridcells wide - if M <= 3. * resolution: # TODO should resolution be * 1.e3? - raise ValueError("resolution is too coarse to properly resolve the" - "the boundary (i.e. Munk) layer") + if M >= 3. * resolution * 1.e3: + raise ValueError(f"Resolution {resolution} km is too coarse to " + "properly resolve the lateral boundary layer " + f"with anticipated width of {(M * 1e-3):03g} km") # check whether viscosity suitable for stability stability_parameter_max = 0.6 From 67dd0b71e102613623fb21f62bfbc35bd933a947 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Fri, 8 Nov 2024 11:21:35 -0600 Subject: [PATCH 15/20] Add user guide documentation --- .../ocean/tasks/barotropic_gyre.md | 151 ++++++++++++++++++ .../tasks/images/barotropic_gyre_solution.png | Bin 0 -> 31390 bytes docs/users_guide/ocean/tasks/index.md | 1 + 3 files changed, 152 insertions(+) create mode 100644 docs/users_guide/ocean/tasks/barotropic_gyre.md create mode 100644 docs/users_guide/ocean/tasks/images/barotropic_gyre_solution.png diff --git a/docs/users_guide/ocean/tasks/barotropic_gyre.md b/docs/users_guide/ocean/tasks/barotropic_gyre.md new file mode 100644 index 000000000..bf5cad477 --- /dev/null +++ b/docs/users_guide/ocean/tasks/barotropic_gyre.md @@ -0,0 +1,151 @@ +(ocean-barotropic-gyre)= + +# barotropic_gyre + +The barotropic gyre test case implements the Munk model for a simplified, +wind-driven gyre +[Munk 1950](https://doi.org/10.1175/1520-0469%281950%29007%3C0080:OTWDOC%3E2.0.CO;2). +It is a variant of the Stommel model except it uses Laplacian horizontal +viscosity rather than drag to balance the wind stress. As such, this test case +may be used to verify the Laplacian viscosity term and the wind stress forcing +term. + +The test case is barotropic. + +Here, we linearize the momentum equations to permit comparison against an +analytical solution. The nonlinear solution would be a logical extension of +this case and should be qualitatively similar. + +## description + +A successful test shows the development of a western boundary current and +clockwise circulation. The comparison with the analytical solution is performed +via a streamfunction. The L2 norm is printed and the following figure is +produced: + +```{image} images/barotropic_gyre_solution.png +:align: center +:width: 500 px +``` + +## mesh + +The mesh is planar with dimensions given by the config options `lx` and `ly` +and the resolution given by the config option `resolution`. The defaults are +1200 km x 1200 km and a resolution of 20 km but different mesh dimensions and +resolutions may be tested. The resolution will be compared with the estimated +lateral boundary layer width to ensure that the western boundary current will +be adequately resolved. + +The boundary conditions are non-periodic in both x- and y-dimensions. + +## vertical grid + +As this test case is barotropic, the default number of vertical levels is 1. +A different number of vertical levels may be specified by the user. The +bottom topography is flat so this is not a test case for which different +vertical coordinates would be informative. + +```cfg +# Options related to the vertical grid +[vertical_grid] + +# The type of vertical grid +grid_type = uniform + +# Number of vertical levels +vert_levels = 1 + +# Depth of the bottom of the ocean +bottom_depth = 5000.0 + +# The type of vertical coordinate (e.g. z-level, z-star) +coord_type = z-star + +# Whether to use "partial" or "full", or "None" to not alter the topography +partial_cell_type = None + +# The minimum fraction of a layer for partial cells +min_pc_fraction = 0.1 +``` + +## initial conditions + +The initial condition is at rest. Since the test case is barotropic, only a +reference density is provided with the config option `rho_0`. A beta-plane +is indicated by the coriolis parameter and determined by the config options +`f_0` and `beta`. + +## forcing + +This test has a constant wind stress field following: + +$$ +\tau_x &= \tau_0 * \cos(\pi \frac{y}{l_y}) \\ +\tau_y &= 0 +$$ + +where `tau_0` is given by a config option. + +### config options + +```cfg +[barotropic_gyre] + +# distance in kilometers between cell centers +resolution = 20 + +# Longituidinal domain length in kilometers +lx = 1200 + +# Latitudinal domain length in kilometers +ly = 1200 + +# Maximum amplitude of the zonal wind stress [N m-2] +tau_0 = 0.1 + +# Horizontal visocity [m2 s-1] +nu_2 = 4e2 + +# [s-1 m-1] +beta = 10e-11 + +# [s-1] +f_0 = 10e-4 + +# homogenous fluid density [kg m-3] +rho_0 = 1000 +``` + +The config option `nu_2` specifies the del2 horizontal viscosity. This value +will be compared against the resolution to check for stability at set-up. All +other config options are explained further in previous sections. + +### cores + +The number of cores is determined by `goal_cells_per_core` and +`max_cells_per_core` in the `ocean` section of the config file. + +(ocean-barotropic-gyre-default)= + +## supported models + +These tasks support only MPAS-Ocean. + +## default + +The default case is designed such that only a short forward run is performed. +However, when users set up the default case, a long forward run is also set +up and may be run along with the analysis step to compare the numerical +solution with an analytical solution. The user should change the +`barotropic_gyre: steps_to_run` config option to include desired steps. + +### time step and run duration + +The time step for forward integration is set as a function of the CFL +condition assuming a maximum velocity of 1 m/s and a function of the coriolis +parameter `f_0`. The stability parameter is set to 0.25 based on the stability +of MPAS-Ocean for this test case. + +The run duration is 3 time steps for the `short_forward` step and 3 years for +the `long_forward` step. diff --git a/docs/users_guide/ocean/tasks/images/barotropic_gyre_solution.png b/docs/users_guide/ocean/tasks/images/barotropic_gyre_solution.png new file mode 100644 index 0000000000000000000000000000000000000000..e02d1bc1ce0ada7cc958e6bf7946c838065ead78 GIT binary patch literal 31390 zcmb4rcRber`|sUE5u(V?P|>c;(Euh(@w*L8a-Do7HXqd14bUOHD-4EEAN_kGStRKN2J`N`wD^5hyNJb+w+?dZ$2cqP zjZsqWo@U~1gEERrwaT(y@dYNdrqSP3Q?t8!9|&D5`5yJ?MbNv!yTQtNGOMa$r1!lp zD%+dUc`?y{Q)_(Z&?_9^b-HD zIp0S)ZRbHq>n=`z-^M0S>2s2TjSU~;MZ62N!e&{9!zH%oFM6FOVUpwO=k_#HiWYXf z>Mw;~;H={C=GsNPy^X(yc~dC{X*poXm>dvcQeOij~BAi-Fw;CO8%A zv-!TvhT>O$0y(ZXRS?37Cn-cK7pJFHMTdpGaQpU^?qIv}IOsTvQ@cnH-tE)1+La2& z{n$6lqju{*Zz<{MWNdD2olOp?+u!{YZS}j6`0jcuZ(_!$P6AqCs*w^~*XZbIxFTDM zn+9+7-W~SL=OyetD1WG+P;Xgz z=uXTaG2We`va>a0xw_gwThrOu*{#Nl`)c=zyN5>{+<~3B)XY2uPXVKnPmj_c)A8_J z#KXhu&o=as7*f5}t$uU*M*^68xbK5l)njevdtbhO zEzuIpz6v)6dsjkQ8ZVer_p?HzVAao`1WQXxvpuO~ua`&DRUh#$Ow9ZY-&x3Q?S zb|;>-N2Tw2XuA6N;Fqn|Q$FvEJ)^CyJ^uHv7o48>g9mgXBDygPhx^;yroC(*_dZkH zJQu?8q-$2AXGBDOGfH$|f2h!MYHM-moLGg?kop^11GtS$^55Jfd?~6rJBfWMZ`H?3 z2Yd+*PE>ug6~@BKT7yIDa8;x-m|e?YbFPOXl2XaMuD13E{4CseF+UoitT)R#Mn*=- zY^zq9E)ErXgojhcE8mEEH+Q3Kd({4% z?MU$}=6atiuFO$(Co?iKzQ`n?`|NbE+Cb5s!~~~RofPf#=>oOjJ(i$YIFIL}Wdi8u z*Z;J$2C~CtJ&Sg9hj0I=t2?8dLh87`g|MFLhvUqN+CQ&}zpvIj5lcaZS%T`-sfM8DM@OZ5hudRuDoF}2t*qWhN7FuS4Sf&g z%EZCRsKO{Z^3Izjy=phSmCeluk%G1_cUJU2Rt~@}`0?ZYDWyyup^yBb8PO>Ol>Ap2 z8BfEtP>c+5n#z{%OnRHNuxS?&ZEbDY{fT^Y)vd!W8aw!GZjd#|S;w&9^T&`7vf+^t z?&lp>hs)lQ{FwS}zOyp1va#V-T6#yqhx~n78e5R#G7Kjt=STg*xr%L3T(kbH6YY1`@#lI{an#k-^PYE}R7sS( zZ(@Qi(>6a=AXkRX?$S_r>2N*zxE9_g+q91($T;8p*CEs+jiQ%yCARZtEiEl!eaF1` zmFW5Dlk&cO>H@6%WR;`~X9+0ctsNBW`ib4h>DguQ#AAYucCb zqKx_njX}_;^Rc7ZNXez;ihT}u0?M;@?%Z*udRF)8(rt$wE_lJ+>2PnNf!4W}(z5IX zoGUzi+MNjxS}wa4y^Z-kLajoJx+1G7B2rSfC?WgiZ6$4OpOuxDRKgDA4}~^K(Yo*I zQr=yu@2}@K(aBJi5FaIxJT<*J`)n6H}T3KC9Dae3lbx&OU^xFD5_sj8nJ~ToU z0s;cJ?YGz-WoX~9yneLVryDBpis{|v+{Zsr_7|XEH9*D6w%@imSZm?DZT%ZJ%4zRK zq?68r2M=aD<8WX(e$2|^!iRc&?b@}Xx9d#M>HG>u-<_wSp~28F*T9yjfp_UldPs|o zR%kI&4O@0~yOpIWUSP&def1>)MMz+BjjNVLZ*qZIl!_~6aixls+7QEom zqY7+3R8UvvO}09Ad_;DD&Jx_rVW`V(e6NL?qT=gqArMwdR%|+D&CR+Rg8U?LoEl74x{DKid&Q&ZUQ0 zSWLAPJWq#eOP28Kj z`KRN^Pst2b8Rc>C3iTt0(P_)Syyqr-g$e*VjU z|NebGT$EkC2W91QU0vOp;T%Pc{AMXW0YP1#uCp&Z+*r6z6qY#mMRDnrm6cCp&<>|_ zBg%c&ei>6cm~T353{8R&a`I&BN?4nh)tp<;lW~w@+>(-#pvt&A zyoDP1(#D2VIYl+kY(Uw_*tn@L^6pz@3=upkwf?@+0?Ca$-E|eJQ=6N3-_4fhus)MWfIn(qSM@(og)}Jr^jTpLbvd2Np=n z%BoxskBZ7rovHqK9yPdF=i{SuEyg0hKAtCIF<0qX8Yw-4K`0=>c6WC-wx~$s$Z4|H z>!b^8!6?z<{(g-U_n@|m28M*RgtRy@dt9LIO18*pZ`oO$x)iLwt*KZjU+HuhC~PW< zoBew6@riqP_ZM>E2+=7SPf9mMG@3N;>XFS}|m&Q*+Oa`N?$%OkhO9O8HqM@wvF1A~HYu%#v^e{s(AqrQ`vrJxo8 z?GcN)IynU=Fjj7_e*5-qPdF9}TiK|Rg5*S^02eZ z+u7Tn$HBp|TAz{MwYKHXDk(|X6KFnKijR+fUiNc;xe}g6h|W9d3Cke>&U6tG5#on? zn-83vDjbU0++`D#t)`nV?XJbf(s$+<%K~g6J-Yn$Z&QUj>^Cx48LGS3!I>|0Uqf`A zH2f0w}c1liEYDQxoB+Lq)0P7~;Ti^K2u`7{* zb$RgjT^_Z?Tpg_wT>&a^g4ZhbKuWa-gVRjNMv< zKfqt%5#Lx$g8EcFFrYbM>A}H0tXkP3a$M$brwSU$G)XHiYAOZ`zfkohicI9H44xnz?5m z-d#P75I+}NXNj%gf_C09>N_Hd=N%RaQYk0g8^l za#(@+P^{%x1+-$RbdMZ>@z>d3y?GO&Ys+@yMioHYj_>zR9n9+sG@vYzO6}uv50GwYUB78o4 zIO*CKX{G`sfZu%34GLn5hqiQrGPF*7c*h!l21!+mKQlA#ej-QYwsQxE&z>FZtY#G! zs(*WNlZ#97h0$km`YPZnConh{sFJgzGRwCpTq^Bdjp5F_z_~p3i!HL><|wcn`wW08 zwJg25p+Pc+ImJ3HBt@%`gGnyb1$JhB?$2Iv{ukZ>0Rdg@t!-@zF&;Af-PQv+#^=iU z5X6VusrdM@34eJqkWmjPqrn_cuq%b>@DM|}^iNt_TdQ8U?*I+11Ge_AJsBApJg&2% zxQt9p6bVc5kx-}gI%6NO=w@eU%S=;KQ)inE@Z`sBBYZ9waa-v{F(6uXT}L(HW>FHT z!WhM=#yjJy@%p(>e^#e!72>~cQGxQdT7^Snu!=di_!G{P zUPOdeHkeJx?&x`Z(sofV++hAki0VITrkw{5rE|pi1poKnipI=*$ zhex@>Y`DlOIXU?Uz|n4tq!;0BLqn9n*3<@tf#U&kp@`hh(ytkxnsS9#Z{YWd*v^r{ z9`JBJn4<0ZY|-JC;uMmz9Jyehe1oah#O~d@NyL1C``w_GNwNg|7}&)#u+WC3xjFvl zj|YJK#xZ7QW(H+GipnWWb#*l#OLSnMTee|C ztaJbqw2Z(p%dBVZG=YJESMS`>nle=1YUOSJ(bq=?S6>CUChOg%NyMEu3V%n#q2`WH z)OgHxC7joO@+4@Bf%0rvU|_t8(1!GDUEAf+@}Q-gAySNMVQs9(`d|Ncrv$)h)_DP9 z6Y2|`&5m~3!`ogSYe-g#BmIiCnyNoxcQ-eYh5d1!;vR#Ar6nOPEp0-3s+o=($CHvD zH8rPf=epm6?jj|H>(a2T*u!}HHaP&${tCxCuwj3x!r?q zJTX45Xt)bFv^7eI(tI%QeQIjzU5++DZZ1#%#DDVez^SgOSp__bK!-+|9rtG%p-*4G zUQEaVj{DKu+q-$kQo)KFR=_RG(OQy+cVqY>2$L%^e7u970nj88O?F5zaXxeAOjS#Z z?BbECV}3dEh<~5lhE4I1adW)tly->?9x!tX0^6R3F+5w< z$T+4|1_p*xP)N@|F0}B4CDRh(2Rs{|x(wcPQLVKzOO7xp>%wo8R8%l`>v}eqhy-5#RryqZ!oij*lx<`H) zSz2apygh6XIeIT-zl9JqLa;~!7$0|mg_ovXtUN`&213gufR}nW8u6t|AA!M60I~*< zn$yg>FxbJwfrymd-rppo6wwI1`woaESv`|xVPWA5>=pogf2qh$=X0Owen|sAiqeaHveC%;y~z={4dxAz?Y%Pv_=S! zfMinxmyz7FY7#4}MdDKZTv*e79e{e;mIfisUBw~|{p13s@0FD#ShmM`QZEMF@JLJ+ zZjNN>p8`!R=tvky8?Bf-eihIPE7T$Y9?1-uP?QQEZm6_I-XQ}UZzs|x^jk*uO2hi8F;vAC=o5vCs?31u!X@YW|sYojUxLCF~ zmx?ag9sf#fjy9A*RUKa({Gp;RXL5i<5CdB5Ga16FpH5{sj|s}Wj9u@Pq>U*mB5(Li zjRYFf-fN7E$qRqG-OUP0*Ve2fM4V}WY&5|0`<$YZ6bmGJEqv>JgBXRHKfC&-$9JBA zj<#kpI-`wE`yTZtUOsdHmYi-D&uy3HK<%FFQP=JHOAe}KHLM^m=$8iv>+R=ik}qDo zm}NaJ)YHd2JsrFOUydgb!B4-d3~Z+Wb|{&-F8D26>Fuaf2A` zPk>zG9Wi1^i$ia5*I|bURDd%pw?EG^^fo>fSG&f^nc3^NWT+iK*WK-;lwZLgeZzcE z7W2EXwCSsqeA&_7yhgG0H6%g?k;I&=e-V((uwM*Us-u6h_S^II+<-a)c>}EQu|jfe z23a9f&iQ&!g4924@&F`bAu*6|d>Xs8y)CJ%{IxngNEDY%t3Ynb5vq&+50?}D`KDw! zxw)&A$A^S~r5_VmsW${x$_{L2thGy!Q1Lu*^&(+LO5hIA{Y#0snQ3rK8=ISz&nd$~ z>UcM3X`c7u*IDQ}w;lKL?k9zY5ReU4Iy?Is0~|f^@ZrORdTY=<+ad(w3IzuS24Y}q z*v+RGW*N6!#(WWZDzkO_BNWM$vg13#!Za>(`hSC(-0!69iKg1S1x7|jJ}M{55u_5Z z7QcZ34!AL^cYpyb&r15XN{5PHJp(j?1LOe9ebn6c0{EuPe4bF!x6^QIVB2~6 z`AI?}zeH2H-L3L)0vglWkRHn~K8}-qhH=;;yZK)Bpqg{Wm6Gz#6>$9s(`D#ZW~|*F z><+@^T6%^Bii}vzqeT%(NlAy5Dje7o$^&=sW_y`BLje4rv^%IJ7DL!3%3)0!)=BqH z?yo;%c#Z-ftHAf&5ez!mzx|?%5n8mtpSH-xrl!unXhJR!v^<_>SpUFvsvg4zD zmKK|(Va*pj7wJyJ(UPo-aw_^kuYzjT0MaBksNF%nIZ#obZ)oSt;ZqBeB8UY7B4Wo0 zn?bIx^z^O*q#|{H84?m=xHMc`1d?g`oYh42nc)gYtrx`$%^7Bmo^f#uNTFO%F#IJHOU1Y=k4ysyidEYxht~_aJ=Wji?xjn@z<~Up-{$m3fz3rbsC;p zkjT@Noa3YIO6U&sfIgF6hcftQr&( z6oh91g5D=@?@LU){x@yVJzCkGgvO{*;UEAVaJ5U8v&XI#UYG*>cCP&k2cT{chtz^Y zMt&vyWMl?`M)Jjr8|W8bX0HID1=dTA4T12heQb2q)2{Q+1h%YTf;Bw0o7lwd)l`3}GiNm5%21Fp=`4i}Mz1S&;mmcAH*@PDGO_*Wc&4^?D4e|c|f z(HoTa{AnGhUE>HL`^!+Kk#UkItN_2(kswRvaD2Gk*w}avcK8>-3$P~)fyF%@qv^_c za>r(Qlp5p|kKEkc!Do(hYa>s}-`(WUE^_e`-or)a5hxp1-G20>s%JYNI}MlHlYyKl zW@N;O)J3^yVQMINqOdCvA2@|`VH}BgyNnola2;>}hdco7sxw7}na`vf7lCQ0LqMlK zfr2Zm!w>8N6p$bA8d|XUG02 zrV5}!#9^(8*={kvj|()9qT=EhDBo*g7HV&yC9J^mm;%sTH{BAl3io3Y43qu>b4nRm z*=(yRiK5cd`7JSqT;3IYz$GM9 zf4f?#6eoeuT7kvLr!QZK+&nxOSXs{ln-RCOE4m+DIs{M0Y#`?hgM`mLxG6-S%)uU> zg8ftExX%v_qqE%pO;GL!Q&bKm9USgf93R;u&j8l;M*#UCv}QvYtgWpb2Sv7Tf6QyJ zxxKvsFq0BIIg{v{NFtvC^;Aqw&Sx-YwFl1eLTqg8%HO1Dv_HssjBr7CUxh+=6}*e1 zqoc=*?W3bQ!hNT|JMpkTF(?9>W@TlStXo;(p#0eP#pV|#)<>HHwQAJR5Rc^YvF)v- zqMo|WhiYgsgDK$!7KCSGqm+MGnC9XuPgW5Uxx|uZjw$v_k2E#IG)iBmgGTQGItmdW zdc@DbRn$fcl=SjtlRRfStaIB4Eb=V`6TO zrL3&17KGC}Xb7q_TH$|)bW3cck#RSfk`#53fP(MeF+c?|0E1|(lWJ6etmZhu}#{*(9fHG9w z-u@8ko#e!Dw@{0!XG6Q5{qA(gM{tHgYanxSaza4-GCTlf7Oj!>K9jw}i+@c((Ld>e zjM7y0kjO}O*y-Rfg&Y)r>sTw!*VNQBfPP;+Hl};~&K+-X@K)h1u!o~P8xGO~yyeHc z?ao;CxcN7?I5{68iw@zT>ZT@XsRZRtQ1G+$s!l2?E7Nm^1O_q!14dHX$I{YLq}JVj zIqotTsx{J{mID$sF*P-N)Z3XW6Mz0NqjRXNtc0aX2C!d+MfdSz7UA9BB*auyY@o;e zwjIbf4N)GLn_LHlNBrf>EF`~zzHIoNFC4vwWwgcDCHxIlVq`pEpfg9=Ne_}q1<5DkEG1JrMU_h7F$bCuxyE?zpL{2>3 z6)=Fo@zEh{^@1)#KhM@WWTQaE&HQ_t4Q(`hWfU0d%o(uuIj8Y~MF(att$g|NMflz3tjcslGwrZZF zh}a-K;w5x0<12|{%G0T#Egr? z#Qsg`x|KA59C*O{L{7&fR2^}69P&@t1O9h%1>=I;Lf)sXKcHE9f+=6s-NSub*dr7g zGJIj~9o_Cpih9>vdz1UZe@9?Wk6Ved1<4STk{Zon$^E_7iH031@zd}(@S-V@CJHJ$><1sD z?2vKlh=V99Dr&Z972x*-E>&7u8bl8ElI|~_jeO*^ zUX8t%NJ+ozRyqMg;RE34frw>OQDYNtc`OOqTpK0*@#UDKi?g}bzHum&1JMrI#{jQe!XpLsP8A>bO zz1^dU=9V;W3m!VA93CHX^2xPz`g zxcEQt0fhh*qVC?%)lpXd0M%duU_(}Jt{4=m>3OsNIw$b!1ThHe{0QYXe7Vri4d_=7 z{KMxx*h?Tiul&3ecV}$2)eE3FHRTYB)pW~CKCvMr{))3r2J}Uw*PdV3B ze^0Y8qLZ+~>c8DI1#kHbB$1FLkHmKn(b00$2eba%kcR!Rk*J(e9kN=1EE&K)Mlw)J zs+hPDKU}_No?*IGfLNkeT0i*67z`k{n^y9ko~`HM5&OSRyZP@~802^n0);Rd{6s_? zb_JF#{i25Hf8O}(*RRMKIDPtbC`72lpMHdMle*JOaSKYEW_El$qtUZx;UyIC9glzC zDXIMlkdgr+LTznrxOjL~0F!!xN3soZ&f=51K*a&c^Au7~3oUicQ=c&WcX^0c2S8Z^ z3;=0U2<-wG6oteAfG4$J5g@wg*THh6ha?TKygIFHLeZoF`MC2rElL4^-kSw2SWGQI=)Yol@gl&5kzcQ&5n8# zcrf3;f5*UXaZiqoD8IjLG0nolvI6f`4X(>YuUe?&tc-5=?%zLgaCoSc^m(Q)6F8_F zG@$%>Z~`V47SjA!E~eD(NVzAPI-JJ(`TO`8JxBk#fAY(5R6iUR6cDHaWT3AJ^cAEu z=$dg^!wn5Muqh~drU53`ficSkUJZe1CM8pCK05g05jIn!C|HIaMOKEs&BE_CaFx|> z1$v&#H-_XLG?r=!+AH`|3|GAQSBaAaBzT0s#&8RN&7QqT8@{tYp`(y7$ODMvfxdoB zbq=szdI<6u?_!&Bv2Krp01I4&VhX_pNMF72oi=sFvtkD5GF8-XwndA%f0-iK;Yn}r_9)E!(^ zT81mMP2@(=17iw|-z|c6?6{{Y4vx(aDaiA6jD*geKc8VsysrQYN+U}?UN^g z+gck$LJj4g!OOCZ0y_Nz12;C$J~KAHu}PtxZ$88?_l*xvT-T@f?fdO&ec7IIZ!eIqd6l4-XGf z(X>xcXhcOtiO9%2K=Ek_X{f8y2WD(iIFw_2o=G9X6K<#;?3_V$9UM7NuU3tb97#wQ zLI(887q%+};`!-!NKEGW?YGRtB_v{B{b|DmLmosZ+W5pogXX{+7?-!}GZR3*kW}N+ z(6j>fI?@Gg=6mHwOBW_5Po}7vWW9q*in=JzDQBZgjmKkETBQ>i!O10V-B=o{Tr=P0ZuJL3xO7ZhASrUGRlGRarpuskK=#FcqRpmlCX>^e}D% z<9E;eat>WExrbZ;d&&*{43LcJbNF)NGfjBp#OrI^03_gN6f|Yf`BjO3^KA7`-@ridhJz>TYvSeX+IsMskjlF+ElM=I2i_G@pCXNR#2kKUsT*^K6K}6 zLh_#YJM0<5VTL45LgkFv4f-h_59xfA5CJ;YLR(D(SWMSx_ksB?axg&n1Q8;p>;TfI zJ{pER&vJ}3wvL;Z&CeL7Z9<3A>Z|Y%86@*h&?C$~p=rqJnMlCD<)YyS@{%FYOS?%g zW()>JhCm}g)hf??=uyf6ND^FnKQJiK0+hQ3%sDQjMk0jPkfWBJ`tYgvlQmP{Y-M$< z0ozo{u7LxiBX8kEmz-JCWiC4YFWB;{F6KA4ZfkeEgMgFx#GxduqZ^0|SLx{P8@pOU zHtgIopdcTp_4@5mLS`#U`Fwxb3leU#)G!V>Kt-Talb2u>3F#x+XUy>R;(vji)g zEHd%2Z$qUuN(M=JW#WNTSC{CnUcINk3#u0|pLA>8Kkd$kJBLqX|?0=ST@e!Vz&2E?!O zo=7&WPTv*`rfuKc*819o*Utl zfFoXf%G9{W5PnIG1Q^zuv?0V?d|;31Pd5i4em!UoY|S0P5b$3RfY?-imgA69q_KNk zui&GmbV)Y-niG#eFAdbEnmV6-R65?{WmkpD#yxyeZDvj&#J}bvi~Anr+5GuJ@PR-a zGXOh>obUM;VpEBknX1Lqmv3IB7s$ccKlLY7H};k0F-)8Q*g~v%nW^@yqQI4ml3{HM z$KK%Uxj3~iM;*7HKvw-K1e<_B_m|kRLbBWkA~KjCWpCGC{%NBIGnx3uRQ>4xDMSR& ztuPpH#)04lMB;=+mGocNdd9JuE!g{&k@x8w4xGI5NR9`_Mbw^*q|dFfgqyCHL4Jvr ze_JB@Cf`>7saRc*%pQQ~#KXe_!Prhviy*^n0Q(N(0>KZch0QIQPf9Nv8yllUTB1TE zi>|QKfnAzz3m=VbDm`i#j~aWizV? zOqn$hsKb4@GSG10A9@A`NCRoj@0oUe2?$DEGH#<8F8jX1^9HI=vf~!F|F!Im9Su$W zX5Yu=mMPr7E^_I7O~~0GPg!IL^^_86<)Cv~89#x9PC%6@+Le$sVAHLjN_~`G4QkQ& z{Ji&xQ)j<_A78%81C(}QxR?Y5KY_a{YG`;uR6P#3ug=qj{%k238BsGcHUmRLe=rn5 z11gV_)o&(`2Dvr%bP5#5?CECTQMgd)r&>^Km1T;9dYVO5rq1ql`nfISQWddF2 zcMAw09i?w90Zme2zJ!K)LQ?A^59oH#f+NdXVXMMgpMH;zK`~)SZE>nlV&4gE43N+p zE(y`k43kuk66Wv+U!+yz7I#qnxT<{1C&Y+=O+ezJCKg0b!>)K~yXheHjzoD%bYCGn z1d@es^BPDammo{{0f^Ff`EY*pGh9}a;z&z9o1XOGT5V1P2~@f3Y}>1={+TVUt!@Bf z=K3;q&96YMOE`oaTT4r_G9-jSP5&6e@6$QU+jllv;MRs`+WTv@4RZ$Hv%gL@lXK?R z*hvSs26E>VEK1VLssf<`{o>LKn0h0@gk*a&O`|>+ee&U z$&S-a@$nMz*V~+K=!!)V}4;4@a8GE4VhsV|B)FaBw_g35bmJg)D{%r>I&`SXfGq zgQn({oLqwKk*s95e#nqu0-ZcTzFVV>%FN`1T`QsdQ@wvC0D_ z`dGo~oqxq;?AoqPX+PuQdpF0Xmx%VnFXlR)nO^%=J84x|L;g4G8ki}M51m1snfcx^ zdgbF52a8S{#swtFkKT7tV5gMRoKrM~CDWu>SW{J$3bqVzxZ1k9rjQ_rxPXZXay2s{1i=z#gRGAM8=&&f(W~at{OMtStsac)3 zHKwY;J?hiDEPu(%tzReOp!PC^$5hU>1d?;6cDuqo^SNOd&%f#~RBMC>q=A%U4Whyi zQ+%LIL7V_vj;j`wnVH$Vh7^a6@9&QkzMsntH!jJ_B7zkWQuz?pv$FEVyFx;ppkJZ1 z0MJnh5K%f}ADlFcAGE!-E2oBlghARI?Hpug zV~~xHCWv&NhMxW2(cdE9CQ<(AlllR^KrXg`<<^>fP|7Xnuj|Ada!g!$$@n8)M zZLv&siJmb&AwhFL?4+O8D;xe!*r>Gk8oISM$q?MQ@S=-*c6Qbi)Ihku`Y-^nHVtw( zIlozGv$?34ST@9pJ{p5EBMCqPWpegErRu-NTZNoXC$P}n{ej$Pr!WWtfG9bYUN~A^ z<3Whx8KA_1V15aH(*tB$hwygceSElExf! ze^^ld(nwL78mBvxvG2$@uSfkT08(f|uFMMytI5+)T#=9N+N(lubShWc6hI#Axgx7A zzB!|$DV<@$wX@%_6D}qEdq#3Sac0drL@N9ntug-Uii(~y4{arMbaZ^xCyk7vTm0q= z6$6MurWPYiA1?+-Y2~y}6h~KxMV8*0Cc`HnrcC9To~5jpo$92^ynf!=ppQ)MX<*Otr9IBr+wC`G#v zlI;n`D0UBWDZV!AgUdHlf(3pVeI;?c)|?n&RIf_X5^8esiUO6Gs(oUFPqXT3S73G* z>FU?)ub!T4mjH0SJa6_Q$8bp5u$}7ZqiggdYHyS}6d6oecpsGIC3t%RFtK@c=cmqu zX05o9HlXk8LQmd`m(Wo<7IgIUK3K+~guk(t*h)`Z8#Xjx(}W(KEc28y!VASE38Nt~ zIHl4v%X?OZZ_CF^n%m#_rTJcbSI*pIEO&sxk3AB@dKvn4+asNrl+=6TdZK1rL6i<^ zl+L|_=M5GKgy^y5a|Us87S;t#7Y$8)LJ~_dLp^P32I9SZ0J?fc4e;Yb2IgMb`8wi^ zv4gBd@7lW6uI9Xx^Mvf!V(Pi&oAORQn@;3$%(a6Q?-q8sBB1P#gSX`lGdhrvS_R9O zK|nxrYS9^lGe{N0fkf+`${5CO8(^ZAIDbaWkg2|2uem|xZ+LpG46LbmY!esIczjp9 z>@Z#%!}d_G?3nC7HC!OtbKB0T0#>*RGa`T)anGNx0UgC;n4goA5R9rC(2-4HzA&9f z!k|?{8p{P-XobdrC*S+Zw$+kCLD#%Ny`zfy&#SG5RGGd~4+|xy>Wv>;GMmo!m`*1w zvotkPyt8%vM!7)#;1)+s{##1dMOwSzj#s9=ZCMRc#U~5D_nsAU7x41+RkN!EzZ>G! z44_xR0Ek@vP{r1uDJqyyd{;o=xsnxZv}7HSOW-t*YnU)Y&bkS*AO3rxD)IU{8iVr& zX*xt=If-=d3s~UXF)-eyX-~um@tar#y)tOk;teP-ISAGDYHA<1inr&c1ysw!{}wFJ52uNS+wIbfF&ESIfc z;I|ybx3|9_PFFW1f`5rpjr!MD!)toGt6j>=*Pc2ss!SO@M*O`Wm*v(0TMC(*wAIc1 zLKg`ghGT0!3+==Wli$ZX>*Pd47=Sd+?3y|8^^OYR`~*;RYarp(9ejh6vjGwoXp|Do z23Y

upyQ!=}d+hHgAm^D%N@G%Ss*_of$5e3WXb4`GO$oSZL_kpv*pBdi5n`IkzM zluB{az}eDgZC|!quIvd50F{5%1nmt?ia0L=Yc=16x^4(ED;he2;8|LMHt2K;(Zasq z2pNDXh;acHi%X|xY3T=}TX7)x?+M`L+z#R-VhRa~3yO?X`fNJ8?|ojyLSwCDC|%Ig=s@SDD5cXg0haO+SIB5e;#Gg)FxsHFFyglK@pH@62SZrC)kFz5sz z>I80KCk$2s$^(*4LP#rI3%2ja-@lE_M$4{@Ic`(KhC|^6lt|^^C=mMSFdaqocL=X$Ku4)aEDmWHcf9io7I!u}tW za$H!@UUalI3de3;Y;l*TWRYmrFi7KLtd|*qJtmBpGLEH6--pJn=Qf0^KpH?5CPZEp z8pK0*8pSu5m<%Ah3t15or-M~VDnT1u=c8R_i?Isd0bxu6!U)vbU%u-)odW2(}bQvuHY)L;C!At}+kMbtvD9i!cJ? z2DxJt$b^>aHp(LZO<(zdobqixgPY>+H!l4TWvyTuS;6>G{yqc^Bp^mtH80b9O=v{t zZ-Ql+i&TEqj?^Ae=r^6kccUV51y>;@?eFiu)`SmHTHuDM1rD&}N1gV~VV0u?f`Pyn z$YHMf=wSU}x?j4Ir~`~z$c1v9cr7UBv<7KlJ+P1M_7@BDM|+iDSRZF`zZ1bQ)rlKD zVKZkkk@XI8FL8N}$Gc7v*0soIAJM|1RQ%abk6w%G^@0XcK43NolIw^L8X3h8uEAU$ z3{c>Y+Aj-52)sIr;u}DRxPi=~gSUu=i1!oiXOX5aEaXM0rdl&R9NTWYGN&UTTk^0? zal1itz1&K?K6cUUmwQQjDD*Xj z%#ht|_x3HCF$T=_;N81Tu}6IVQ5Ko}AZ=)maNQHbC*bSOx+k{blob*x^=5{Oc2j7- zBF0@&>m2mS#n4v{j5)?I+32Fm62x4C=}6bQ1xg0;0HzLME#0U0e||`=7pX-eii>9I zkZA~cq_~ZpYZw^U_4M-U+$1sq!{OX?5XB=f#6Y$XlTIi@^PN*Gb;ZV*v z%Xa<|-}4U4tC`lS@hVsU(9q}n}dk}R#>=3IzKu(x;C(Hx;ER%P`2K72f2h2 zem_&?lH7J+kD~Ah+-f>EMXfePJS(v0E{$?RatQ`>Bw@ErBd!YaL8|pWunrVafn?1C z(4$UZfa;3gyN5whDR7qN5~BK=X`D44_nU6ZrnD+k*ozy{uw4_L3rMJyz7Wa8!>;Ay zCth;fIg_Z3Fz{8GH9>`bi zKm;73TQWmqrEds@g@t>16Y}y%86-c8gIoX$I&X>ktjz))xHQ*c$odml>dGNMH|IdX z6t%F(sAjkT5(8Q+r_Y|Hzjo~mOefJG(;0{~c!zZ0W`b^r5&gFcoIq$x0wP62UF@pc8W+hk=wTC>$umr(T-*tzeo7Pv1@fRZOZSwywbu1>LeT7 zV`PT7t}tnJfyM!WEW~7_q@?bNik^hoTptj$SX;Rum0*gLE{r0$@n~cP8TSBUd?4Tr z^KtZW53gOr(&{IER=~4@D3>NaJLvfQXhEy%yiFLih7b^VuC@85eHaXKlW*L(ub}W* zv=~O^OiHK!Kopbf?p1d7^etw6gFS^$1e>k$^j#OG;*K<$VGVVG)#krDQ1+JhgR3j? z<;(8iALdz((Tq9mr;CO`%Y_nh0t4*?O+kYqh+yr%)|B^C#a6}>LOJdrahC1Qgxl?` z#Bh{$cmuqvf(acMtH%}$12*vw4n7Mr>zI2Wu0eK(H0ntZG&D3;H^dH5hmn?E(Kgv7 zG1uYSl%sV)JrR%=h8O1_b^})3_*$^SXWP?=+j>KoB0OREq1h5J3G62@A`7a5;lzs} zJ6j6@-7oN&7|?vp2J@u4$VnEz3An>3%80~esMLs>V`xMg-~P{X zf##{7VZ~z))0XYM2v#+S=}n)0UWG&-593&dQ)1)qHS4^tUxtzRRwCKOhG~r0Faa>C zdDtT_P9k6jwYTx-&odZkUJ}Lv@`+8oJy5k!EE2>h7Pi9N+!~0Fp@1NyP9Ymch)iSv z3FAvk9Gu(G@T*2gX<+x(0vJQ7LIdcof+AvVUCU#WwcO&pHN%q(E8Fpp-HR-XN(=|P z>cr^(uQLF$NDo#5jO^6`!iCt@vyFR53tPL=2ud;Xx_yTrzcS^`S@8qzi@xXFm5AbP zr>q!BBf(%&+RUKozB$cBaq+>dcu2O?$NUnig%XBBiKFl4+4(GnL)GgP*M(|>xx%pm zV+_y!3ayA6QOwXVZweI$R~RN#EHljHdU|;_4$lS>+1uH5?|d<$e--s0$oDRC2lIb) z+o-6&Z=CrXNJI#8c>e*5A1mg?9#5wI5*P2`-PSQcKS&LC6Xjn)Zu&RX9@WOG<+6$Y z*I3NYv$3f4Egu2#mEJ`rU->6z=);qK8Lxk)z5}lBX_R(FxhNROzt0lH5)>fCSY+ku zJWKF%n7O};Ojy~iaqsVXr)^*sDA<<>vr^3FI@0XNp*o|tJnC2Ze@Gh1C}m)xQgl&Kg>giiZ}~H z&Ts-k#n4=)V7?)9f>l=B$jHZETs&Al$;}QvVBlu(4H#2-)h?9OvgFn1g92F8f;K;3 z`kQa`DR@yk5d0)2A#p`G8-k*c%i-5!M?ns5NTKBXZ-vBk)R9Gn{u;=#ZWa zdAqzvLAk1Z&1=3+a$4WG+5)ZD5#s0T`v8)pD0c&b8s;8^JqT3q(Ekj374h5Q ze6aU_-nd%~#zbDi#~7Rf58Sn@1jOr!;y+Pn#xl!pb@H+Lm&RbtNugR0IwgRHAz20G zb-|jh9WH*gx-ucAqVDTyvobz&Mn$~}%O!D8Vpw_>k#hTe60Cud*@1p;GvY4D$j4B+TGnx3|A1G02VfX2py9ILQAfY??D^~ zBK^QmCZJ?Y3R#OA5#wK?Jy9>EOd9&_^H+Oj7bXU|Czt5M6I2MZL6b&ftPrs^gnEId zdhcElwwWbDvoi?b>}8}5O!>qaDGZ+skFijEl@Ow($BVfKP$gbD3dV`ERk zr~HK9vXp?V^vdw7cKzM8X^l!JA^UrtY+tl;UngdKxS#yV-~F>6#*mTNzqqsb&M)9O z0EuTu%kRKm=z#75Plyzv=EA6cIrer==4EYjH96Lb4@$|(xcA@yoi{XvMPoHt zYtnZMGKTQ+Gg8vhO4nKarHDvK;%pN<8yz6yI|)yGZTrTJ8$b^}BqcE;Q{n%LBVhEv zNZNrc+X@7i4dDtPeOM2%O)n_5)v%{jlkSTf5&8J5Qoc|5i|Cam(mkLP5>ry1$Jl{C zM119n7X;?Jixy!cxbw=y| zZ!f9a!X8{sIly=j39EtWAREC72|O#noeFoDTWXuCl5>O|_wM1wye`L{e+qkCLR&lH zgy{pL$36j!HRRIbs(1cJE@3XJ4Gj{UHq`1NAC}(M(085g0zQ8CE+#$=^ah>nXKmYc zR%paWpyCWZSuQ-1m&V88(R ztb^J2-~bciD*^2MYjDFZ`wMh!pMeM+eOFtM$a~qp&6%vu!aA9MTh%H%B)LldVUqe$KNFUmyj4_2$h>F)NB1xzhJS*$>THi)xKAZ$Dj|G|N|nV=zR z*hzrQpLfN3IcUCpD*zwX;tDp^IP7wYh$cgdO(HZuii#?HK9)E1r{`ts5H3T>6qN6D zI^0zEElmB4WhDThw)Q{zuvva!hNHm+kgFl@Spy;gkijq#iqLhgd;DvjK7QQFVFC@( z^gJ{G91c4+I&I)5K~}KM=R|I%yE{E7ZI#DIr4B=|BGF&KqERnihDQg3#}~lhTMGd) zfj+5aVW{w7>U!sOI$`+y7?hNSDXJQXZ^4Mb518xt0HWh045*^Li-yf2fFmOD1(}SH zETDtfD3qpp2!e9Kj$4dR1MMrLBbxT#%3Ap7w zZ8GVfB*YS7J^1YG*n!V70iVQD4HF(KFq?y=&SZDH2SXjubqvsu4>FV<1!1$hwzkfx zZ?Mq5flvzSv^sVZXE6VA$1rmaA8B*}4flg_2gSz~eLx9-UK|WyQ9MvxAQF#(5B^G4 ziPR1+ybm7r$U_;Ny`@dAKNDRAcE?=)8LiwBSi@QGkNK z^d}J&fDLk$jSU}zTzR;iGBI-2);w^)4JR|-iw0p}nxl{p%*$0l&qSeV0P0gPnF7Jh z`@oe^s2KdgH~@?9GSgatDL`PF5EA9c7eam*T=N%5bhoz3?Gj$JyPH@Jd4}6g2e);g zH&dnb;?!{F5okm*qn83-ESK5Y}2_=amX79CVKkMkV0IuTi=0^ z=OH8yf#0g+8)NNjsWItGlo@iVZW@U&QVFIOIfN(^f895Y14j*o!yw1(1r2@@eNqh2 zH>=gj2fKO0YL*pStE*KooOj}GRPPXcRvDOE>MSZFd83#t=#glice*5&GQ?KsTCQGO zc}+o@#Q+189X6j7WVLpx{;$%mJRa+`-9J)7WGRKhAZuicN~J<5v{|yW*msqrh)NA2 zk0e>1HWkUfBu0xCvMXh$O`fP|Qwr7Od@oJsozHvTIp>dK>Yw?DpP&1_?(6z)w@>b# zgx^H|>$#SI+Ly`KfYE2B9(+B7nIC&bx1cBo@5 z$=^~)>$kcF$NZ?sGSH?;<4w&H}FRs6#%(iiMdCoa#N425G%1#0jsyN6sl{S z+{nfH#mlzCmH}RNi=OMAzvitva8TV4C3#)?+_tjUDCMSjsLupI#FI7%oqoeNmbF>DuNzh z5(B*h2^j$mVczDaC_98B)*WtqmDRuWZhKwBf%1tcU^%f@t4yqhp4j^+)vBw_7G_1r zRpK2=;vF_OH*2^xh(e1?d47~Y1Shhfs31 z&YwAZkuV{}AV;FHNGjIE4(EgD__~^T@6Vf#w>8CsB19+Dy!1N0NaLkwXWjj&wPRyB z_p@pXav!g8id^U!Ipr`j!6l|)5#GaVn@##RP(-}iP3H(hD$nFGJsfg7gpfgF7%y)= zw0S{xYQN+n=O@E%87|37B@JD8%_8swIV&8Ni)~AV#CnBG^Dc4Ceb{egX9^s8CG-?w zZS%d`_|U>*44hn7r{e51&ER2rT$PIr>%4eiME_v-91X+bOK-#MBE)6xxd17xnLfdy zd3>Hqx6pqKxPx>(1hC^scz|6-l=j_7Axe%SaClSMUaMyT#iGS$RIO4}l*Hs^2Ga5a z9ajxc;bg`eS{6O>{8IWPO=AM5&vk>SniF22FOh9RQFu_%kjEUxpWmaSr;vq+9NF+} z-NE34l9ZGG)sEkJXsW%PY-7{jC6P5dTxz%XCP~}ajgM?O{K1h?W~SSV%qByfgRfEn zD2o^H1h@1KBycikEtpE4UpoE3uk4e!-y>So-m%VLj8ShIvFd zHn-$EzAxq9m0r6>138&aAXnX<)^%Kt{dP{jhV@AWK=f92W;XjDbbtiKFHVEq4mP7DKVLE*5&Go#CK5; znU70-fCaE&zoo!LbV`5;vMzszT1p);Z?qF3pS+7?pHSeC&ymKavGZQ-W6QFI9!KoW zR0c0d-?s706P3y=*|y+$nw?>Kn!i30D494{iGCoj0QfEldyX7{6=$57M-UE;4S_)xP z73@4aU{NCO2PX_~FLa)iU4W`FaIq=z+|K;N(!tC5SlpaG-9qbrih9Dr!b_)hgv_V;B%uT$3W z3{pxB6hTN5clh1rw>q@=&;;$uO4EM0@%P3DF^fa_Z+H!FpJc%J^y!nx zmVWtL_4n@^phU~|2KX;=Q-s* z-L`t|>1)e#Z5Llm@@`hZ$;-WV#x4*Xi7K`m-u?iQQ64NE)}+Y-P~-^b8~kG&2%78F zdbk!2w`B^(GcrF;T4A72k+}b%U^h-m3lY-J&z|0OUGavyfJWybtWg;yB_52a$j@5| zeGa?eHy`d=YGio#fcUyZw^gWs1;M%~Rl>YHyG{taoW^=_7?iBC&8b5akwXD*er z!t8gaqQc~v5tq~@$BYONE^w_90EZwP|W6L z+hfHKUcM4DC`z=cjXvB@g4jvv>6{!lKMn`fOHNRIROFuQQw6yihQ9GwKy*xu4**Ii z;SbtKY?Fk#w|$K%u@o2y>1w>1cUumtt-Ae@bCM6s-oZ3{xL1^OrasI2#|s z37~kRMSBDsr;xDlq0-WY;iU7yynemT7iiDAOGljo3%`v?u88rbY2<2^}|?2A5<@N7}#6Ni|I#x{Zg@|2Fm6 zzYXET_@tdsF{w1dG1~Xz{UVM%oAQ0|x5ReBkkT_yP0|}qVK*OVG=Ae$`X2`r9 z5WqvKE}CyBWfaRwr&Z}#RH@EB;n*K$55Mh?5m_cSH(<$8{z`1Irq!f}HI~d}4~_%0oZPRg^>y#tlW)sRKRY)g^e zhu68g*Xq-=Pe_kLA58HQ#=xH#jK73@U8AB{yn{o{Yf13pIEu5NS9aI@%CL^*;tS>( z?7dd@eJnw&=)8L_Rl+4QrgNeXUmmd$ndbPXbEA4(ual-($=}8|$|Pjm#vFF!UxWzl zTa6tu?b>} zttYfesRa!lGx5K}KhSe&ZY4LL`o1M|G>fsGol&qLsNrN#ya%+m8x-Ra_eSj4H#lI} zG!Ehfrp0~5tCg2j^-!2(wic>xOMLx56+d$W64rvu7LGD}-U{9|T$8X^99i@V5e|n! zEVFd!=1aPsTJ=|?gO@S2r(`h;-D2|^rq`;^3Upb8*{`l;`WQ3lK!MV{*x{S$5{0aC3i(sm+7U1vQZ>b(*Zj3( zMv`DP&`khy#54h-tE;O6h980QuXtjLfPgVPGvA95TN3`6C|y`{3PI^&jqt%w4N;>y zd|btO7OgJ@XT|3@y1$K5zwMH2GObTk)-~(Y!DlwH$wdi<$%DsD076vPxj@@gX~?Qk zSJ_sx%f~0D{2RJvVt;_f1opAqU(}NegNRwFpr9ad&36bG!M5dOP^=zwrn49BV89vL za%~G-F6UoWxib2t%F^<=Qj{V_IjW@k6)Lt&1z_yV%$dD-{yvp6ddbSx6G~>PvH0TU z)T>7VGk0@tk2Dcb$va%C+_`WkVCL{%ypRZlZ_`Lw8?S&E1k;=IAYj5#@lm6nL1tl8 zi|2^Ptja7+G;6)ik(_5Ns_v`Vz$IzRX&M>#^^JtiVH?jZq4{PJQCFO&4iuKdKT)sOm{x{E5G@{3sv^A;U6Zi9dGa{7peNjfuu z!Iq1YyPN=CMZ4%#SRfQYu!5d$sz@@95tkb~fcF0ZB$c3Hd&pxAf%>`K2lTmtmlh9z zyF7#v)q1mMtg$6#p;bqLv!+>FMY6_*<`J9EiNc$M51UIYGnbglQDu6e3oq5gFx|0` zXAotGNI#;k(G%yDV2{@@Dy+B8#%BDnF<>Mkpk+NEn4$Zp{{X zSy@hK7&3IEcO!uv;C6YoZr^FXQy;hdQD+wP%-#yUgX{#ene>GaBF_Gwg) zbU;(OJgWRMEGEUVTV!PZEGi8PMBmH^1zM}9vK28pP>wRdzLDOD(sj3On@5;ENI9QJ zB@|Ep@ng!qFJegP(SYF+jEW$HzAAu21@MoY&mLXDvQM3=ek(%ac9n$fO#h>CkN{?% z-nFjeKBU&#<5Kw3Y+1&x54-cP3dRYYa2q?ibFuNoUXflo<<<6j7|+86VW9K#y8{^8 z>v1d?k((nuQ)nXonsxH@HKUaCvqJhh&T%#rt)E=rXxvsS?3A|1;YQ0;wwx^|u*waU zJ;F|=7vH;dY?|e-+1Hg3@5nw{Q%bNH+&#+eVySzQH7xd!QDZpp)%+dr*65_HG;?u* zxHN62TA`kJaNpBp&W7tN6e=Pl;ykS+Rybp%)v#D5ss-g|t$N%bd^tsRWk7m|RLsEipCFj&1Oz zY3lSb5A!dU`PAK(BSG$#^|q$baaOio4K66o0+)j$v-S37K6qLgRxERQ8~Q1eQ${I^ zF1JK%a`kBuvYlsY7NNQnP99;QxZG^#eqI|{s~BCNI}PcDF9B%QCCT|u@wyjr<{%l` z>7oGKIRKyrnTdA3qrfCdN)J;!e)SbdxpGZAdHibDJg$?bAvs62E6uCS{&Yfjb?lz{ zW~=jM(cf1ZMnKBA+=Zt=X_}+AS;*XY?N=QcS~n=f8{jm7m6WTDXbfqfUYVJh%Jr8p zJ%e2{$lp>%W3PXo!_mb<`$%ib4)!Se*19MvX3CFyth{ z1FtIzdf1~mogWUw)X#;BTY_vIP1XBlwd5 zUp*-H-pII38P({fkOz?p=acdui}7_xs*lah2s~{_<}i@YZu&m&d~*HLm2`TBvSG&% z78#Zh=}O{YAPI4LBCZh;#HAOjdy$2N{Hv*8B*J?k*{Nx0unc+w>^7mdzOIg>rl?H5 zYr=Cv&nrk==`F46$ecw|{5WRr?|&@*QKP)hM*fti-5LKq(}NST=bF0ktU0}q1FFci z5gg|rO^2u+*l%f9SSe1oj7t+ORP-I!~;WEJXduX zv0K4@LJYmJ@BRegE&}~s& zUq5B{?%k_7lyCxNCK*(SF!v=x)z_h#*1JWLu_f{^KdAPe#D4ZJWR}t zviYHc17rKa@Ue!gJJka!(sMPey`l?SHObEEd9u4d_?B66ru@mH7g+z?;(zJsL2EpS zU}&OHNVUYEoIjA9<$$fq!#XU@G@5t$7I3)zfYx0zK!m}7w8RJ|K5}nj6+(tOMlp`* zW~>Pe%JHXoGQ9Q)4E&!%Sf7rFfS`OYtc!yXNkI%ydE(Lvx7&&FTdOt=AP=A|{aP5S zR+FPE=EC5|tWmAM*?s<9hh??R0)bkvj^QnjOn1at1dW`>ju{7>^?lBF6v#N^cANj* z-@V}XLx<>U61rmmre-;W6$~PQ>QkJIPF>Ty8U086I(0PkHuz?qw5i{eX`0AVv=~om zM6%j=Zhqe8Dcyt2hyS96D7hj+Kx!)D>xXa|4px~wfG^<8k*L2ww1lAbY^OE%IVU|r zYL;0VzrU!a>NHqs;IBv+AcpZu4lyJk^$&tM4P-vDoQBCUscu-vURb`)(w=BBkTx%3 zFV524r3fF(#dY$F7Kxz+{y0pIMtD&_ApC-K1Qbq2!I`7n66PAxIt-n&h_#sMJYR@4 z%d}sv&8XLqRjXlD4H+~5wX71RkI{ZHa0<|6=CxJ3AvB|^p;yxBLRZspfv0@2p$mW4 zf{&UVFKqiF8rRDESCUVidEr`GGS57rPF>U4%DHppD_qvlJx*~C)d%HdE~}dDuYKH_ zc{MV?9?@!m=DOd!VWOjgYM`aXO6IuMrB%f>U)15a&AgN^>dC|7+^bu%{l&%B=$gl! zkU<0BRfkzK2gey9El|(_H$Dhxh|2g4#oil8)QaOSTL+10981N>BefQjgBmYC`ym}AwUIEnn z7kgQ;b?ZE~rhkZ>-C34Wwby4&!0^d7%gMg|b{_9@+IOaPv7fEtz^TWfxNMJk>b~z| zB`4=89DnE@qSE~`hA-{hj6tDw5>v#aR!!@wG6@)5|H93nAlH!VH!m@%l`F-RTU7oq z(m5qqkET2v*Rx!7)x?bv6~J$M-&<_hK(}KIaldtYpeu|7AK1~nEZZ3r3UbDAj zm;Mp}tdDOUkRlBX9NG^cdwuid`bNDI;gL1gWF^n67G34C)JIpEEA*#>>h+aeTrC2f ze#VZik-6PhAN5_0_r*i;H$Ks6JmV9ar_q#nOQ9s>9i#Etrd45ipZtD?w+Pu5=%(i} zumSK9r=CZxDznIdD~JO}_SGG9eA3d=3-=CXWM*4>1$J_0_#DpAf;EDtX;d{OJ>U}un8oV zMv$=y6d}v6l!bqVdRlqUvP6 z|ET$o_=35guGi9ksn0C)@Pv>7%z!q5@L)7f$mY@;Qu1s0xBupwhS* zJ?MJ4^yX5cQwVb~4v!<^O>`_h&b%*z-kFdO0`mZ}WMLx-xCJcvsSN9{{+N|VzI~%0 zA)+pTKXEW1NTQZ);dVd+IDhQ-KgB;pBWb0`{)tT3wlo@TeYv;iE)RfxQ1n(?(toyP zGd_R%t!X;_!fub4q#e~JYhsnLX;qkwDN=G3)zl8d!(P4#w z+r+U#q?|*pZ2FR(7kcsduRc!&634LbV{pnM`(-66TA^bF7xG>BL$|&3&0IEX-|6hE zkBMK$pPcQ?jLj&4;E++ z8*mH)8ip{tZ5Qmsph4H5TsCxZwEfUFKEGkQdNnX;wPo*r!U>8eYHMn4V@0X-yQk*+ z^W%qu!+$>#uYy=Vg*A;A_DdR`bP92SdQB>-r7!`dux7-=kGV8DNgL9Z>>WFH(2ziJ zkWQG!%J1DX2V#JG1hW$m+Zu^3E*hP}5v(!|+;c^2_Og8BTk)b72iPusKV_L3+6Y;U z`G#~?i4N}u?)Og%LEJkHVk1F#1k-g@6L@)f?*f#n#NSDbLY%99nD6|) zeesnJ`*B|z*_Y6DZvkbXPk(_+L<4V~^=C*F6G1|Q>$&ku4#2^osi&!Drz?L~_bX&^ zEC0$lggrzUX4Uk(4Y@Jm+N(!KM|rS^P?gk33o|a(_zKLsaL04~=K}+CanRh=YFr|V zpCG>=7I54VFn=TgMGm?Qmw==S+%Ylxl(mrrag1?pNPOA;8-n@=UhV}AN}*spd-m+1 zx3OjKYq_}ic;~dDIhy>m67h(ib5#F(_1(d!#ej+fQQnwCHTjq$Q8^#8xF5}I9n z&<&WcD`CSUgBXR>esl%NatN|pau~Zta=^DDQDcH;s0dxMh!;-yJ;q|0jk)UWr;WpbW z!B~!t9fTo;eOYV_kMt4!_4Vf^3tHsv1DODM&-i@YpH7_9@2G~oyckW1XC8b*zA zlnas%WPq-{c>}*e57?NXI{JWU-wIIOh_)n*cSm1?7-Km?BS;|veiTHw6LK#~_y2jV zj!miz*5y}lPvhC0D~ttgN{B5 z+=TRPHC5AZoG7iG&3Ow!j&GDyq>Q;G zZy*NW4nnB@87^m|&GeV)JhCHBUhmN7)0Sa2&fW?}_6CCM#8sH)X z4Gad-8Il+JU9f&spEpr2WMrK$D|=%;6@Kzj;(9Xsw?A;Q<6e|jJxp`O1F&IPy<2Oo zwsB*-7xtv3$ge$Pj$dghPI3nbs0p0~(W(xUb#4iQz@lR=2jeF`;u2Aum z))JILikv3^inIk+&Ltw39x%%2186nO$44UUgtiEtLVj8dl&A{sm1sNiZ=!#r>;@bU zURPqF-Q#57qbjf=7 zcvNqGd$*YAE}S16407)w%xk%$qcqi5?1a|R6vT$5BD|RLdyT69gpxa)^0iU%xdgmG zPBTJ5Dm-RvH%i1FIQ0Eo6U`jM12^xgg1$pq564y$yEeVOu?3<`B-|Ha3kXzbpGtXrov^L{+ zejb&e`{6L5Fha4w2}h$lDshh#F4z6HYS$DET^dQcsR-FF$@hh+2hrRWP(GeGyVTgw z#f)H0Ofkn76)XstRHIAS0!~rP5ZXb@=gyr=F{`Aa;nI@PB!kZQ` Date: Fri, 8 Nov 2024 15:39:46 -0600 Subject: [PATCH 16/20] Update api --- docs/developers_guide/ocean/api.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/developers_guide/ocean/api.md b/docs/developers_guide/ocean/api.md index e1d8d50a2..99da871be 100644 --- a/docs/developers_guide/ocean/api.md +++ b/docs/developers_guide/ocean/api.md @@ -53,6 +53,34 @@ rpe.analysis.Analysis.run ``` +### barotropic_gyre + +```{eval-rst} +.. currentmodule:: polaris.ocean.tasks.barotropic_gyre + +.. autosummary:: + :toctree: generated/ + + add_barotropic_gyre_tasks + + BarotropicGyre + + analysis.Analysis + analysis.Analysis.compute_error + analysis.Analysis.exact_solution + analysis.Analysis.run + + forward.compute_max_time_step + forward.Forward + forward.Forward.compute_cell_count + forward.Forward.dynamic_model_config + + init.Init + init.Init.setup + init.Init.run + +``` + ### cosine_bell ```{eval-rst} From 299c320cc3a48d77d6d6473140f04d4d373df9ff Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Fri, 8 Nov 2024 17:32:19 -0600 Subject: [PATCH 17/20] Add barotropic gyre to dev guide --- .../ocean/tasks/barotropic_gyre.md | 59 +++++++++++++++++++ docs/developers_guide/ocean/tasks/index.md | 1 + 2 files changed, 60 insertions(+) create mode 100644 docs/developers_guide/ocean/tasks/barotropic_gyre.md diff --git a/docs/developers_guide/ocean/tasks/barotropic_gyre.md b/docs/developers_guide/ocean/tasks/barotropic_gyre.md new file mode 100644 index 000000000..334a7b506 --- /dev/null +++ b/docs/developers_guide/ocean/tasks/barotropic_gyre.md @@ -0,0 +1,59 @@ +(dev-ocean-barotropic-gyre)= + +# barotropic_gyre + +The barotropic_gyre task group is currently comprised of one `default` task. + +## framework + +The shared config options for `barotropic_gyre` tests are described in +{ref}`ocean-barotropic-` in the User's Guide. + +Additionally, the tests share a `forward.yaml` file with a few common model +config options related to time management, time integration, and Laplacian +viscosity, as well as defining `mesh`, `input`, `restart`, and `output` +streams. + +### init + +The class {py:class}`polaris.ocean.tasks.barotropic_gyre.init.Init` +defines a step for setting up the initial state for each test case. + +First, a mesh appropriate for the resolution is generated using +{py:func}`mpas_tools.planar_hex.make_planar_hex_mesh()`. Then, the mesh is +culled to remove periodicity in the x and y directions. A vertical grid is +generated, with 1 layer by default. Next, the wind stress forcing field is +generated. + +### forward + +The class {py:class}`polaris.ocean.tasks.barotropic_gyre.forward.Forward` +defines a step for running the ocean from the initial condition produced in +the `init` step. Namelist and streams files are updated in +{py:meth}`polaris.ocean.tasks.barotropic_gyre.forward.Forward.dynamic_model_config()` +with time steps determined algorithmically based on config options. The +number of cells is approximated from config options in +{py:meth}`polaris.ocean.tasks.barotropic_gyre.forward.Forward.compute_cell_count()` +so that this can be used to constrain the number of MPI tasks that Polaris +tasks have as their target and minimum (if the resources are not explicitly +prescribed). For MPAS-Ocean, PIO namelist options are modified and a +graph partition is generated as part of `runtime_setup()`. Next, the ocean +model is run. If `run_time_steps` is provided then this determines the run +duration, otherwise the duration is 3 years. Finally, validation of +`layerThickness` and `normalVelocity` in the `output.nc` file are performed +against a baseline if one is provided when calling {ref}`dev-polaris-setup`. + +### analysis + +The {py:class}`polaris.ocean.tasks.barotropic_gyre.analysis.Analysis` +computes the L2 error norm at the final time step of the simulation against +the analytical solution for the linearized dynamics. This step also produces a +figure with the model solution, the analytical solution, and the difference +between the two. + +(dev-ocean-baroclinic-channel-default)= + +## default + +The {py:class}`polaris.ocean.tasks.baroclinic_channel.default.Default` +test performs a test of the linearized dynamics. diff --git a/docs/developers_guide/ocean/tasks/index.md b/docs/developers_guide/ocean/tasks/index.md index bba11ef80..f0ec3f1fe 100644 --- a/docs/developers_guide/ocean/tasks/index.md +++ b/docs/developers_guide/ocean/tasks/index.md @@ -6,6 +6,7 @@ :titlesonly: true baroclinic_channel +barotropic_gyre correlated_tracers_2d cosine_bell geostrophic From e7e0bcfaff3ea8793501ed16dcb58fd2a72a5791 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Fri, 8 Nov 2024 17:35:37 -0600 Subject: [PATCH 18/20] fixup forward --- polaris/ocean/tasks/barotropic_gyre/forward.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.py b/polaris/ocean/tasks/barotropic_gyre/forward.py index 173c28fd7..baa9683a4 100644 --- a/polaris/ocean/tasks/barotropic_gyre/forward.py +++ b/polaris/ocean/tasks/barotropic_gyre/forward.py @@ -77,8 +77,7 @@ def __init__(self, component, name='forward', subdir=None, self.add_output_file( filename='output.nc', - validate_vars=['temperature', 'salinity', 'layerThickness', - 'normalVelocity']) + validate_vars=['layerThickness', 'normalVelocity']) self.package = 'polaris.ocean.tasks.barotropic_gyre' self.yaml_filename = 'forward.yaml' @@ -156,7 +155,7 @@ def dynamic_model_config(self, at_setup): def compute_max_time_step(config): - u_max = 1 # m/s + u_max = 1. # m/s stability_parameter_max = 0.25 resolution = config.getfloat('barotropic_gyre', 'resolution') f_0 = config.getfloat("barotropic_gyre", "f_0") From 523f61d4f4546837ec176478a4feae1c55974650 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Sun, 10 Nov 2024 18:54:48 -0600 Subject: [PATCH 19/20] fixup docs --- .../ocean/tasks/barotropic_gyre.md | 2 +- .../users_guide/ocean/tasks/barotropic_gyre.md | 11 ++++++++--- .../tasks/images/barotropic_gyre_forcing.png | Bin 0 -> 178928 bytes polaris/ocean/tasks/barotropic_gyre/forward.py | 13 +++++++++++++ 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 docs/users_guide/ocean/tasks/images/barotropic_gyre_forcing.png diff --git a/docs/developers_guide/ocean/tasks/barotropic_gyre.md b/docs/developers_guide/ocean/tasks/barotropic_gyre.md index 334a7b506..b1f28a4c1 100644 --- a/docs/developers_guide/ocean/tasks/barotropic_gyre.md +++ b/docs/developers_guide/ocean/tasks/barotropic_gyre.md @@ -7,7 +7,7 @@ The barotropic_gyre task group is currently comprised of one `default` task. ## framework The shared config options for `barotropic_gyre` tests are described in -{ref}`ocean-barotropic-` in the User's Guide. +{ref}`ocean-barotropic-gyre` in the User's Guide. Additionally, the tests share a `forward.yaml` file with a few common model config options related to time management, time integration, and Laplacian diff --git a/docs/users_guide/ocean/tasks/barotropic_gyre.md b/docs/users_guide/ocean/tasks/barotropic_gyre.md index bf5cad477..14a154f1b 100644 --- a/docs/users_guide/ocean/tasks/barotropic_gyre.md +++ b/docs/users_guide/ocean/tasks/barotropic_gyre.md @@ -1,10 +1,10 @@ (ocean-barotropic-gyre)= -# barotropic_gyre +# barotropic gyre The barotropic gyre test case implements the Munk model for a simplified, wind-driven gyre -[Munk 1950](https://doi.org/10.1175/1520-0469%281950%29007%3C0080:OTWDOC%3E2.0.CO;2). +([Munk 1950](https://doi.org/10.1175/1520-0469%281950%29007%3C0080:OTWDOC%3E2.0.CO;2)). It is a variant of the Stommel model except it uses Laplacian horizontal viscosity rather than drag to balance the wind stress. As such, this test case may be used to verify the Laplacian viscosity term and the wind stress forcing @@ -25,7 +25,7 @@ produced: ```{image} images/barotropic_gyre_solution.png :align: center -:width: 500 px +:width: 800 px ``` ## mesh @@ -87,6 +87,11 @@ $$ where `tau_0` is given by a config option. +```{image} images/barotropic_gyre_forcing.png +:align: center +:width: 500 px +``` + ### config options ```cfg diff --git a/docs/users_guide/ocean/tasks/images/barotropic_gyre_forcing.png b/docs/users_guide/ocean/tasks/images/barotropic_gyre_forcing.png new file mode 100644 index 0000000000000000000000000000000000000000..b3f79bcfd85d5cee1c570a9ff1da0136c149eff7 GIT binary patch literal 178928 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

uS=*9 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 literal 0 HcmV?d00001 diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.py b/polaris/ocean/tasks/barotropic_gyre/forward.py index baa9683a4..8e2c56b8b 100644 --- a/polaris/ocean/tasks/barotropic_gyre/forward.py +++ b/polaris/ocean/tasks/barotropic_gyre/forward.py @@ -155,6 +155,19 @@ def dynamic_model_config(self, at_setup): def compute_max_time_step(config): + """ + Compute the approximate maximum time step for stability + + Parameters + ---------- + config : polaris.config.PolarisConfigParser + Config options for test case + + Returns + ------- + dt_max : float + The approximate maximum time step for stability + """ u_max = 1. # m/s stability_parameter_max = 0.25 resolution = config.getfloat('barotropic_gyre', 'resolution') From a038dfbdf06040e73139c17f18f810d9fa0ad676 Mon Sep 17 00:00:00 2001 From: Carolyn Begeman Date: Tue, 12 Nov 2024 13:03:46 -0700 Subject: [PATCH 20/20] Apply Xylar's suggestions from code review --- polaris/ocean/tasks/barotropic_gyre/forward.py | 4 ++-- polaris/ocean/tasks/barotropic_gyre/init.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/polaris/ocean/tasks/barotropic_gyre/forward.py b/polaris/ocean/tasks/barotropic_gyre/forward.py index 8e2c56b8b..2424bdc5d 100644 --- a/polaris/ocean/tasks/barotropic_gyre/forward.py +++ b/polaris/ocean/tasks/barotropic_gyre/forward.py @@ -1,5 +1,5 @@ import time -from math import ceil +from math import ceil, floor from polaris.mesh.planar import compute_planar_hex_nx_ny from polaris.ocean.model import OceanModelStep, get_time_interval_string @@ -124,7 +124,7 @@ def dynamic_model_config(self, at_setup): rho_0 = config.getfloat("barotropic_gyre", "rho_0") dt_max = compute_max_time_step(config) - dt = dt_max / 3. + dt = floor(dt_max / 3.) dt_str = get_time_interval_string(seconds=dt) options = {'config_dt': dt_str, diff --git a/polaris/ocean/tasks/barotropic_gyre/init.py b/polaris/ocean/tasks/barotropic_gyre/init.py index ad5a9ac4b..e36448b14 100644 --- a/polaris/ocean/tasks/barotropic_gyre/init.py +++ b/polaris/ocean/tasks/barotropic_gyre/init.py @@ -50,12 +50,12 @@ def setup(self): nu_2 = config.getfloat("barotropic_gyre", "nu_2") # calculate the boundary layer thickness for specified parameters - M = (np.pi * 2) / np.sqrt(3) * (nu_2 / beta)**(1. / 3.) + m = (np.pi * 2) / np.sqrt(3) * (nu_2 / beta)**(1. / 3.) # ensure the boundary layer is at least 3 gridcells wide - if M >= 3. * resolution * 1.e3: + if m >= 3. * resolution * 1.e3: raise ValueError(f"Resolution {resolution} km is too coarse to " "properly resolve the lateral boundary layer " - f"with anticipated width of {(M * 1e-3):03g} km") + f"with anticipated width of {(m * 1e-3):03g} km") # check whether viscosity suitable for stability stability_parameter_max = 0.6