schimpy package

Submodules

schimpy.archive_ts module

Archive SCHISM time series outputs from station, flux and extracted output from a “study”.

Goals: 1. Allow outputs from multiple scenarios to be collected in one directory by adding labels to the name. 2. Translate from fortranesque format to csv with # comments and datetime indexes. 3. Assure that the datetimes are not affected by floating point precision of the time columns 4. Add scenario info as data so that origins can be identified and data can be concatenated.

schimpy.archive_ts.archive_flux(rundir, ardir, scenario_label, stationfile, scenario_data, runstart)
schimpy.archive_ts.archive_staout(rundir, ardir, scenario_label, scenario_data, staouts=None, stationfile='station.in', float_format='%.3f', time_unit='s', multi=False, elim_default=True, do_flux=False, time_sharded=False, runstart=None)
schimpy.archive_ts.archive_time_series(rundir, ardir, runstart, scenario_label=None, scenario_data={}, staouts={}, stationfile='station.in', time_sharded=False)

Archive time series from rundir/outputs to ardir

rundir/param.nml must point to a file with the correct run start

schimpy.archive_ts.create_arg_parser()

Create an argument parser return: argparse.ArgumentParser

schimpy.archive_ts.ex()
schimpy.archive_ts.get_ordered_files(loc, pat, time_sharded)
schimpy.archive_ts.infer_runstart(rundir)

Infer runstart based on param.nml in directory rundir

schimpy.archive_ts.main()
schimpy.archive_ts.main_hardwire()
schimpy.archive_ts.process_extracted_scalar(rundir, ardir, extract_data_file, variable, model_start, station_file, output_file)

Process extracted data into a time series

schimpy.archive_ts.shard_number(x)

schimpy.base_io module

This module is a simple common base for text file IO. @outhor: Kijin Nam, knam@water.ca.gov

class schimpy.base_io.BaseIO(logger=None)

Bases: object

Common IO routines to handle text inputs

Attributes:
linecounter
property linecounter

schimpy.batch_metrics module

Create metrics plots in batch mode

schimpy.batch_metrics.generate_metricsplots(path_inputfile)

schimpy.bctide module

schimpy.bound_linear module

schimpy.bound_linear.bound_linear(z, z_low, z_high, val_low, val_high)

schimpy.cencoos_download module

schimpy.cencoos_download.cencoos_schism_opendap(lat_lo, lon_lo, lat_hi, lon_hi, file_base, to_cache, from_cache)

Download cencoos opendap data for all time based on a bounding set of lat/lon file_base : str prefix for files to_cache : bool whether to stash data in numpy arrays to make it easier next time from_cache : use cache rather than download)

The strategy for this download may change with time. When the script was originally written, blocking the query in time was very inefficient

schimpy.cencoos_download.merc_to_latlon(x, y)
schimpy.cencoos_download.time_block_report(message, told)

This routine is for reporting incremental timing of parts of the script

schimpy.check_mesh_skewness module

schimpy.clip_dems module

schimpy.clip_dems.bounding_coords(image)
schimpy.clip_dems.clip_dem(xlo, xhi, demlist='dem.txt', outformat='AAIGrid', hshift=False, prefix='clipped', verbose=False)
schimpy.clip_dems.create_arg_parser()
schimpy.clip_dems.main()

schimpy.combine_consume module

schimpy.combine_consume.appears_done(wdir, fb, exten, firstblock, lastblock)

Decide if entire file block already appears to have been combined based on existence of combined file. Date not checked

schimpy.combine_consume.archive_blocks(ar_file, tbase, blocks_per_day=1, ndxmin=1, ndxmax=None)
schimpy.combine_consume.combine(wdir, blocks, fbase, combine_exe, consume=True, assume_done=True)
schimpy.combine_consume.combine_consume(is_test=False)
schimpy.combine_consume.combine_hotstart(wdir, combine_hotstart_exe, minstep=0, maxstep=99999999, consume=True)
schimpy.combine_consume.create_arg_parser()

Create argument parser for

schimpy.combine_consume.detect_min_max_index(wdir, sample_fbase)
schimpy.combine_consume.do_combine(wdir, begin, end, filebase)
schimpy.combine_consume.do_combine_hotstart(wdir, step)
schimpy.combine_consume.failed_incomplete(e)
schimpy.combine_consume.gather_ppf_names(wdir, blocks)
schimpy.combine_consume.main()
schimpy.combine_consume.prune_ppf_files(wdir, blocks, fbase, list_only=False)
schimpy.combine_consume.setup(wdir, filebase)
schimpy.combine_consume.split(alist, n)
schimpy.combine_consume.touch(fname, times=None)

schimpy.combine_flux module

Command line tool to merge possibly overlapping flux.dat files from hotstart runs

schimpy.combine_flux.combine_flux(infiles, outfile, prefer_last=False)

Merge possibly overlapping flux.dat files from hostart runs

schimpy.combine_flux.create_arg_parser()
schimpy.combine_flux.main()

Driver to parse arguments

schimpy.combine_flux.test_combine_flux()

schimpy.contour_smooth module

This module contains tools for a smoother for DEMs (currently tiff format) based on curvature flow The algorithm is based on one by Malladi and Sethian, and results in a simplification of contours while allowing sharp gradients as long as they are persistent. So it is not a cure for pressure gradient errors a la Hannah. The script shows some artefacts of a time when it wasn’t particularly stable and could run out of memory. In particular, the algorithm dumps out intermediate arrays as it goes along and these have to be visualized or saved using the appropriate subcommands or functions. Stability is no longer an issue. it has been good for quite a while. Not so sure about memory. We’ve not tested a big problem yet on a big DEM on 64bit python.

class schimpy.contour_smooth.RasterWrapper(filename)

Bases: object

Methods

write_copy

write_copy(filename, data)
schimpy.contour_smooth.calc_f(t, data, width_shape)

Right hand side of the semi-discretized operator (in space) so that it can be integrated in time

schimpy.contour_smooth.contour_smooth(input, scales, max_time, nstep, report_interval, fill_val=2.0, **kwargs)

Driver function for smoothing a DEM

schimpy.contour_smooth.contour_smooth2d(dem, scales, max_time, nstep, report_interval)
schimpy.contour_smooth.create_arg_parser()
schimpy.contour_smooth.main()
schimpy.contour_smooth.save_smooth(dumpfile, original, outfile, **kwargs)
schimpy.contour_smooth.view_smooth(file0, file1, levels, vmin, vmax, **kwargs)

View the dumped files to graphically explore smoothing progress

schimpy.convert_linestrings module

Command line tool to convert SCHISM line strings in YAML to Shapefile and vice versa

schimpy.convert_linestrings.create_arg_parser()

Create an argument parser

schimpy.convert_linestrings.main()

A main function to convert polygon files

schimpy.convert_mesh module

schimpy.convert_points module

schimpy.convert_polygons module

Command line tool to convert SCHISM polygons in YAML to Shapefile and vice versa

schimpy.convert_polygons.create_arg_parser()

Create an argument parser

schimpy.convert_polygons.main()

A main function to convert polygon files

schimpy.convert_sav_class_to_number module

schimpy.create_mesh_n_levels module

schimpy.create_vgrid_lsc2 module

schimpy.cruise module

schimpy.cruise.create_arg_parser()
schimpy.cruise.cruise_xyt(path, station_data, base_time, outfile)
schimpy.cruise.do_depth_plot(station, cruise_data, surrounding_profiles, ax, xlabel, ylabel, add_legend=False)
schimpy.cruise.gen_profile_plot(base_date, cruise_time, survey_file, model_file, station_file, xytfile)
schimpy.cruise.gen_station_xyt(base_date, cruise_time, survey_file, station_file, xytfile)
schimpy.cruise.longitudinal(cruise_data, station_data, ax, context_label=None, add_labels=False, xlabel=None, xmin=None, xmax=None, max_depth=None)
schimpy.cruise.main(base_date, cruise_time, obs_file, model_file, station_file, xytfile)
schimpy.cruise.match_cruise(time, station, x, z, times, data)
schimpy.cruise.model_data_for_longitude(cruise_data, station_data, x, z, times, model_data, base_date)
schimpy.cruise.process_cruise(path)
schimpy.cruise.process_stations(station_file)
schimpy.cruise.process_xyt(path, casts, base_time)

schimpy.cut_mesh module

schimpy.download_hrrr module

Created on Fri Jan 20 09:07:50 2023 Download NOAA High-Resolution Rapid Refresh (HRRR) Model using AWS bucket service

schimpy.download_hrrr.create_arg_parser()

Create an argument parser return: argparse.ArgumentParser

schimpy.download_hrrr.download_hrr(start_date, rnday, pscr, bbox)
schimpy.download_hrrr.main()

Main function

schimpy.embed_raster module

Embed finer gridded data in coarser, using curvature flow smoothing to reconcile

Main function is called embed_fine

schimpy.embed_raster.create_arg_parser()
schimpy.embed_raster.embed_raster(input_fg, input_bg, output, nsmooth_init=2, nsmooth_final=1, plot=False, max_time_init=3, max_time_final=1, nstep=50, report_interval=1, **kwargs)

Embed a smoother DEM in a coarser

The two inputs and output are filenames. The basic plans is this: 1. Smooth the fine data enough to resample without aliasing or distortion 2. Interpolate/resample the result to the coarser mesh 3. Where the result of 1-2 has good data, replace coarser data 4. Smooth the final grid lightly to remove kinks/discontinuity

The smoothing is done with contour_smooth2d

schimpy.gaussian_quadrature module

Gaussian quadrature in 2D space

class schimpy.gaussian_quadrature.GaussianQuadrature(order)

Bases: object

Abstract base class of GaussianQuadrature

Methods

average(vertices, values)

Calculate the average of the value over the domain.

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

domain_size(vertices)

Abstract method to calculate the size of the domain

integrate(vertices[, values])

Integrate values over a quad element

jacobian_det(vertices)

Determinant of Jacobian at quadrature points

number_of_quadrature_points()

Get the number of quadrature points

quadrature_vector(vertices)

Create a quadrature matrix for quadrature integration Taking a dot product this quadrature matrix and the values at the quadrature points will result in quadrature

shape(pts)

Abstract shape function

shape_derivative(pts)

Abstract shape derivative function

values_at_quadrature_points(values)

Get quadrature points

average(vertices, values)

Calculate the average of the value over the domain.

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (:, 2) or more columns. The values in the first two columns will be used.

Returns:
float

the length of the line

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

Parameters:
pts: np.ndarray

Coordinates of the nodes

Returns:
ptsreal

quadrature points

domain_size(vertices)

Abstract method to calculate the size of the domain

integrate(vertices, values=None)

Integrate values over a quad element

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) with values. The shape needs to be (:, 2)

values: numpy.array, optional

A value vector at vertices If it is not provided, the thrid column will be used as values

Returns:
float

result of integration

jacobian_det(vertices)

Determinant of Jacobian at quadrature points

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (:, 2) or more columns. The values in the first two columns will be used.

Returns:
numpy.array

array of determinant ant quadrature points

number_of_quadrature_points()

Get the number of quadrature points

Returns:
int

Number of quadrature points

quadrature_vector(vertices)

Create a quadrature matrix for quadrature integration Taking a dot product this quadrature matrix and the values at the quadrature points will result in quadrature

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) with values. The shape needs to be (:, 2)

Returns:
numpy.array

two-dimensional matrix of quadrature matrix

shape(pts)

Abstract shape function

Parameters:
pts: np.ndarray

Coordinates of the nodes

shape_derivative(pts)

Abstract shape derivative function

Parameters:
pts: np.ndarray

Coordinates of the nodes

values_at_quadrature_points(values)

Get quadrature points

Parameters:
values: numpy.array

values at quadrature points

Returns:
numpy.array

values of Gaussian quadrature points

class schimpy.gaussian_quadrature.GaussianQuadratureLine2(order)

