CLI Commands

make_storm_ensemble

usage: make_storm_ensemble [-h] --number-of-perturbations
                           NUMBER_OF_PERTURBATIONS --storm-code STORM_CODE
                           [--start-date START_DATE] [--end-date END_DATE]
                           [--advisories [ADVISORIES ...]]
                           [--file-deck FILE_DECK]
                           [directory]

positional arguments:
  directory             output directory

options:
  -h, --help            show this help message and exit
  --number-of-perturbations NUMBER_OF_PERTURBATIONS
                        number of perturbations
  --storm-code STORM_CODE
                        storm name/code
  --start-date START_DATE
                        start date
  --end-date END_DATE   end date
  --advisories [ADVISORIES ...]
                        record type (i.e. `BEST`, `OFCL`)
  --file-deck FILE_DECK
                        letter of file deck, one of `a`, `b`, or `f`
ensembleperturbation.perturbation.atcf.perturb_tracks(perturbations: int | ~typing.List[float] | ~typing.List[~typing.Dict[str, float]], directory: ~os.PathLike | None = None, storm: str | ~os.PathLike | None = None, variables: ~typing.List[~ensembleperturbation.perturbation.atcf.VortexPerturbedVariable] | None = None, sample_from_distribution: bool = False, sample_rule: str = 'random', quadrature: bool = False, quadrature_order: int = 3, quadrature_rule: str = 'Gaussian', sparse_quadrature: bool = False, start_date: ~datetime.datetime | None = None, end_date: ~datetime.datetime | None = None, file_deck: ~stormevents.nhc.atcf.ATCF_FileDeck | None = None, advisories: ~typing.List[str] | None = None, overwrite: bool = False, parallel: bool = True, features: ~ensembleperturbation.perturbation.atcf.PerturberFeatures | None = <PerturberFeatures.ISOTACH_ADJUSTMENT: 1>)

write a set of perturbed storm tracks

Parameters:
  • perturbations – either the number of perturbations to create, or a list of floats meant to represent points on either the standard Gaussian distribution or a bounded uniform distribution

  • directory – directory to which to write

  • storm – ATCF storm ID, or file path to an existing fort.22 / ATCF file, from which to perturb

  • variables – vortex variables to perturb

  • sample_from_distribution – override given perturbations with random samples from the joint distribution

  • sample_rule – rule to use for the distribution sampling. Please choose from: random [default], sobol, halton,``hammersley``, korobov, additive_recursion, or latin_hypercube

  • quadrature – add perturbations along quadrature

  • quadrature_order – order of the quadrature

  • quadrature_rule – rule of the quadrature for generating abscissas and weights

  • sparse_quadrature – use Smolyak’s sparse grid instead of normal tensor product grid

  • start_date – model start time of ensemble

  • end_date – model end time of ensemble

  • file_deck – letter of file deck, one of a, b

  • advisories – record types (i.e. BEST, OFCL)

  • overwrite – overwrite existing files

  • parallel – generate perturbations concurrently

Returns:

mapping of track names to perturbation JSONs

perturb_tracks

perturb_tracks is an extension of initialize_adcirc from CoupledModelDriver

[2026-01-14 17:29:47,941] /home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/coupledmodeldriver/_depend.py WARNING : can't find the 'adcircpy' module
Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/bin/perturb_tracks", line 3, in <module>
    from ensembleperturbation.client.perturb_tracks import main
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/ensembleperturbation/client/perturb_tracks.py", line 4, in <module>
    from coupledmodeldriver.client.initialize_adcirc import (
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/coupledmodeldriver/client/initialize_adcirc.py", line 9, in <module>
    from adcircpy import TidalSource
ModuleNotFoundError: No module named 'adcircpy'

The extension adds several new arguments: --perturbations, --variables, --quadrature, and --serial

perturb_tracks \
    --platform HERA \
    --mesh-directory /scratch2/COASTAL/coastal/save/shared/models/meshes/hsofs/250m/v1.0_fixed \
    --modeled-start-time "2018-09-11 06:00:00" \
    --modeled-duration "07:00:00:00" \
    --modeled-timestep "00:00:02" \
    --nems-interval "01:00:00" \
    --forcings tidal,besttrack \
    --tidal-spinup-duration "07:00:00:00" \
    --tidal-source TPXO \
    --tidal-path /scratch2/COASTAL/coastal/save/shared/models/forcings/tides/h_tpxo9.v1.nc \
    --besttrack-nws 8 \
    --besttrack-storm-id florence2018 \
    --adcirc-executable /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp_PaHM/ALLBIN_INSTALL/NEMS.x \
    --adcprep-executable /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp_PaHM/ALLBIN_INSTALL/adcprep \
    --perturbations 256 \
    --quadrature \
    --serial

combine_results

Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/bin/combine_results", line 3, in <module>
    from ensembleperturbation.client.combine_results import main
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/ensembleperturbation/client/combine_results.py", line 11, in <module>
    from ensembleperturbation.parsing.schism import combine_outputs as combine_outputs_schism
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/ensembleperturbation/parsing/schism.py", line 19, in <module>
    from pyschism.mesh import Hgrid
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/__init__.py", line 4, in <module>
    from pyschism.stations import Stations
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/stations.py", line 12, in <module>
    from pyschism.enums import (
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/enums.py", line 707, in <module>
    class Sflux1Types(Enum):
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/enums.py", line 709, in Sflux1Types
    from pyschism.forcing import nws
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/forcing/__init__.py", line 3, in <module>
    from pyschism.forcing.nws.nws2.gfs import GlobalForecastSystem
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/forcing/nws/__init__.py", line 1, in <module>
    from pyschism.forcing.nws.nws2 import NWS2
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/forcing/nws/nws2/__init__.py", line 1, in <module>
    from pyschism.forcing.nws.nws2.nws2 import NWS2
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/forcing/nws/nws2/nws2.py", line 9, in <module>
    from pyschism.forcing.nws.nws2.sflux import SfluxDataset
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/pyschism/forcing/nws/nws2/sflux.py", line 9, in <module>
    import cf
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/cf/__init__.py", line 235, in <module>
    from .constructs import Constructs
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/cf/constructs.py", line 6, in <module>
    from .query import Query
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/cf/query.py", line 9, in <module>
    from .data import Data
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/cf/data/__init__.py", line 1, in <module>
    from .data import Data
  File "/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/cf/data/data.py", line 18, in <module>
    from dask.base import collections_to_dsk, is_dask_collection, tokenize
ImportError: cannot import name 'collections_to_dsk' from 'dask.base' (/home/docs/checkouts/readthedocs.org/user_builds/ensembleperturbation/envs/stable/lib/python3.10/site-packages/dask/base.py)

plot_results

Matplotlib is building the font cache; this may take a moment.
usage: plot_results [-h] filename

positional arguments:
  filename    filename (`*.h5`) generated by `combine_results`

options:
  -h, --help  show this help message and exit