Bases: GaussianQuadrature

Gaussian quadrature on line with two end points in 2-D space

Methods

average(vertices, values)

Integrate values over a quad element

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

domain_size(vertices)

Size of domian, which is the length of the line in this case

integrate(vertices[, values])

Integrate values over a quad element

jacobian_det(vertices)

Determinant of Jacobian at quadrature points, 1-D version

number_of_quadrature_points()

Get the number of quadrature points

quadrature_vector(vertices)

Create a quadrature matrix for quadrature integration Taking a dot product this quadrature matrix and the values at the quadrature points will result in quadrature

shape(pts)

Shape functions Ordering is counter-clockwise direction

shape_derivative(pts)

Derivatives of shape functions

values_at_quadrature_points(values)

Get quadrature points

average(vertices, values)

Integrate values over a quad element

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) with values. The shape needs to be (-1, 2)

values: numpy.array

The values at vertices

Returns:
averagefloat

result of integration

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

Parameters:
pts: np.ndarray

Coordinates of the nodes

Returns:
ptsreal

quadrature points

domain_size(vertices)

Size of domian, which is the length of the line in this case

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (2, 2) or more columns. The values in the first two columns will be used.

Returns:
float

the length of the line

jacobian_det(vertices)

Determinant of Jacobian at quadrature points, 1-D version

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (-1, 2) or more columns. The values in the first two columns will be used.

Returns:
numpy.array

array of determinant ant quadrature points

shape(pts)

Shape functions Ordering is counter-clockwise direction

Parameters:
pts: numpy.array

Local coordinates.

Returns:
numpy.array

matrix of shape function value at the given points

shape_derivative(pts)

Derivatives of shape functions

Parameters:
pts: numpy.array

Local coordinates. The dimension is (-1, 2)

Returns:
numpy.array

matrix of shape function derivative wrt xi value at (*, eta)

class schimpy.gaussian_quadrature.GaussianQuadratureQuad4(order)

Bases: GaussianQuadrature

Gaussian Quadrature for a quadrilateral with four nodes

Methods

average(vertices, values)

Calculate the average of the value over the domain.

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

domain_size(vertices)

Size of domain, which is the area of the quadrilateral in this case.

integrate(vertices[, values])

Integrate values over a quad element

jacobian(vertices[, local_coord])

Create a Jacobian matrix or matrixes at the given local coordinates

jacobian_det(vertices)

Determinant of Jacobian at quadrature points

number_of_quadrature_points()

Get the number of quadrature points

quadrature_vector(vertices)

Create a quadrature matrix for quadrature integration Taking a dot product this quadrature matrix and the values at the quadrature points will result in quadrature

shape(pts)

Shape functions Ordering is counter-clockwise direction

shape_derivative(pts)

Derivatives of shape functions

values_at_quadrature_points(values)

Get quadrature points

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

domain_size(vertices)

Size of domain, which is the area of the quadrilateral in this case. The area is calculated with shoelace equation.

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (4, 2) or more columns. The values in the first two columns will be used.

Returns:
ret_size: float

the length of the line

jacobian(vertices, local_coord=None)

Create a Jacobian matrix or matrixes at the given local coordinates

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (4, 2) or more columns. The values in the first two columns will be used.

local_coord: numpy.array

local coordinates where a Jacobian is calculated

Returns:
numpy.array

Jacobian matrix

shape(pts)

Shape functions Ordering is counter-clockwise direction

Parameters:
pts: numpy.array

Local coordinates. The dimension is (-1, 2)

Returns:
numpy.array

matrix of shape function value at (xi, eta)

shape_derivative(pts)

Derivatives of shape functions

Parameters:
pts: numpy.array

Local coordinates. The dimension is (-1, 2)

Returns:
numpy.array

matrix of shape function derivative wrt xi value at (*, eta)

class schimpy.gaussian_quadrature.GaussianQuadratureTri3(order)

Bases: GaussianQuadrature

Gaussian Quadrature for triangles with three nodes

Methods

average(vertices, values)

Calculate the average of the value over the domain.

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

domain_size(vertices)

Size of domian, which is the area of the quadrilateral in this case.

integrate(vertices[, values])

Integrate values over a quad element

jacobian(vertices[, local_coord])

Create a Jacobian matrix or matrixes at the given local coordinates

jacobian_det(vertices)

Determinant of Jacobian at quadrature points

number_of_quadrature_points()

Get the number of quadrature points

quadrature_vector(vertices)

Create a quadrature matrix for quadrature integration Taking a dot product this quadrature matrix and the values at the quadrature points will result in quadrature

shape(pts)

Shape functions Ordering is counter-clockwise direction

shape_derivative(pts)

Derivatives of shape functions

values_at_quadrature_points(values)

Get quadrature points

calculate_quadrature_points_and_weights()

Calculate quadrature points and weights

domain_size(vertices)

Size of domian, which is the area of the quadrilateral in this case. The area is calculated with shoelace equation.

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (3, 2) or more columns. The values in the first two columns will be used.

Returns:
float

the length of the line

jacobian(vertices, local_coord=None)

Create a Jacobian matrix or matrixes at the given local coordinates

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) The shape needs to be (4, 2) or more columns. The values in the first two columns will be used.

local_coord: numpy.array

local coordinates where a Jacobian is calculated

Returns:
numpy.array

Jacobian matrix

jacobian_det(vertices)

Determinant of Jacobian at quadrature points

Parameters:
vertices: numpy.array

coordinates of vertices (or nodes) but it is not used

Returns:
numpy.array

array of determinant ant quadrature points

shape(pts)

Shape functions Ordering is counter-clockwise direction

Parameters:
pts: numpy.array

Local coordinates. Not used

Returns:
numpy.array

matrix of shape function value at (xi, eta)

shape_derivative(pts)

Derivatives of shape functions

Parameters:
pts: numpy.array

Local coordinates. Not used

Returns:
numpy.array

matrix of shape function derivative wrt xi value at (*, eta)

schimpy.gen_elev2d module

schimpy.geo_tools module

schimpy.geo_tools.FindMultiPoly(poly_array)
schimpy.geo_tools.Polylen(poly)
schimpy.geo_tools.geometry2coords(geo_obj)
schimpy.geo_tools.geometry2coords_points(geo_obj)
schimpy.geo_tools.ic_to_gpd(fn, crs=None)

Read ic yaml file and convert the polygons to geopandas format

schimpy.geo_tools.ll2utm(lonlat, crs=None)

lonlat can be numpy arrays. lonlat = np.asarray([lon,lat]) default crs = epsg:26910

schimpy.geo_tools.partition_check(mesh, poly_fn, regions, centering='node', crs=None, allow_overlap=False, allow_incomplete=False)

Check if the schism mesh division by the polygon features in poly_fn is unique and complete. The partition check is based on either node or element, and the function checks:

  • if there are any orphaned nodes, and

  • if any nodes/elems were assigned to multiple polygons.

schimpy.geo_tools.project_fun(crs=None)
schimpy.geo_tools.shapely_to_geopandas(features, crs=None, shp_fn=None)

Convert shapely features to geopandas and generate shapefiles as needed

schimpy.geo_tools.shp2yaml(shp_fn, yaml_fn=None, crs=None)

Convert a shapefile to yaml file

Parameters:
shp_fnstr

Input shape filename

yaml_fnstr

Output yaml filename

crsstr, optional

Output projection. The default is None.

Returns:
None.
schimpy.geo_tools.utm2ll(utm_xy, crs=None)

utm_xy can be numpy arrays. utm_xy = np.asarray([utm_x,utm_y]) default crs = epsg:26910

schimpy.geo_tools.yaml2shp(fn, shp_fn=None, crs=None)

schimpy.gr3 module

schimpy.grid_opt module

schimpy.hotstart_inventory module

schimpy.hotstart_inventory.create_arg_parser()
schimpy.hotstart_inventory.hotstart_inventory(run_start=None, dt=None, nday=None, workdir='.', paramfile=None, hot_freq=None)

Create an inventory of existing hotstarts or expected hotstarts

Existing vs expected depends on whether workdir is an outputs or study dir.

Parameters:
startConvertible to Datetime

Start date of run. If None inferred from paramfile. Error if

dtfloat

dt in seconds, for instance perhaps 90s for clinic or 120s for tropic. This is needed to intepret the so-called iteration number in the hotstart labels which are really time step numbers.

workdirstr

Directory to inventory. If it is an outputs directory, the inventory

comprise existing hotstarts.
paramfilestr

Name of param.nml file, expected in workdir or workdir/.. If None, then both start and dt must be supplied. If all three are None, the name “param.nml” will be attempted

Returns:
Dataframe, if programatic, listing hotstarts. Should look like “Date, Iteration” pairs. CLI should print it out.

Notes

If the listing is done in the run dir, this will be the expected hotstarts. If it is in the outputs dir, it will be an inventory of existing hotstarts.

schimpy.hotstart_inventory.hotstart_inventory2(start, dt=90)
schimpy.hotstart_inventory.main()

schimpy.hotstart_nudging_data module

schimpy.hotstart_nudging_data.create_arg_parser()

Create an argument parser return: argparse.ArgumentParser

schimpy.hotstart_nudging_data.hotstart_nudge_data(sdate, ndays, dest)
schimpy.hotstart_nudging_data.main()

schimpy.hrr3 module

adapted from pyschism, original work of Linlin Cui.

class schimpy.hrr3.AWSGrib2Inventory(start_date: datetime | None = None, record=1, pscr=None, product='conus')

Bases: object

Attributes:
bucket
files
output_interval
s3
tmpdir
property bucket
property files
property output_interval: timedelta
property s3
property tmpdir
class schimpy.hrr3.HRRR(start_date=None, rnday=None, pscr=None, record=1, bbox=None)

Bases: object

Methods

gen_sflux

modified_latlon

gen_sflux(date, record, pscr)
modified_latlon(grbfile)
schimpy.hrr3.localize_datetime(d)
schimpy.hrr3.nearest_cycle(input_datetime=None, period=6, method='floor')

schimpy.interp_2d module

invdisttree.py: inverse-distance-weighted interpolation using KDTree

class schimpy.interp_2d.Invdisttree(x, nnear=10, leafsize=10)

Bases: object

Inverse-distance-weighted interpolation using KDTree

Methods

interp(obs[, ninterp])

Perform interpolation

weights(node_xy[, eps, p, weights])

Find the nearest neighbors and assign weights to each neibors

Examples

tree = interp_2d.Invdisttree(obs_xy) # initialize KDTree with observational points tree.weights(node_xy) # calculate weights for each node. values_v = tree.interp(obs.temperature.values) # perform spatial interpolation with the calculated weights from the previous step

interp(obs, ninterp=6)

Perform interpolation

Parameters:
obsnp.ndarray

observational values; nan values are allowed and will be ignored.

ninterppositive int, ninterp<=nnear

The number of nearest points to perform interpolation The default is 6.

Returns:
val_interpnp.ndarray

interpolated values

weights(node_xy, eps=0, p=2, weights=None)

Find the nearest neighbors and assign weights to each neibors

Parameters:
node_xynp.ndarray, shape (n,2)

Coordinates of the query points n is the number of query points

epspositive float, optional

approximate nearest, dist <= (1 + eps) * true nearest. The default is 0.

ppositive int, optional

power. The default is 2.

weightsfloat, optional

optional multiplier for weights, same dimension as node_xy The default is None.

Returns:
None.

schimpy.interpolate_structure module

schimpy.interpolate_structure.create_arg_parser()
schimpy.interpolate_structure.ensure_offset(arg)
schimpy.interpolate_structure.interpolate_structure(template_th, output_th, dt=None, int_cols=['install', 'ndup_weir', 'ndup_culvert', 'ndup_pipe'])

Interpolate a dated th “template” for a structure The interpolation adds time detail, maintain data types. Comments are removed and floating precision is hardwired to two digits

The input template file must have a header and time stamps that are neat with respect to dt. This is checked.

Parameters:
template_thstr

Path to the template file

output_thstr

Name of the output file

dtinterval_type

Number of hours between changes, default is 1 hour. Can be any time (string, delta, offset) that can be coerced to offset

int_colslist

List of column names that should be integers. This can be a superset, and it shouldn’t change much if you name your template columns the standard way.

schimpy.interpolate_structure.main()
schimpy.interpolate_structure.test_date_label_correct(fname_th)

Make sure that the date column in the file doens’t have comment marker and raise error if it does

schimpy.interpolate_structure.test_template_times(template, dt)

schimpy.laplace_smooth_data module

schimpy.laplace_smooth_data.laplace_smooth_data(mesh, data, rate=0.05, iter_total=150)
schimpy.laplace_smooth_data.laplace_smooth_data2(mesh, data, kappa=0.05, dt=1.0, iter_total=150)
schimpy.laplace_smooth_data.laplace_smooth_with_vel(mesh, data, vel, kappa=0.05, dt=1.0, iter_total=1)
schimpy.laplace_smooth_data.laplace_smooth_with_vel2(mesh, data, vel, kappa=0.05, dt=1.0, iter_total=1)
schimpy.laplace_smooth_data.laplace_smooth_with_vel3(mesh, nlayer, data, vel, kappa=0.05, dt=1.0, iter_total=1)

schimpy.lsc2 module

Methods for generating local sigma coordinates These routines are meant to be called a pair. First, default_num_layers is called to obtain the recommended number of layers for each node based on depth. Then, gen_sigma is called to generate the actual local sigma values at each level (nlevels = nlayers+1).

Note that in this script eta is the “reference” free surface at which the mesh is conditioned, which can be a global scalar or array of local nodal values. Using a medium-higher value (2-4 depending on typical flood levels) usually does’t hurt the final product in low water. The example() shows how to visualize a mesh generated on one ref water surface on another surface.

The major user parameters are already set at their defaults. It is mildly important to realize that the S coordinate parameters have the same qualitative interpretation, but that the S system is really just used as a heuristic and everything is manipulated locally.

Besides theta (refinement to the surface) the mostly likely item to manipulate will be minlayer and maxlayer. These can be supplied locally (if these are given as arrays) or globally (if provided as scalars).

class schimpy.lsc2.BilinearMeshDensity

Bases: object

Methods

density

depth

density(z, h, x)
depth(t, h, x)
class schimpy.lsc2.CubicLSC2MeshFunction

Bases: object

Methods

density

depth

density(x, tlev)
depth(x, tlev)
schimpy.lsc2.default_num_layers(x, eta, h0, minlayer, maxlayer, dz_target, meshfun, maxlev=100)

Returns the number of layers that, according to meshfun, gives a depth matching eta + h0 In the (likely) case of inexact fit) the lower bound n- of the number of layers not yet outfitted for variation in x

schimpy.lsc2.default_num_layers0(total_ref_depth, minlayer, maxlayer)
schimpy.lsc2.example()
schimpy.lsc2.example2()
schimpy.lsc2.example3()
schimpy.lsc2.flip_sigma(sigma)

Flip the ordering of non-nan sigma values.

The output of get_sigma starts from 0.0, but sigma in vgrid.in from -0.1. So it needs to be flipped for further use.

Parameters:
sigma: numpy.ndarray
Returns:
numpy.ndarray

New sigma array that has flipped ordering.

schimpy.lsc2.gen_sigma(nlayer, minlayer, maxlayer, eta, h, mesh, meshfun, nsmoothlay=0)

“ Generate local sigma coordinates based on # layers, reference surface and depth

Parameters:
nlayer: ndarray

Veector of size np (number of nodes) giving desired # layers for each node in the mesh

eta: ndarray or float

reference water level heights at each node at which generation is to occur.

h: ndarray

unperturbed depth for each node in the mesh

meshfloat

maximum theta to use in S calculations. This is interpreted the same as a standard S grid theta although it will be varied according to depth

meshfun: float

S coordinate parameter b

nsmoothlay: how many layers to smooth on the bottom
hc: float

S coordinate parameter hc (do not alter)

schimpy.lsc2.label_components(mesh, nlayer, thresh, exclude)
schimpy.lsc2.lowest_layer_height(htrans, nlevel, klev=0)
schimpy.lsc2.mesh_function_depths(nlayer, depth, mesh, meshfun)
schimpy.lsc2.plot_mesh(ax, x, zcor, startvis, stopvis, c='black', linewidth=1)
schimpy.lsc2.process_orphans(mesh, nlayer, depth, hcor)
schimpy.lsc2.process_orphans2(mesh, nlayer, depth, hcor)
schimpy.lsc2.sigma_z(sigma, eta, h)
schimpy.lsc2.smooth_bed(mesh, eta, h, hcor, nlevel, speed)
schimpy.lsc2.szcoord(s, h, eta, theta, b, hc)
schimpy.lsc2.z_sigma(zcor)

schimpy.material_poly module

schimpy.material_poly.create_arg_parser()
schimpy.material_poly.create_poly(shapefile, dsetname, keyfile, polyfile, type, default=None)

Converts a polygon shapefile to the yaml input of the preprocessor

schimpy.material_poly.read_keyfile(keyfile)

Reads a file pairing labels and values

schimpy.merge_th module

schimpy.merge_th.create_arg_parser()
schimpy.merge_th.main()
schimpy.merge_th.merge_th(th_spec)
schimpy.merge_th.read_data(fname, variable)
schimpy.merge_th.read_locations_from_input(fname, role)
schimpy.merge_th.read_th_spec(fname)
schimpy.merge_th.write_th(df, fname, elapsed, ref_time=None)

schimpy.metricsplot module

Metrics plot

schimpy.metricsplot.plot_comparison(*args, style_palette, **kwargs)

Create a simple comparison plot without metrics calculation

Parameters:
*args: variable number of TimeSeries
Returns:
matplotlib.pyplot.figure.Figure
schimpy.metricsplot.plot_metrics(obs, tssim, style_palette, **kwargs)

Create a metrics plot

Parameters:
*args: variable number of TimeSeries
Returns:
matplotlib.pyplot.figure.Figure

schimpy.model_time module

Script to make model date conversion convenient, converting elapsed model seconds to or from dates

schimpy.model_time.clip(args)

Clip file to dates

schimpy.model_time.create_arg_parser()
schimpy.model_time.describe_elapsed(times, start, dt=None)
schimpy.model_time.describe_timestamps(timestamps, start, dt=None)
schimpy.model_time.file_to_elapsed(infile, start, outpath=None, annotate=False, skip_nan=False)
schimpy.model_time.file_to_timestamp(infile, start, outpath=None, annotate=False, elapsed_unit='s', time_format='%Y-%m-%dT%H:%M ')
schimpy.model_time.main()
schimpy.model_time.multi_file_to_elapsed(input_files, output, start, name_transform='prune_dated')
schimpy.model_time.prune_dated(name)
schimpy.model_time.to_datetime(args)

Convert elapsed inputs to dated

schimpy.model_time.to_elapsed(args)

Convert dated inputs to elapsed times

schimpy.nml module

class schimpy.nml.Namelist(d)

Bases: object

The Namelist class simply creates an attribute for each key-value pair in the dictionary.

class schimpy.nml.TopLevelNamelist(d)

Bases: object

TopLevelNamelist is a class for the top-level elements of the dictionary, and Namelist is a class for all other nested elements. The TopLevelNamelist class creates attributes for each key-value pair in the dictionary and, if the value is itself a dictionary, creates a new Namelist object with the nested dictionary.

schimpy.nml.map_to_dict(obj)

This function takes an object of type TopLevelNamelist as input and returns a dictionary representation of the object. The function uses the vars built-in function to get a dictionary of attributes and values for the object, and then iterates over the key-value pairs in the dictionary. If the value is an instance of the Namelist class, it recursively maps the Namelist object to a dictionary using the map_to_dict function. If the value is not an instance of the Namelist class, it simply adds the key-value pair to the dictionary. This way, you can easily map an object of type TopLevelNamelist back to a dictionary representation, preserving the structure of the original dictionary.

schimpy.nml.map_to_object(d)

In this example, TopLevelNamelist is a class for the top-level elements of the dictionary, and Namelist is a class for all other nested elements. The TopLevelNamelist class creates attributes for each key-value pair in the dictionary and, if the value is itself a dictionary, creates a new Namelist object with the nested dictionary. The Namelist class simply creates an attribute for each key-value pair in the dictionary.

The map_to_object function takes a dictionary d as input and returns a new TopLevelNamelist object with the values from d.

This way, you can easily map the dictionary returned by parse_namelist to objects, with different classes for the top-level and nested elements, and access the values in the dictionary as attributes of the objects.

schimpy.nml.parse(file_content)

Here’s a simple implementation of a parser for the Fortran namelist format If there’s a line starting with !, the parser will store it as the full_line_comment and attach it to the next key-value pair it encounters. If there’s an inline comment starting with !, it will be stored as inline_comment.

For the most part this parser is comment preserving; you might notice some whitespace and blank line(s) being eliminated in the round trip through write method below

schimpy.nml.write(namelist_data)

writes out the namelist dictionary from the parse method to a string. The comments are preserved but not the whitespace or indentations

schimpy.nudging module

schimpy.param module

class schimpy.param.Params(fname, default=None)

Bases: object

Attributes:
hotstart_freq
nc_out_freq
nc_stack
run_start

Get start time as datetime

station_out_freq

Methods

adjust_dt()

Adjust dt without perturbing variables that depend on it

copy()

Return a copy of this Params set

diff(other[, defaults])

Compare to another instance of Params

get_run_start()

Get start time as datetime

process_default(default)

Process default parameters

searchfor(key[, section])

Search for key in all the sections

set_hotstart_freq(freq)

Set hotstart frequency using Pandas offset or string that evaluates as offset

set_interval(name, freq)

Set binary output frequency using Pandas offset or string that evaluates as offset

set_nc_out_freq(freq)

Set binary output frequency using Pandas offset or string that evaluates as offset

set_nc_stack(freq)

Set binary output frequency using Pandas offset or string that evaluates as offset

set_run_start(run_start)

Set start time

set_station_out_freq(freq)

Set station output frequency

update(other[, defaults])

Update from another instance of Params in-place

validate()

Validation tests

get_hotstart_freq

get_interval

get_nc_out_freq

get_nc_stack

get_station_out_freq

sections

to_dataframe

write

adjust_dt()

Adjust dt without perturbing variables that depend on it

copy()

Return a copy of this Params set

diff(other, defaults=False)

Compare to another instance of Params

Parameters:
other: str | Params

Can be a string that evaluates to param filename, a Param object

defaultsbool

Search includes defaults

Returns:
diffpd.DataFrame

Data with multi index for section and parameter, including only parameters that are different, including possibly one being absent from one Param set

get_hotstart_freq()
get_interval(name)
get_nc_out_freq()
get_nc_stack()
get_run_start()

Get start time as datetime

get_station_out_freq()
property hotstart_freq
property nc_out_freq
property nc_stack
process_default(default)

Process default parameters

Parameters:
defaultstr or Param instance or ‘repo’

If default is ‘repo’, default is the GitHub repo version. If it is a filename, that name is evaluated. If it is a templated version, that version is read. (config part of this not done yet)

property run_start

Get start time as datetime

searchfor(key, section=False)

Search for key in all the sections

Parameters:
keystr

Key to search for

section = bool If boolean, returns a tuple of section, value

default = str Name of default to use for backup

Returns

Value cached under key

Raises

IndexError if key not present

sections(defaults=False)
set_hotstart_freq(freq)

Set hotstart frequency using Pandas offset or string that evaluates as offset

Parameters:
freq
If None, frequency will be set using default (or 1 Hour) and station output disabled
set_interval(name, freq)

Set binary output frequency using Pandas offset or string that evaluates as offset

set_nc_out_freq(freq)

Set binary output frequency using Pandas offset or string that evaluates as offset

set_nc_stack(freq)

Set binary output frequency using Pandas offset or string that evaluates as offset

set_run_start(run_start)

Set start time

Parameters:
startdatetime
Coercible to datetime
set_station_out_freq(freq)

Set station output frequency

Parameters:
freqoffset or string

Sets output interval for staout files and ensures that output is enabled. If None, frequency will be set using default (or 1 Hour) and station output disabled

property station_out_freq
to_dataframe(defaults=None)
update(other, defaults=False)

Update from another instance of Params in-place

Parameters:
other: str | Params

Can be a string that evaluates to param filename, a Param object

defaultsbool

Search includes defaults

validate()

Validation tests

write(fname)
schimpy.param.param_from_template(name)

Returns param based on named template files

schimpy.param.read_params(fname, default=None)
schimpy.param.test_param()

schimpy.params module

class schimpy.params.Core(*, dt, eco_class, ibc, ibtp, ihfskip, ipre, mdc2, msc2, nspool, ntracer_age, ntracer_gen, rnday, sed_class, name)

Bases: Parameterized

dt = 0.0
eco_class = 0
ibc = 0
ibtp = 0
ihfskip = 0
ipre = 0
mdc2 = 0
msc2 = 0
name = 'Core'
nspool = 0
ntracer_age = 0
ntracer_gen = 0
rnday = 0.0
sed_class = 0
class schimpy.params.HydroOutput(*, air_pressure, air_temperature, barotropic_pres_grad_xy, bottom_stress_xy, depth_avg_vel_xy, diffusivity, downward_longwave, dry_flag_node, elevation, evaporation_rate, horizontal_side_vel_xy, horizontal_vel_xy, latent_heat, mixing_length, precipitation_rate, salinity, salinity_at_element, sensible_heat, solar_radiation, specific_humidity, temperature, temperature_at_element, total_heat, turbulent_kinetic_ener, upward_longwave, vertical_vel_at_element, vertical_velocity, viscosity, water_density, wind_speed_xy, wind_stress_xy, z_coordinates, name)

Bases: OutControls

Class to specify which variables to output from the SCHISM model

Methods

from_iof_array

get_iof_array_names

to_iof_array

air_pressure = False
air_temperature = False
barotropic_pres_grad_xy = False
bottom_stress_xy = False
depth_avg_vel_xy = False
diffusivity = False
downward_longwave = False
dry_flag_node = True
elevation = False
evaporation_rate = False
horizontal_side_vel_xy = False
horizontal_vel_xy = False
latent_heat = False
mixing_length = False
name = 'HydroOutput'
precipitation_rate = False
salinity = False
salinity_at_element = False
sensible_heat = False
solar_radiation = False
specific_humidity = False
temperature = False
temperature_at_element = False
total_heat = False
turbulent_kinetic_ener = False
upward_longwave = False
vertical_vel_at_element = False
vertical_velocity = False
viscosity = False
water_density = False
wind_speed_xy = False
wind_stress_xy = False
z_coordinates = False
class schimpy.params.Opt(*, alphaw, btrack_nudge, coricoef, courant_weno, cur_wwm, dfh0, dfv0, dramp, dramp_ss, drampbc, drampwafo, drampwind, dtb_max, dtb_min, dzb_min, eos_a, eos_b, eps1_tvd_imp, eps2_tvd_imp, epsilon1, epsilon2, epsilon3, flag_fib, flag_ic, fwvor_advxy_stokes, fwvor_advz_stokes, fwvor_breaking, fwvor_gradpress, fwvor_streaming, fwvor_wveg, fwvor_wveg_NL, gen_wsett, h0, h1_bcc, h1_pp, h2_bcc, h2_pp, h_bcc1, h_massconsv, h_tvd, hmin_airsea_ex, hmin_man, hmin_radstress, hmin_salt_ex, hvis_coef0, hw_depth, hw_ratio, i_hmin_airsea_ex, i_hmin_salt_ex, i_prtnftl_weno, iadjust_mass_consv0, ibcc_mean, ibdef, ibtrack_test, ic_elev, icou_elfe_wwm, ics, ielad_weno, ielm_transport, ieos_pres, ieos_type, if_source, iflux, iflux_out_format, iharind, ihconsv, ihdif, ihhat, ihorcon, ihot, ihydraulics, iloadtide, imm, indvel, inter_mom, inu_elev, inu_tr, inu_uv, inunfl, inv_atm_bnd, ip_weno, ipre2, iprecip_off_bnd, irouse_test, isav, isconsv, ishapiro, itr_met, itransport_only, itur, iunder_deep, iupwind_mom, iwbl, iwind_form, iwindoff, izonal5, kr_co, lev_tr_source, level_age, loadtide_coef, max_subcyc, meth_sink, mid, moitn0, mxitn0, nadv, nchi, ncor, niter_shap, nquad, nramp_elev, nstep_ice, nstep_wwm, ntd_weno, nu_sum_mult, nws, prmsl_ref, rearth_eq, rearth_pole, rho0, rinflation_icm, rlatitude, rmaxvel, rtol0, s1_mxnbt, s2_mxnbt, sfea0, shapiro0, shorewafo, shw, slam0, slr_rate, small_elad, stab, start_day, start_hour, start_month, start_year, step_nu_tr, tdmin_pp1, tdmin_pp2, thetai, turbinj, turbinjds, utc_start, vclose_surf_frac, vdmax_pp1, vdmax_pp2, vdmin_pp1, vdmin_pp2, velmin_btrack, vnf1, vnf2, vnh1, vnh2, wafo_obcramp, wtiminc, xlsc0, name)

Bases: Parameterized

alphaw = 0.0
btrack_nudge = 0.009013
coricoef = 1.0
courant_weno = 0.8
cur_wwm = False
dfh0 = 0.0
dfv0 = 1.0
dramp = 1.0
dramp_ss = 60.0
drampbc = 1.0
drampwafo = 0.0
drampwind = 86400.0
dtb_max = 100.0
dtb_min = 1.0
dzb_min = 1e-05
eos_a = -0.1
eos_b = 1001.0
eps1_tvd_imp = 0.001
eps2_tvd_imp = 0.0001
epsilon1 = 1e-05
epsilon2 = 0.001
epsilon3 = 0.0001
flag_fib = 0
flag_ic = 0
fwvor_advxy_stokes = False
fwvor_advz_stokes = False
fwvor_breaking = False
fwvor_gradpress = False
fwvor_streaming = False
fwvor_wveg = False
fwvor_wveg_NL = False
gen_wsett = True
h0 = 1.0
h1_bcc = 1.0
h1_pp = 0.2
h2_bcc = 0.5
h2_pp = 1.0
h_bcc1 = 1.5
h_massconsv = 0.001
h_tvd = 2.0
hmin_airsea_ex = 0.01
hmin_man = 0.05
hmin_radstress = 0.1
hmin_salt_ex = 0.01
hvis_coef0 = 0.1
hw_depth = 15.0
hw_ratio = 1.2
i_hmin_airsea_ex = 1
i_hmin_salt_ex = 1
i_prtnftl_weno = 1
iadjust_mass_consv0 = 1
ibcc_mean = 0
ibdef = 10
ibtrack_test = 1
ic_elev = 0.0
icou_elfe_wwm = 0
ics = 0
ielad_weno = 0
ielm_transport = 0
ieos_pres = 0.0
ieos_type = 0
if_source = 2
iflux = 2
iflux_out_format = 0
iharind = 1
ihconsv = 0
ihdif = 0
ihhat = 0
ihorcon = 0
ihot = 0
ihydraulics = 0
iloadtide = 0
imm = 0
indvel = 0
inter_mom = 1
inu_elev = 1
inu_tr = 0
inu_uv = 1
inunfl = True
inv_atm_bnd = False
ip_weno = 0
ipre2 = 0
iprecip_off_bnd = 1
irouse_test = 0
isav = 0
isconsv = 0
ishapiro = 0
itr_met = 3
itransport_only = 0
itur = 0
iunder_deep = 0
iupwind_mom = 0
iwbl = 0
iwind_form = 1
iwindoff = 0
izonal5 = 0
kr_co = 0.5
lev_tr_source = 1
level_age = [-999.0]
loadtide_coef = 1.0
max_subcyc = 10
meth_sink = 2
mid = 'KL'
moitn0 = 0.1
mxitn0 = 5
nadv = 3
name = 'Opt'
nchi = 50
ncor = 1
niter_shap = 0
nquad = 5
nramp_elev = 0.0
nstep_ice = 0
nstep_wwm = 1
ntd_weno = 1
nu_sum_mult = 1.0
nws = 0
prmsl_ref = 1013.25
rearth_eq = 6378.137
rearth_pole = 6356.75
rho0 = 1000.0
rinflation_icm = 2.0
rlatitude = 47.5
rmaxvel = 2.0
rtol0 = 1e-06
s1_mxnbt = 0.0
s2_mxnbt = 0.0
sfea0 = 45
shapiro0 = 0.8
shorewafo = 0.0
shw = 0.025
slam0 = -124
slr_rate = 0.0
small_elad = 1e-06
stab = 'GA'
start_day = 1
start_hour = 0
start_month = 1
start_year = 2000
step_nu_tr = 0.001
tdmin_pp1 = 0.01
tdmin_pp2 = 0.001
thetai = 0.7
turbinj = False
turbinjds = 0.0
utc_start = 8
vclose_surf_frac = 0.0
vdmax_pp1 = 0.02
vdmax_pp2 = 0.01
vdmin_pp1 = 1e-05
vdmin_pp2 = 1e-05
velmin_btrack = 0.0001
vnf1 = 1
vnf2 = 1
vnh1 = 1
vnh2 = 0
wafo_obcramp = 1
wtiminc = 3600.0
xlsc0 = 1.0
class schimpy.params.OutControls(*, name)

Bases: Parameterized

Parameters controlling output

Methods

from_iof_array

get_iof_array_names

to_iof_array

from_iof_array(iof_array)
get_iof_array_names()
name = 'OutControls'
to_iof_array()
class schimpy.params.Params(core, opt, schout)

Bases: tuple

Methods

count(value, /)

Return number of occurrences of value.

index(value[, start, stop])

Return first index of value.

core

Alias for field number 0

opt

Alias for field number 1

schout

Alias for field number 2

class schimpy.params.Schout(*, iof_age, iof_ana, iof_cos, iof_dvd, iof_eco, iof_fib, iof_ice, iof_icm_ba, iof_icm_cbp, iof_icm_core, iof_icm_dbg, iof_icm_ph, iof_icm_sav, iof_icm_sed, iof_icm_silica, iof_icm_veg, iof_icm_zb, iof_marsh, iof_sed, iof_sed2d, iof_ugrid, iout_sta, nc_out, nhot, nhot_write, nspool_sta, name)

Bases: Parameterized

iof_age = False
iof_ana = False
iof_cos = False
iof_dvd = False
iof_eco = False
iof_fib = False
iof_gen = TracerGenOutput(name='TracerGenOutput00004', ntracer_gen=0)
iof_hydro = HydroOutput(air_pressure=False, air_temperature=False, barotropic_pres_grad_xy=False, bottom_stress_xy=False, depth_avg_vel_xy=False, diffusivity=False, downward_longwave=False, dry_flag_node=True, elevation=False, evaporation_rate=False, horizontal_side_vel_xy=False, horizontal_vel_xy=False, latent_heat=False, mixing_length=False, name='HydroOutput00002', precipitation_rate=False, salinity=False, salinity_at_element=False, sensible_heat=False, solar_radiation=False, specific_humidity=False, temperature=False, temperature_at_element=False, total_heat=False, turbulent_kinetic_ener=False, upward_longwave=False, vertical_vel_at_element=False, vertical_velocity=False, viscosity=False, water_density=False, wind_speed_xy=False, wind_stress_xy=False, z_coordinates=False)
iof_ice = False
iof_icm_ba = False
iof_icm_cbp = False
iof_icm_core = False
iof_icm_dbg = False
iof_icm_ph = False
iof_icm_sav = False
iof_icm_sed = False
iof_icm_silica = False
iof_icm_veg = False
iof_icm_zb = False
iof_marsh = False
iof_sed = False
iof_sed2d = False
iof_ugrid = False
iof_wwm = WindWaveOutput(bottom_excursion_period=True, bottom_wave_period=True, charnock_coeff=True, continuous_peak_period=True, discrete_peak_direction=True, diss_rate_bott_friction=True, diss_rate_dep_breaking=True, diss_rate_vegetation=True, diss_rate_whitecapping=True, dominant_direction=True, energy_input_atmos=True, frictional_velocity=True, mean_dir_spreading=True, mean_wave_direction=True, mean_wave_length=True, mean_wave_number=True, mean_wave_period=True, name='WindWaveOutput00003', orbital_velocity=True, peak_group_vel=True, peak_n_factor=True, peak_period=True, peak_phase_vel=True, peak_spreading=True, peak_wave_length=True, peak_wave_number=True, rms_orbital_velocity=True, roller_diss_rate=True, roughness_length=True, sig_wave_height=True, tm_10=True, u_resell_number=True, wave_energy_dir_x=True, wave_energy_dir_y=True, zero_downcross_period=True)
iout_sta = 0
name = 'Schout'
nc_out = True
nhot = 0
nhot_write = 0
nspool_sta = 0
class schimpy.params.TracerGenOutput(*, ntracer_gen, name)

Bases: Parameterized

Methods

get_tracer_names

get_tracer_names()
name = 'TracerGenOutput'
ntracer_gen = 0
class schimpy.params.WindWaveOutput(*, bottom_excursion_period, bottom_wave_period, charnock_coeff, continuous_peak_period, discrete_peak_direction, diss_rate_bott_friction, diss_rate_dep_breaking, diss_rate_vegetation, diss_rate_whitecapping, dominant_direction, energy_input_atmos, frictional_velocity, mean_dir_spreading, mean_wave_direction, mean_wave_length, mean_wave_number, mean_wave_period, orbital_velocity, peak_group_vel, peak_n_factor, peak_period, peak_phase_vel, peak_spreading, peak_wave_length, peak_wave_number, rms_orbital_velocity, roller_diss_rate, roughness_length, sig_wave_height, tm_10, u_resell_number, wave_energy_dir_x, wave_energy_dir_y, zero_downcross_period, name)

Bases: OutControls

A collection of parameters that define the wind wave outputs.

Methods

from_iof_array

get_iof_array_names

to_iof_array

bottom_excursion_period = True
bottom_wave_period = True
charnock_coeff = True
continuous_peak_period = True
discrete_peak_direction = True
diss_rate_bott_friction = True
diss_rate_dep_breaking = True
diss_rate_vegetation = True
diss_rate_whitecapping = True
dominant_direction = True
energy_input_atmos = True
frictional_velocity = True
mean_dir_spreading = True
mean_wave_direction = True
mean_wave_length = True
mean_wave_number = True
mean_wave_period = True
name = 'WindWaveOutput'
orbital_velocity = True
peak_group_vel = True
peak_n_factor = True
peak_period = True
peak_phase_vel = True
peak_spreading = True
peak_wave_length = True
peak_wave_number = True
rms_orbital_velocity = True
roller_diss_rate = True
roughness_length = True
sig_wave_height = True
tm_10 = True
u_resell_number = True
wave_energy_dir_x = True
wave_energy_dir_y = True
zero_downcross_period = True
schimpy.params.build_iof_dict(iof_name, vdict, cls)

Builds dictionary of names from the class cls and the values that have the form iof_name(n) = 0 or 1 where n is an integer and the values are 0 or 1 which map onto False (0) or True (1)

schimpy.params.coerce_to_type(schema, value)
schimpy.params.create_params(namelists)
schimpy.params.get_type_dict(cls)
schimpy.params.get_value_dict(map, cls)

Create a dict from namelist from name: value elements and coerce to the type in the schema

schimpy.plot_default_formats module

Convenient routines to set up and to tweak matplotlib plots.

schimpy.plot_default_formats.set_color_cycle_dark2()

Set color cycles of Dark2 theme of colorbrewer.org globally. Just calling this function once before finalize a plot is enough to change the color cycles.

Returns:
brewer_colors: list

list of the colors

schimpy.plot_default_formats.set_dual_axes(ax, ts, cell_method='inst')

Create a dual y-axis with unit information in the given time series. It converts SI units to non-SI one.

Parameters:
ax: matplotlib.axes

axes of a plot to manage

ts: vtools.data.TimeSeries

timeseries with unit information

schimpy.plot_default_formats.set_dual_axes_elev(ax1, filtered=False)

Set dual axes for elevation.

Parameters:
ax: matplotlib axes
schimpy.plot_default_formats.set_dual_axes_salt(ax1, filtered=False)

Set a dual y-axis for salt with a PSU y-axis

Parameters:
ax: axis

a Matplotlib axes

schimpy.prepare_schism module

schimpy.priority_queue module

class schimpy.priority_queue.priorityDictionary

Bases: dict

Methods

clear()

copy()

fromkeys(iterable[, value])

Create a new dictionary with keys from iterable and values set to value.

get(key[, default])

Return the value for key if key is in the dictionary, else default.

items()

keys()

pop(key[, default])

If key is not found, default is returned if given, otherwise KeyError is raised

popitem(/)

Remove and return a (key, value) pair as a 2-tuple.

setdefault(key, val)

Reimplement setdefault to call our customized __setitem__.

smallest()

Find smallest item after removing deleted items from heap.

update([E, ]**F)

If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values()

setdefault(key, val)

Reimplement setdefault to call our customized __setitem__.

smallest()

Find smallest item after removing deleted items from heap.

schimpy.profile_plot module

schimpy.profile_plot.get_index_bounds()
schimpy.profile_plot.nearest_neighbor_fill(arr)
schimpy.profile_plot.profile_plot(x, z, data, ax, context_label=None, add_labels=False, xlabel=None, xmin=None, xmax=None, max_depth=None)

UnTRIM-like profile plot of salinity xmin,xmax are the bounds (in km) of the profile max_depth is the maximum depth, data assumed to be

schimpy.profile_plot.set_index_bounds(min_station, max_station, max_depth)
schimpy.profile_plot.vertical_fill(arr)

schimpy.raster_to_nodes module

Functions to process raster data for schimpy pre-processing.

This add rasterstats, boto3 dependency to calculate raster stastistics such as means.

schimpy.raster_to_nodes.raster_to_nodes(mesh, nodes_sel, path_raster, bins=None, mapped_values=None, mask_value=None, fill_value=None, band=1)

Applies raster values to mesh by calculating means over surrounding elementss.

When an element contains no raster data, zero will be assigned. When an element is partly covered by the raster data, an masked average is calculated.

If the bins are provided, the raster data will be binned and bins mapped to the mapped_values before the averaging begins. The binning uses numpy.digitize to classification, and in particular the i’th mapped value is used between the values of bins (i-1) and (i). There are some extra padding values provided as shown in the example

If the mask_value is given, raster data with the given mask value will be replaced with the fill_value before binning the data. This masking will only be used when bins are provided and pertains to special cases involving vegetation data.

Parameters:
mesh: schimpy.SchismMesh

The base mesh to work on

nodes_sel: array-like

The array or list of the nodes to process

path_raster: string-like

File fath to the raster data

bins: array-like, optional

Array of bins. It has to be 1-dimensional and monotonic

mapped_values: array-like, optional

The values of the classes. It should be bigger by one than the bins. The i’th value will be applied between the (i-1) and i value of bins.

band: int, optional

The band index to use from the raster data. The default value is 1.

Returns:
numpy.array

means of raster values of the element balls around the nodes

Notes

An example of this function in the pre-processor yaml is below:

gr3:
  sav_N.gr3:
   default: 0.
   polygons:
     - attribute: raster_to_nodes.raster_to_nodes(mesh, nodes_sel, 'NDVI.tif', bins=[-998., 0.0001, 0.3, 0.6, 1.0], mapped_values=[-999., 0., 40., 70., 100., -999.], maske_value=-10., fill_value=0.1)
       imports: schimpy.raster_to_nodes
       type: none
       vertices:
       #...

The values mesh and node_sel mean the SCHISM mesh and the selected node indices by a polygon. The example bins (or classifies) the raster values from 0.0001 to 0.3 and assigns the value 0., then assigns 40. for values between 0.3 and 0.6 and so forth.

schimpy.read_output_xyt module

Read outputs from read_output*_xyt and create a neat list of Vtools time series. This module depends on deprecated vtools code and is scheduled for removal

schimpy.read_output_xyt.read_depth_avg_from_output7b_xyt(fpath, time_basis)

Read output file from read_output7b_xyt and return depth and depth-averaged values in vtools.data.timeseries.

Parameters:
fpath: str

master input file name of read_output7b_xyt

time_basis: datetime.datetime

time base of the outputs

Returns:
lists of a set vtools.data.timeseries of depth and depth-averaged values

For scalars, the list has only one set of time series. For vectors, the list has two sets of time series. Each time series has multiple columns of data, and each column is for stations.

schimpy.schism_hotstart module

schimpy.schism_input module

schimpy.schism_linestring module

Line String data based on Shapely LineStrings

class schimpy.schism_linestring.LineString(coordinates=None, prop=None)

Bases: LineString

Attributes:
area

Unitless area of the geometry (float)

boundary

Returns a lower dimension geometry that bounds the object

bounds

Returns minimum bounding region (minx, miny, maxx, maxy)

centroid

Returns the geometric center of the object

convex_hull

Imagine an elastic band stretched around the geometry: that’s a

coords

Access to geometry’s coordinates (CoordinateSequence)

envelope

A figure that envelopes the geometry

geom_type

Name of the geometry’s type, such as ‘Point’

has_z

True if the geometry’s coordinate sequence(s) have z values (are

is_closed

True if the geometry is closed, else False

is_empty

True if the set of points in this geometry is empty, else False

is_ring

True if the geometry is a closed ring, else False

is_simple

True if the geometry is simple, meaning that any self-intersections

is_valid

True if the geometry is valid (definition depends on sub-class),

length

Unitless length of the geometry (float)

minimum_clearance

Unitless distance by which a node could be moved to produce an invalid geometry (float)

minimum_rotated_rectangle

Returns the oriented envelope (minimum rotated rectangle) that encloses the geometry.

oriented_envelope

Returns the oriented envelope (minimum rotated rectangle) that encloses the geometry.

prop
type
wkb

WKB representation of the geometry

wkb_hex

WKB hex representation of the geometry

wkt

WKT representation of the geometry

xy

Separate arrays of X and Y coordinate values

Methods

almost_equals(other[, decimal])

True if geometries are equal at all coordinates to a specified decimal place.

buffer(distance[, quad_segs, cap_style, ...])

Get a geometry that represents all points within a distance of this geometry.

contains(other)

Returns True if the geometry contains the other, else False

contains_properly(other)

Returns True if the geometry completely contains the other, with no common boundary points, else False

covered_by(other)

Returns True if the geometry is covered by the other, else False

covers(other)

Returns True if the geometry covers the other, else False

crosses(other)

Returns True if the geometries cross, else False

difference(other[, grid_size])

Returns the difference of the geometries.

disjoint(other)

Returns True if geometries are disjoint, else False

distance(other)

Unitless distance to other geometry (float)

dwithin(other, distance)

Returns True if geometry is within a given distance from the other, else False.

equals(other)

Returns True if geometries are equal, else False.

equals_exact(other, tolerance)

True if geometries are equal to within a specified tolerance.

hausdorff_distance(other)

Unitless hausdorff distance to other geometry (float)

interpolate(distance[, normalized])

Return a point at the specified distance along a linear geometry

intersection(other[, grid_size])

Returns the intersection of the geometries.

intersects(other)

Returns True if geometries intersect, else False

line_interpolate_point(distance[, normalized])

Return a point at the specified distance along a linear geometry

line_locate_point(other[, normalized])

Returns the distance along this geometry to a point nearest the specified point

normalize()

Converts geometry to normal form (or canonical form).

offset_curve(distance[, quad_segs, ...])

Returns a LineString or MultiLineString geometry at a distance from the object on its right or its left side.

overlaps(other)

Returns True if geometries overlap, else False

parallel_offset(distance[, side, ...])

Alternative method to offset_curve() method.

point_on_surface()

Returns a point guaranteed to be within the object, cheaply.

project(other[, normalized])

Returns the distance along this geometry to a point nearest the specified point

relate(other)

Returns the DE-9IM intersection matrix for the two geometries (string)

relate_pattern(other, pattern)

Returns True if the DE-9IM string code for the relationship between the geometries satisfies the pattern, else False

representative_point()

Returns a point guaranteed to be within the object, cheaply.

reverse()

Returns a copy of this geometry with the order of coordinates reversed.

segmentize(max_segment_length)

Adds vertices to line segments based on maximum segment length.

simplify(tolerance[, preserve_topology])

Returns a simplified geometry produced by the Douglas-Peucker algorithm

svg([scale_factor, stroke_color, opacity])

Returns SVG polyline element for the LineString geometry.

symmetric_difference(other[, grid_size])

Returns the symmetric difference of the geometries.

touches(other)

Returns True if geometries touch, else False

union(other[, grid_size])

Returns the union of the geometries.

within(other)

Returns True if geometry is within the other, else False

geometryType

property prop
class schimpy.schism_linestring.LineStringIo

Bases: object

Methods

read

write

read(**kwargs)
write(**kwargs)
class schimpy.schism_linestring.LineStringIoFactory

Bases: object

Methods

get_reader

get_writer

get_reader(name)
get_writer(name)
registered_readers = {'shp': 'LineStringShapefileReader', 'yaml': 'LineStringYamlReader'}
registered_writers = {'shp': 'LineStringShapefileWriter', 'yaml': 'LineStringYamlWriter'}
class schimpy.schism_linestring.LineStringShapefileReader

Bases: LineStringIo

Methods

read(fpath, **kwargs)

write

read(fpath, **kwargs)
Parameters:
fpath: str

input file name

Returns:
lines

list of LineStrings

class schimpy.schism_linestring.LineStringShapefileWriter

Bases: LineStringIo

Methods

write(fpath, lines[, spatial_reference, ...])

read

write(fpath, lines, spatial_reference=None, driver_name=None, **kwargs)
Parameters:
fpath: str

output file name

lines: array of schism_linestring.LineString

list of LineStrings

spatial_reference: osgeo.osr.SpatialReference
default: NAD83, UTM zone 10N, meter
todo: reference needs to be in api right now hard to use
class schimpy.schism_linestring.LineStringYamlReader

Bases: LineStringIo

Methods

read

write

read(fpath, **kwargs)
class schimpy.schism_linestring.LineStringYamlWriter

Bases: LineStringIo

Write line strings from a YAML file

Methods

read

write

write(fpath, lines)
schimpy.schism_linestring.read_linestrings(fpath)
schimpy.schism_linestring.write_linestrings(fpath, lines)
Parameters:
fpath: str

output file name

lines: array of schism_linestring.LineString

list of LineStrings

schimpy.schism_mesh module

schimpy.schism_polygon module

Polygon data structure with preprocessor-related attributes and converters

class schimpy.schism_polygon.SchismPolygon(shell=None, holes=None, prop=None)

Bases: Polygon

A polygon class based on shapely.geometry.Polygon. This class has extra information

Attributes:
area

Unitless area of the geometry (float)

attribute
boundary

Returns a lower dimension geometry that bounds the object

bounds

Returns minimum bounding region (minx, miny, maxx, maxy)

centroid

Returns the geometric center of the object

convex_hull

Imagine an elastic band stretched around the geometry: that’s a

coords

Access to geometry’s coordinates (CoordinateSequence)

envelope

A figure that envelopes the geometry

exterior
geom_type

Name of the geometry’s type, such as ‘Point’

has_z

True if the geometry’s coordinate sequence(s) have z values (are

interiors
is_closed

True if the geometry is closed, else False

is_empty

True if the set of points in this geometry is empty, else False

is_ring

True if the geometry is a closed ring, else False

is_simple

True if the geometry is simple, meaning that any self-intersections

is_valid

True if the geometry is valid (definition depends on sub-class),

length

Unitless length of the geometry (float)

minimum_clearance

Unitless distance by which a node could be moved to produce an invalid geometry (float)

minimum_rotated_rectangle

Returns the oriented envelope (minimum rotated rectangle) that encloses the geometry.

name
oriented_envelope

Returns the oriented envelope (minimum rotated rectangle) that encloses the geometry.

prop
type
wkb

WKB representation of the geometry

wkb_hex

WKB hex representation of the geometry

wkt

WKT representation of the geometry

xy

Separate arrays of X and Y coordinate values

Methods

almost_equals(other[, decimal])

True if geometries are equal at all coordinates to a specified decimal place.

buffer(distance[, quad_segs, cap_style, ...])

Get a geometry that represents all points within a distance of this geometry.

contains(point)

Check the polygon contains the point

contains_properly(other)

Returns True if the geometry completely contains the other, with no common boundary points, else False

covered_by(other)

Returns True if the geometry is covered by the other, else False

covers(other)

Returns True if the geometry covers the other, else False

crosses(other)

Returns True if the geometries cross, else False

difference(other[, grid_size])

Returns the difference of the geometries.

disjoint(other)

Returns True if geometries are disjoint, else False

distance(other)

Unitless distance to other geometry (float)

dwithin(other, distance)

Returns True if geometry is within a given distance from the other, else False.

equals(other)

Returns True if geometries are equal, else False.

equals_exact(other, tolerance)

True if geometries are equal to within a specified tolerance.

from_bounds(xmin, ymin, xmax, ymax)

Construct a Polygon() from spatial bounds.

hausdorff_distance(other)

Unitless hausdorff distance to other geometry (float)

interpolate(distance[, normalized])

Return a point at the specified distance along a linear geometry

intersection(other[, grid_size])

Returns the intersection of the geometries.

intersects(val)

Check the polygon intersects with the point

line_interpolate_point(distance[, normalized])

Return a point at the specified distance along a linear geometry

line_locate_point(other[, normalized])

Returns the distance along this geometry to a point nearest the specified point

normalize()

Converts geometry to normal form (or canonical form).

overlaps(other)

Returns True if geometries overlap, else False

point_on_surface()

Returns a point guaranteed to be within the object, cheaply.

project(other[, normalized])

Returns the distance along this geometry to a point nearest the specified point

relate(other)

Returns the DE-9IM intersection matrix for the two geometries (string)

relate_pattern(other, pattern)

Returns True if the DE-9IM string code for the relationship between the geometries satisfies the pattern, else False

representative_point()

Returns a point guaranteed to be within the object, cheaply.

reverse()

Returns a copy of this geometry with the order of coordinates reversed.

segmentize(max_segment_length)

Adds vertices to line segments based on maximum segment length.

simplify(tolerance[, preserve_topology])

Returns a simplified geometry produced by the Douglas-Peucker algorithm

svg([scale_factor, fill_color, opacity])

Returns SVG path element for the Polygon geometry.

symmetric_difference(other[, grid_size])

Returns the symmetric difference of the geometries.

touches(other)

Returns True if geometries touch, else False

union(other[, grid_size])

Returns the union of the geometries.

within(other)

Returns True if geometry is within the other, else False

geometryType

property attribute
contains(point)

Check the polygon contains the point

Parameters:
point: np.ndarray or shapely.geometry.polygon.Polygon
Returns:
bool
intersects(val)

Check the polygon intersects with the point

Parameters:
point: np.ndarray or shapely.geometry.polygon.Polygon
Returns:
bool
property name
property prop
property type
class schimpy.schism_polygon.SchismPolygonDictConverter

Bases: SchismPolygonIo

Convert a tree to a list of polygons

Methods

read

read(data)
class schimpy.schism_polygon.SchismPolygonIo

Bases: object

SchismPolygon I/O abstract class

Methods

read

read(stream)
class schimpy.schism_polygon.SchismPolygonIoFactory

Bases: object

A factory class for SchismPolygonIo

Methods

get_reader

get_writer

show_registered_readers

get_reader(name)
get_writer(name)
registered_readers = {'dict': 'SchismPolygonDictConverter', 'shp': 'SchismPolygonShapefileReader', 'yaml': 'SchismPolygonYamlReader'}
registered_writers = {'shp': 'SchismPolygonShapefileWriter', 'yaml': 'SchismPolygonYamlWriter'}
show_registered_readers()
class schimpy.schism_polygon.SchismPolygonShapefileReader

Bases: SchismPolygonIo

Read polygons from a shape file

Methods

read(fpath)

Read polygons from a Shapefile and return a list of SchismPolygons.

read(fpath)

Read polygons from a Shapefile and return a list of SchismPolygons.

Parameters:
fpath: str

Filename of a Shapefile containing Polygons with data columns such as name, type, and attribute.

Returns:
list

list of SchismPolygons

class schimpy.schism_polygon.SchismPolygonShapefileWriter

Bases: SchismPolygonIo

Methods

write(fpath, polygons[, spatial_reference, ...])

Convert SCHISM polygon YAML file to a shapefile

read

write(fpath, polygons, spatial_reference=None, driver_name=None)

Convert SCHISM polygon YAML file to a shapefile

Parameters:
fpath: str

output file name

polygons: array of schism_polygon.SchismPolygon

polygons to write

spatial_reference: osgeo.osr.SpatialReference or crs string

default: NAD83, UTM zone 10N, meter

driver_name: osgeo.ogr Driver name

default: ESRI Shapefile

class schimpy.schism_polygon.SchismPolygonYamlReader

Bases: SchismPolygonIo

Read polygons from a SCHISM YAML polygon file

Methods

read

read(fpath)
class schimpy.schism_polygon.SchismPolygonYamlWriter

Bases: SchismPolygonIo

Write polygons into a YAML file

Methods

read

write

write(fpath, polygons)
schimpy.schism_polygon.read_polygons(fpath)

Read a polygon file

schimpy.schism_polygon.write_polygons(fpath, polygons)

schimpy.schism_setup module

schimpy.schism_source module

class schimpy.schism_source.SchismSource

Bases: object

A class to hold structure information

Attributes:
coord
element_id
note
type
property coord
property element_id
property note
property type
class schimpy.schism_source.SchismSourceIO(input)

Bases: object

A class to manage source/sink I/O

Methods

read

write

read(fname)
write(fname='source_sink.in')
schimpy.schism_source.read_sources(fname)

schimpy.schism_sources_sinks module

schimpy.schism_structure module

class schimpy.schism_structure.SchismStructure

Bases: object

A class to hold structure information

Attributes:
coords
n_duplicate
name
node_pairs
properties
reference
reference_pair
type
use_timeseries

Methods

n_node_pairs

property coords
property n_duplicate
n_node_pairs()
property name
property node_pairs
property properties
property reference
property reference_pair
property type
property use_timeseries
class schimpy.schism_structure.SchismStructureIO(input)

Bases: BaseIO

A class to manage hydraulic structure I/O files

Attributes:
linecounter

Methods

read(fname)

Read in 'hydraulics.in' file.

write([fname])

Write out 'hydraulics.in' file.

read(fname)

Read in ‘hydraulics.in’ file.

write(fname='hydraulics.in')

Write out ‘hydraulics.in’ file.

schimpy.schism_vertical_mesh module

SchismVerticalMesh class with a reader

schimpy.schism_vertical_mesh.read_vmesh(fpath_vmesh, vgrid_version=None)

Read a vgrid file

schimpy.schism_yaml module

A customized version of YAML parser for SCHISM It stores document in an ordered dict and supports variable substitution.

class schimpy.schism_yaml.ArgumentParserYaml(prog=None, usage=None, description=None, epilog=None, version=None, parents=[], formatter_class=<class 'argparse.HelpFormatter'>, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)

Bases: ArgumentParser

Extended parser to handle YAML file as file input for ArgumentParser. If a file input given with ‘fromfile_prefix_chars’ has a YAML extension, ‘.yaml’, it will be handled as optional pairs for ArgumentParser. For example, ‘script.py’ can use a YAML file for an input file of ArgumentParser as follow: parser = schism_yaml.ArgumentParserYaml(fromfile_prefix_chars=’@’) parser.parse_arg()

$script.py @args.yaml

And when ‘args.yaml’ contains: input1: 1 input2: 2 3

it has the same effect as $script.py –input1 1 –input2 2 3

Methods

add_argument(add_argument)

add_subparsers(**kwargs)

error(message)

Prints a usage message incorporating the message to stderr and exits.

exit([status, message])

format_usage()

parse_args([args, namespace])

print_usage([file])

register(registry_name, value, object)

set_defaults(**kwargs)

add_argument_group

add_mutually_exclusive_group

convert_arg_line_to_args

format_help

get_default

parse_intermixed_args

parse_known_args

parse_known_intermixed_args

print_help

class schimpy.schism_yaml.YamlAction(option_strings, dest, nargs=None, **kwargs)

Bases: Action

Custom action to parse YAML files for argparse. This action reads in simple pairs of data from a YAML file, and feeds them to the parser. A YAML file must be a list of pairs without multiple levels of tree. Example: parser.add_argument(”–yaml”, action=YamlAction)

Methods

__call__(parser, namespace, values[, ...])

Call self as a function.

format_usage

schimpy.schism_yaml.dump(data, stream=None, Dumper=<class 'yaml.dumper.Dumper'>, **kwds)

Serialize a Python object into a YAML stream. If stream is None, return the produced string instead.

schimpy.schism_yaml.load(stream)

Load a schism YAML

schimpy.separate_species module

Separation of tidal data into species The key function in this module is separate_species, which decomposes tides into subtidal, diurnal, semidiurnal and noise components. A demo function is also provided that reads tide series (6min intervl) from input files, seperates the species, writes results and optionally plots an example

schimpy.separate_species.create_arg_parser()
schimpy.separate_species.main()
schimpy.separate_species.plot_result(ts, ts_semi, ts_diurnal, ts_sub_tide, station)
schimpy.separate_species.run_example()

This is the data for the example. Note that you want the data to be at least 4 days longer than the desired output

schimpy.separate_species.separate_species(ts, noise_thresh_min=40)

Separate species into subtidal, diurnal, semidiurnal and noise components

Input:

ts: timeseries to be decomposed into species, assumed to be at six minute intervals. The filters used have long lenghts, so avoid missing data and allow for four extra days worth of data on each end.

Output:

four regular time series, representing subtidal, diurnal, semi-diurnal and noise

schimpy.separate_species.write_th(filename, ts_output)

This works fine for fairly big series

schimpy.simulation_timing module

schimpy.simulation_timing.create_arg_parser()
schimpy.simulation_timing.schism_timing(workdir, start=1, end=None, block_days=1.0)

schimpy.small_areas module

schimpy.sms2gr3 module

Manage conversion from SMS 2dm format to gr3. Some material borrowed @author: snegusse

class schimpy.sms2gr3.Boundary(name, btype, nodestring)

Bases: object

schimpy.sms2gr3.addnode(list)
schimpy.sms2gr3.convert_2dm(file, outfile=None, elev2depth=False, logger=None)
schimpy.sms2gr3.create_arg_parser()

schimpy.split_quad module

schimpy.stacked_dem_fill module

Routines to fill elevation (or other scalar) values at points from a prioritized list of rasters

schimpy.stacked_dem_fill.ParseType(type)
schimpy.stacked_dem_fill.Usage()
schimpy.stacked_dem_fill.bilinear(points, gt, raster)

Bilinear interpolated point using data on raster points: npoint x 3 array of (x,y,z points) gt: geotransform information from gdal raster: the data

schimpy.stacked_dem_fill.create_arg_parser()
schimpy.stacked_dem_fill.filelist_main(demlistfile, pointlistfile, sep='')

higher level driver routine that parses the names of the DEMs from demfilelist points ( x,y or x,y,z ) from pointlistfile

schimpy.stacked_dem_fill.fill_2dm(infile, outfile, files, na_fill=2.0)
schimpy.stacked_dem_fill.fill_gr3(infile, outfile, files, elev2depth=True, na_fill=2.0)
schimpy.stacked_dem_fill.main()
schimpy.stacked_dem_fill.stacked_dem_fill(files, points, values=None, negate=False, require_all=True, na_fill=None)

Fill values at an array of points using bilinear interpolation from a prioritized stack of dems. This routine controls prioritization of the dems, gradually filling points that are still marked nan

Parameters:
files: list[str]

list of files. Existence is checked and ValueError for bad file

points: np.ndarray

this is a numpy array of points, nrow = num of points and ncol = 2 (x,y).

values: np.ndarray

values at each point – this is an output, but this gives an opportunity to use an existing data structure to receive

negate: bool

if True, values will be inverted (from elevation to depth)

require_all: bool

if True, a ValueError is raised if the list of DEMs does not cover all the points. In either case (True/False) a file is created or overwritten (dem_misses.txt) that will show all the misses.

na_fill: float

value to substitute at the end for values that are NA after all DEMs are processed. If require_all = True na_fill must be None

Returns:
valuesnp.ndarray

Values at the nodes

schimpy.stacked_dem_fill.test_main()

schimpy.station module

schimpy.station.convert_db_station_in(outfile='station.in', stationdb=None, sublocdb=None, station_request='all', default=-0.5)
schimpy.station.convert_stations(input, output, write_sta_var='all')

Read a station shapefile/.in file and write to a .in/shapefile

Parameters:
inputfname

Path to input station.in style file or station.shp style file with station id, x, y, z, name and subloc fields

outputfname

Path to input station.in style file or station.shp style file with station id, x, y, z, name and subloc fields

write_sta_var‘all’ or list(str)

List of variables to put in output request from the choices ‘elev’, ‘air pressure’, ‘wind_x’, ‘wind_y’, ‘temp’, ‘salt’, ‘u’, ‘v’, ‘w’ or ‘all’ to include them all

Returns:
ResultDataFrame

DataFrame with hierarchical index (id,subloc) and columns x,y,z,name

schimpy.station.create_arg_parser()

Create an argument parser

schimpy.station.example()
schimpy.station.flux_stations_from_yaml(inp)

Retrieve station id of fluxlines from yaml file or content

schimpy.station.main()

A main function to convert polygon files

schimpy.station.merge_station_subloc(station_dbase, station_subloc, default_z)

Merge BayDeltaSCHISM station database with subloc file, producing the union of all stations and sublocs including a default entry for stations with no subloc entry

Parameters:
station_dbaseDataFrame

This should be the input that has only the station id as an index and includes other metadata like x,y,

station_sublocDataFrame

This should have (id,subloc) as an index

Returns:
ResultDataFrame

DataFrame that links the information.

schimpy.station.read_flux_out(fpath, names, reftime)

Read fluxes from a SCHISM flux.out file

Parameters:
fpathstr
Path to the file
namesstr
name of file that contains names of flux areas, typically something like flow_xsects.yaml
reftimestr
start of simulation, against which relative times will be calculated

Read an obs_links csv file which has comma as delimiter and (id,subloc,variable) as index

schimpy.station.read_pointstrings(fpath)
schimpy.station.read_staout(fname, station_infile, reftime, ret_station_in=False, multi=False, elim_default=False, time_unit='s')

Read a SCHISM staout_* file into a pandas DataFrame

Parameters:
fpathfname

Path to input staout file or a variable name in [“elev”, “air pressure”, “wind_x”, “wind_y”, “temp”, “salt”, “u”, “v”, “w”] whose 1-index will be mapped to a name like staout_1 for elev

station_infilestr or DataFrame

Path to station.in file or DataFrame from read_station_in

reftimeTimestampe

Start of simulation, time basis for staout file elapse time

ret_station_inbool

Return station_in DataFrame for use, which may speed reading of a second file

multibool

Should the returned data have a multi index for the column with location and sublocation. If False the two are collapsed

elim_defaultbool

If the MultiIndex is collapsed, stations with subloc “default” will be collapsed. Eg. (“CLC”,”default”) becomes “CLC_default”

time_unitstring

Convertible to pandas frequency string, this is the timestamp of the file.

Returns:
ResultDataFrame

DataFrame with hierarchical index (id,subloc) and columns representing the staout data (collapsed as described above

Examples

>>> staout1,station_in = read_staout("staout_1","station.in",reftime=pd.Timestamp(2009,2,10),
                             ret_station_in = True,multi=False,elim_default=True)
>>> staout6 = read_staout("staout_6",station_in,reftime=pd.Timestamp(2009,2,10),multi=False,elim_default=True)
schimpy.station.read_station_dbase(fpath)

Read a BayDeltaSCHISM station data base csv file into a pandas DataFrame

The BayDelta SCHISM format is open, but expects these columns: index x y z ! id subloc “Name”

Parameters:
fpathfname

Path to input dbase style file

Returns:
ResultDataFrame

DataFrame with hierarchical index (id,subloc) and columns x,y,z,name

schimpy.station.read_station_in(fpath)

Read a SCHISM station.in file into a pandas DataFrame

Note

This only reads the tabular part, and assumes the BayDelta SCHISM format with columns: index x y z ! id subloc “Name”

Note that there is no header and the delimiter is a space. Also note that the text beginning with ! is extra BayDeltaSCHISM extra metadata, not required for vanilla SCHISM

Parameters:
fpathfname

Path to input station.in style file

Returns:
ResultDataFrame

DataFrame with hierarchical index (id,subloc) and columns x,y,z,name

schimpy.station.read_station_out(fpath_base, stationinfo, var=None, start=None)
schimpy.station.read_station_shp(fpath, pop_xy=True)

Read a shapefile and convert into a pandas DataFrame Parameters

fpathfname

Path to input point shapefile - has station id, x, y, z, name and subloc labels (id is the station id, index will be autogenerated)

pop_xybool

Repopulate the x & y fields with point coordinates?

Returns:
ResultDataFrame

DataFrame that has station id, x, y, z, name and subloc labels (id is the station id, index will be autogenerated)

schimpy.station.read_station_subloc(fpath)

Read a BayDeltaSCHISM station_sublocs.csv file into a pandas DataFrame

The BayDelta SCHISM format has a header and uses “,” as the delimiter and has these columns: id,subloc,z

The id is the station id, which is the key that joins this file to the station database. ‘subloc’ is a label that describes the sublocation or subloc and z is the actual elevation of the instrument

Example might be: id,subloc,z 12345,upper,-0.5

Other columns are allowed, but this will commonly merged with the station database file so we avoid column names like ‘name’ that might collide

Parameters:
fpathfname

Path to input station.in style file

Returns:
ResultDataFrame

DataFrame with hierarchical index (id,subloc) and data column z

schimpy.station.staout_name(var)
schimpy.station.station_names_from_file(fpath)
schimpy.station.station_subset(fpath, run_start, locs, extract_freq, convert=None, stationfile=None, isflux='infer', miss='raise')

Extract a subset of stations from an staout file or flux.out file

Parameters:
fpathstr

Path to the output file to be read

run_startpd.Timestamp

Start time (reference time) for the simulation elapsed time

locspd.DataFrame or str

A DataFrame with rows specifying the data to subset or a string that is the path to such a file. There are a few options. Minimally this file should have either one column called “station_id” or one called “id” and another called “subloc”. If you use station_id, it should be an underscore-connected combination of id and subloc which should be unique, and this will be the treatment of the output. of the station. If you use “subloc” you can use “default” leave the subloc column blank. You can also use another optional column called “alias” and this will become the label used.

extract_freqstr or pd.tseries.TimeOffset

Frequency to extract … this allows some economies if you want, say, 15min data. Use pandas freq string such as ‘15T’ for 15min

convert: str or function

A small number of conversions are supported (“ft”, “ec” for uS/cm, “cfs” for flow)

stationfilestr

Name of station file such as station.in. In the case of flow this will be a yaml file or fluxflag.prop file produced by our preprocessing system. If you leave this None, ‘station.in’ in the same directory as the output file will be assumed for staout files. For flow, a string must be supplied but will be tested first in the directory of execution and then side-by-side in that order.

isflux‘infer’ | True | False

Is the request for flux.out?

miss‘raise’ | ‘drop’ | ‘nan’

What to do when a requested station_id does not exist. The default, raise, helps station lists from growing faulty. ‘drop’ will ignore the column and ‘nan’ will return nans for the column.

Returns:
ResultDataFrame

DataFrame that returns the converted and subsetted data. Column names will be the ids unless ‘alias’ is provided in locs, in which case those names will be swapped in.

schimpy.station.station_subset_multidir(dirs, staoutfile, run_start, locs, extract_freq, convert, stationfile=None, names=None, isflux='infer', miss='raise')

Extract a subset of stations from an staout file or flux.out file across a list of directories

Parameters:
dirslist(str)

List of directories. The output dataframe will have a column multindex (dir,station_id) where dir is the directory of the output.

fpathstr

Path to the output file to be read

run_startpd.Timestamp

Start time (reference time) for the simulation elapsed time

locspd.DataFrame or str

A DataFrame with rows specifying the data to subset or a string that is the path to such a file. There are a few options for staout station files. Minimally this file should have either one column called “station_id” or one called “id” and another called “subloc”. If you use station_id, it should be an underscore-connected combination of id and subloc and this will be the index treatment of the output. Flux files only have the station_id option. If you use “subloc” you can use “default” leave the subloc column blank. You can also include another optional column called “alias” and this will become the label used.

extract_freqstr or pd.tseries.TimeOffset

Frequency to extract … this allows some economies if you want, say, 15min data. Use pandas freq string such as ‘15T’ for 15min

convert: str or function

A small number of conversions are supported (“ft”, “ec” for uS/cm, “cfs” for flow)

stationfilestr

Name or list of station file such as station.in. You can provide a list of the same length as dirs or a single value which will be assumed to be appropriate for all the directories. In the case of station.in, you can use None and ‘station.in’ in each directory will be assumed for staout files. For flow, a string (yaml file) must be supplied but will be tested first in the directory of execution and then side-by-side in that order.

isflux‘infer’ | True | False

Is the request for flux.out?

miss‘raise’ | ‘drop’ | ‘nan’

What to do when a requested station_id does not exist. The default, raise, helps station lists from growing faulty. ‘drop’ will ignore the column and ‘nan’ will return nans for the column.

Returns:
ResultDataFrame

DataFrame that returns the converted and subsetted data. Column names will be the ids unless ‘alias’ is provided in locs, in which case those names will be swapped in.

schimpy.station.u(x)
schimpy.station.write_pointstrings(fpath, station_in, request='all')
schimpy.station.write_station_in(fpath, station_in, request=None)

Write a SCHISM station.in file given a pandas DataFrame of metadata

Parameters:
fpathfname

Path to output station.in file

station_inDataFrame

DataFrame that has station id, x, y, z, name and subloc labels (id is the station id, index will be autogenerated)

request‘all’ or list(str)

List of variables to put in output request from the choices ‘elev’, ‘air pressure’, ‘wind_x’, ‘wind_y’, ‘temp’, ‘salt’, ‘u’, ‘v’, ‘w’ or ‘all’ to include them all

schimpy.station.write_station_shp(fpath, station_in)

Write a point Shapefile file given a pandas DataFrame of metadata

Parameters:
fpathfname

Path to output station.in file

station_inDataFrame

DataFrame that has station id, x, y, z, name and subloc labels (id is the station id, index will be autogenerated)

schimpy.subset_schism_output module

Created on Wed Oct 27 11:41:00 2021

@author: babban

schimpy.subset_schism_output.create_arg_parser()

Create an argument parser return: argparse.ArgumentParser

schimpy.subset_schism_output.create_partition(mesh, polygons, enforce_exact=False)

Takes a mesh and list of polygons and partitions according to where the centroids (mesh.centroids in schimpy) fall. Parameters ———— mesh : schimpy.SchismMesh The mesh to partition

polygons : Polygons (parsed from shape file or yaml into SCHIMPY

enforce_exact: bool Requires a unique, complete partition. Initially not implemented for True

Produces meshes and dicitonary(?) maps of local_to_global and global_to_local. (tuple or class)

schimpy.subset_schism_output.partition_schout(in_Schout_Files, partition_shp, combined=True, exclude=[], transform={'salt_depth_ave': ('depth_ave', 'salt')})

Partitions schout binary output files (start with combined) into a set of smaller schout files corresponding to each partition.

Initially implementation will be nodal variables but ultimately native centered (edge centered velocity, prism centered tracers).

Transform is an opportunity to generate new variables that are well determined with the data from one time step, but not based on time-stenciled operations.

Exclude would be an opportunity to prune variables not desired by dropping variables, although certain variables that are required for well-formedness (zcor, wet-dry) and visualization would not be “excludable” so exclude = “all_data” could be used to exclude all but the non-excludable. No output, but side effect is production of files. p0000/schout_1.nc.

schimpy.subset_schism_output.partition_scribeio(partition_shp, variables=['out2d', 'zCoordinates', 'salinity', 'horizontalVelX', 'horizontalVelY', 'verticalVelocity'])

Partitioning scribio format output files into a set of smaller files corresponding to each partitions. This function will loop all the schism scribeIO output files that contains varaibles defined by the input variables, and result subset outputs will be saved to a subset subdirectory.

Parameters:
partition_shparcgis shape file
shape files contains polygons where subset of output desried
variableslist of str
Output variables to be subsetted
schimpy.subset_schism_output.records(file)
schimpy.subset_schism_output.subset_schism_output()
schimpy.subset_schism_output.subset_schism_scribeIO_output(partition_shp)
schimpy.subset_schism_output.write_global_local_maps(dest, global_local, local_global)

writes maps out in the schism + visit format. Note that the global owner of a shared node is the lowest rank that contains it.

schimpy.three_point_linear_norm module

class schimpy.three_point_linear_norm.ThreePointLinearNorm(linthresh, vmin=None, vmax=None, clip=False)

Bases: Normalize

Attributes:
clip
vmax
vmin

Methods

__call__(value[, clip])

Normalize the data and return the normalized data.

autoscale(A)

Set vmin, vmax to min, max of A.

autoscale_None(A)

autoscale only None-valued vmin or vmax

inverse(value)

Maps the normalized value (i.e., index in the colormap) back to image data value.

process_value(value)

Homogenize the input value for easy and efficient normalization.

scaled()

return true if vmin and vmax set

autoscale(A)

Set vmin, vmax to min, max of A.

autoscale_None(A)

autoscale only None-valued vmin or vmax

inverse(value)

Maps the normalized value (i.e., index in the colormap) back to image data value.

Parameters:
value

Normalized value.

scaled()

return true if vmin and vmax set

schimpy.trimesh module

schimpy.triquadmesh module

schimpy.unit_conversions module

schimpy.vgrid_opt2 module

Package for optimising vgrid smoothness, shape and completeness

schimpy.vgrid_opt2.example()
schimpy.vgrid_opt2.fix_depth(zcor, zcornew, x)
schimpy.vgrid_opt2.gradient_matrix(mesh, sidedist2, sidemasked)
schimpy.vgrid_opt2.hess_base(xvar, zcorig, mesh, nlayer, ndx, eta, depth, gradmat, sidelen2, nodemasked, sidemasked, ata, dx2fac, curvewgt, foldwgt, foldfrac)
schimpy.vgrid_opt2.incr_grad(grad, i, k, val, ndx)
schimpy.vgrid_opt2.index_interior(mat, nodemasked, nlevel=None)
schimpy.vgrid_opt2.laplace2(mesh, nodemasked, sidemasked)

produces a 2d matrix

schimpy.vgrid_opt2.mesh_opt(zcor, mesh, nlayer, ndx, eta, depth, gradmat, sidelen2, nodemasked, sidemasked, ata, dx2fac, curvewgt, foldwgt, foldfrac, href_hess, grad_hess, laplace_hess, maxiter=8000)
schimpy.vgrid_opt2.meshessp(xvar, p, zcorig, mesh, nlayer, ndx, eta, depth, gradmat, sidelen2, nodemasked, sidemasked, ata, dx2fac, curvewgt, foldwgt, foldfrac, href_hess, grad_hess, laplace_hess)
schimpy.vgrid_opt2.meshgrad(xvar, zcorig, mesh, nlayer, ndx, eta, depth, gradmat, sidelen2, nodemasked, sidemasked, ata, dx2fac, curvewgt, foldwgt, foldfrac, href_hess, grad_hess, laplace_hess)
schimpy.vgrid_opt2.meshobj(xvar, zcorig, mesh, nlayer, ndx, eta, depth, gradmat, sidelen2, nodemasked, sidemasked, ata, dx2fac, curvewgt, foldwgt, foldfrac, href_hess, grad_hess, laplace_hess)
schimpy.vgrid_opt2.smooth_heights(zcor, x, wgt=0.2)
schimpy.vgrid_opt2.targeth2inv(zbar, eta)
schimpy.vgrid_opt2.test_gradients()
schimpy.vgrid_opt2.test_vgrid_spacing(zcor, zcorig, nodemasked, foldfrac)
schimpy.vgrid_opt2.triweight(n)

schimpy.write_ts module

schimpy.write_ts.cdec_header(fname, ts, tz, var=None, unit=None)

Helper function to create a cdec-like header Requres some metadata like time zone, variable name and unit which will be pulled from series if omitted from input.

Parameters:
fname: str

Output file name or path

ts: :class:`~vtools.data.timeseries.TimeSeries`

The time series to be stored

tz: string

Time zone of data

var: string

Variable name

unit: string

Unit of the time series

Returns:
head: string

CDEC-style header

schimpy.write_ts.write_ts(ts, fname, dateformat='%Y-%m-%d %H:%M', fmt='%.2f', header=None, sep=',')

Estimate missing values within a time series by interpolation.

Parameters:
ts: :class:`~vtools.data.timeseries.TimeSeries`

The time series to be stored

fname: string

Output file name or path

dateformat: string

Date format compatible with datetime.datetime.strftime

fmt: string

Value format compatible withy numpy.savetxt

header: string

Header to add to top of file

sep: string

Delimieter for fields, often a space or comma

Returns:

Examples

Writing csv format with date format 2009-03-15 21:00 and space separated values

>>> write_ts(ts,"test.csv","%Y-%m-%d %H:%M","%.2f,%.2f","Datetime,u,v",",")

Write vtide format with same format and space separated values, this time taking advantage of defaults

>>> write_ts(ts,"test_vtide.dat",sep = " ")

Writing cdec format, with csv values and date and time separated. The header is generated with the cdec_header helper function

>>> head = cdec_header("practice.csv",ts,"PST","Wind Vel","m/s")
>>> write_ts(ts,"test_cdec.csv",CDECDATEFMT,"%.2f",header=head)

Module contents

Top-level package for schimpy.