Internal constants

Internal constants

Constants and defaults for aubellhop.

This file contains various dataclasses and wrapper classes for storing:

  • List of all external file types and their extensions

  • String constants used throughout the codebase for autocomplete and error-checking

  • Mappngs between Bellhop character “flags” and their user-level option name

  • Default settings for various Bellhop classes

class aubellhop.constants.FileExt[source]

Strings to define file extensions.

Using this class avoids typos in the source. It is also used to loop through files to delete them when needed before/after Bellhop execution.

arr = '.arr'
ati = '.ati'
bty = '.bty'
log = '.log'
sbp = '.sbp'
shd = '.shd'
prt = '.prt'
ray = '.ray'
env = '.env'
ssp = '.ssp'
brc = '.brc'
trc = '.trc'
class aubellhop.constants.BHStrings(*values)[source]

String definitions to avoid hard-coding magic strings in the source code

This helps prevent typos and permits autocomplete (if your editor is smart enough).

default = 'default'
none = 'none'
two_d = '2D'
two_half_d = '2.5D'
three_d = '3D'
linear = 'linear'
spline = 'spline'
pchip = 'pchip'
nlinear = 'nlinear'
quadrilateral = 'quadrilateral'
hexahedral = 'hexahedral'
curvilinear = 'curvilinear'
vacuum = 'vacuum'
acousto_elastic = 'acousto-elastic'
rigid = 'rigid'
grain = 'grain'
from_file = 'from-file'
flat = 'flat'
line = 'line'
point = 'point'
cartesian = 'cartesian'
ray = 'ray'
hat_cartesian = 'hat-cartesian'
hat_ray = 'hat-ray'
gaussian_simple = 'gaussian-simple'
gaussian_cartesian = 'gaussian-cartesian'
gaussian_ray = 'gaussian-ray'
omnidirectional = 'omnidirectional'
single_beam = 'single beam'
rectilinear = 'rectilinear'
irregular = 'irregular'
thorp = 'thorp'
francois_garrison = 'francois-garrison'
biological = 'biological'
nepers_per_meter = 'nepers per meter'
frequency_dependent = 'frequency dependent'
db_per_meter = 'dB per meter'
db_per_wavelength = 'dB per wavelength'
quality_factor = 'quality factor'
loss_parameter = 'loss parameter'
rays = 'rays'
eigenrays = 'eigenrays'
arrivals = 'arrivals'
arrivals_b = 'arrivals-binary'
coherent = 'coherent'
incoherent = 'incoherent'
semicoherent = 'semicoherent'
class aubellhop.constants.FlagMaps[source]

Mappings from Bellhop single-char input file options to readable Python options

These are also defined with reverse mappings in the form:

>>> FlagMaps.soundspeed_interp["S"]
"spline"
>>> FlagMaps.soundspeed_interp_rev["spline"]
"S"
soundspeed_interp = {' ': BHStrings.default, 'C': BHStrings.linear, 'H': BHStrings.hexahedral, 'N': BHStrings.nlinear, 'P': BHStrings.pchip, 'Q': BHStrings.quadrilateral, 'S': BHStrings.spline}
bottom_interp = {'C': BHStrings.curvilinear, 'L': BHStrings.linear}
surface_interp = {'C': BHStrings.curvilinear, 'L': BHStrings.linear}
bottom_boundary_condition = {' ': BHStrings.default, 'A': BHStrings.acousto_elastic, 'F': BHStrings.from_file, 'G': BHStrings.grain, 'R': BHStrings.rigid, 'V': BHStrings.vacuum}
surface_boundary_condition = {' ': BHStrings.default, 'A': BHStrings.acousto_elastic, 'F': BHStrings.from_file, 'R': BHStrings.rigid, 'V': BHStrings.vacuum}
attenuation_units = {' ': BHStrings.default, 'F': BHStrings.frequency_dependent, 'L': BHStrings.loss_parameter, 'M': BHStrings.db_per_meter, 'N': BHStrings.nepers_per_meter, 'Q': BHStrings.quality_factor, 'W': BHStrings.db_per_wavelength}
volume_attenuation = {' ': BHStrings.none, 'B': BHStrings.biological, 'F': BHStrings.francois_garrison, 'T': BHStrings.thorp}
_bathymetry = {' ': BHStrings.default, '*': BHStrings.from_file, '_': BHStrings.flat, '~': BHStrings.from_file}
_altimetry = {' ': BHStrings.default, '*': BHStrings.from_file, '_': BHStrings.flat, '~': BHStrings.from_file}
source_type = {' ': BHStrings.default, 'R': BHStrings.point, 'X': BHStrings.line}
_sbp_file = {' ': BHStrings.default, '*': BHStrings.from_file, 'O': BHStrings.omnidirectional}
grid_type = {' ': BHStrings.default, 'I': BHStrings.irregular, 'R': BHStrings.rectilinear}
beam_type = {' ': BHStrings.default, 'B': BHStrings.gaussian_cartesian, 'C': BHStrings.cartesian, 'G': BHStrings.hat_cartesian, 'R': BHStrings.ray, 'S': BHStrings.gaussian_simple, '^': BHStrings.hat_cartesian, 'b': BHStrings.gaussian_ray, 'g': BHStrings.hat_ray}
dimension = {' ': BHStrings.two_d, '2': BHStrings.two_half_d, '3': BHStrings.three_d}
_single_beam = {' ': BHStrings.default, 'I': BHStrings.single_beam}
task = {'A': BHStrings.arrivals, 'C': BHStrings.coherent, 'E': BHStrings.eigenrays, 'I': BHStrings.incoherent, 'R': BHStrings.rays, 'S': BHStrings.semicoherent, 'a': BHStrings.arrivals_b}
mode = {'C': BHStrings.coherent, 'I': BHStrings.incoherent, 'S': BHStrings.semicoherent}
soundspeed_interp_rev = {BHStrings.default: ' ', BHStrings.hexahedral: 'H', BHStrings.linear: 'C', BHStrings.nlinear: 'N', BHStrings.pchip: 'P', BHStrings.quadrilateral: 'Q', BHStrings.spline: 'S'}
bottom_interp_rev = {BHStrings.curvilinear: 'C', BHStrings.linear: 'L'}
surface_interp_rev = {BHStrings.curvilinear: 'C', BHStrings.linear: 'L'}
bottom_boundary_condition_rev = {BHStrings.acousto_elastic: 'A', BHStrings.default: ' ', BHStrings.from_file: 'F', BHStrings.grain: 'G', BHStrings.rigid: 'R', BHStrings.vacuum: 'V'}
surface_boundary_condition_rev = {BHStrings.acousto_elastic: 'A', BHStrings.default: ' ', BHStrings.from_file: 'F', BHStrings.rigid: 'R', BHStrings.vacuum: 'V'}
attenuation_units_rev = {BHStrings.db_per_meter: 'M', BHStrings.db_per_wavelength: 'W', BHStrings.default: ' ', BHStrings.frequency_dependent: 'F', BHStrings.loss_parameter: 'L', BHStrings.nepers_per_meter: 'N', BHStrings.quality_factor: 'Q'}
volume_attenuation_rev = {BHStrings.biological: 'B', BHStrings.francois_garrison: 'F', BHStrings.none: ' ', BHStrings.thorp: 'T'}
_bathymetry_rev = {BHStrings.default: ' ', BHStrings.flat: '_', BHStrings.from_file: '*'}
_altimetry_rev = {BHStrings.default: ' ', BHStrings.flat: '_', BHStrings.from_file: '*'}
source_type_rev = {BHStrings.default: ' ', BHStrings.line: 'X', BHStrings.point: 'R'}
grid_type_rev = {BHStrings.default: ' ', BHStrings.irregular: 'I', BHStrings.rectilinear: 'R'}
beam_type_rev = {BHStrings.cartesian: 'C', BHStrings.default: ' ', BHStrings.gaussian_cartesian: 'B', BHStrings.gaussian_ray: 'b', BHStrings.gaussian_simple: 'S', BHStrings.hat_cartesian: '^', BHStrings.hat_ray: 'g', BHStrings.ray: 'R'}
_single_beam_rev = {BHStrings.default: ' ', BHStrings.single_beam: 'I'}
task_rev = {BHStrings.arrivals: 'A', BHStrings.arrivals_b: 'a', BHStrings.coherent: 'C', BHStrings.eigenrays: 'E', BHStrings.incoherent: 'I', BHStrings.rays: 'R', BHStrings.semicoherent: 'S'}
mode_rev = {BHStrings.coherent: 'C', BHStrings.incoherent: 'I', BHStrings.semicoherent: 'S'}
dimension_rev = {BHStrings.two_half_d: '2', BHStrings.two_d: ' ', BHStrings.three_d: '3'}
class aubellhop.constants.ModelDefaults(name_2d: str = 'bellhop', name_3d: str = 'bellhop3d', exe_2d: str = 'bellhop.exe', exe_3d: str = 'bellhop3d.exe', dim_2d: int = 2, dim_3d: int = 3)[source]

Defaults within the Bellhop model class.

name_2d: str = 'bellhop'
name_3d: str = 'bellhop3d'
exe_2d: str = 'bellhop.exe'
exe_3d: str = 'bellhop3d.exe'
dim_2d: int = 2
dim_3d: int = 3
class aubellhop.constants.MiscDefaults(beam_angle_halfspace: float = 90.0, beam_angle_fullspace: float = 180.0, beam_bearing_halfspace: float = 90.0, beam_bearing_fullspace: float = 180.0, density: float = 1000.0, sound_speed: float = 1500.0)[source]

Defaults for parameters within setup code.

beam_angle_halfspace: float = 90.0
beam_angle_fullspace: float = 180.0
beam_bearing_halfspace: float = 90.0
beam_bearing_fullspace: float = 180.0
density: float = 1000.0
sound_speed: float = 1500.0
class aubellhop.constants.EnvDefaults(attenuation_units: str = BHStrings.frequency_dependent, bottom_attenuation: float = 0.1, bottom_boundary_condition: str = BHStrings.acousto_elastic, bottom_interp: str = BHStrings.linear, comment_pad: int = 50, dimension: str = BHStrings.two_d, _dimension: int = 2, frequency: float = 25000.0, interference_mode: str = BHStrings.coherent, simulation_depth_scale: float = 1.01, simulation_range_scale: float = 1.1, simulation_cross_range_scale: float = 2.0, simulation_cross_range_min: float = 10.0, soundspeed_interp: str = BHStrings.linear, surface_depth: float = 0.0, surface_interp: str = BHStrings.linear, volume_attenuation: str = BHStrings.none)[source]

Defaults for the Environment class.

attenuation_units: str = 'frequency dependent'
bottom_attenuation: float = 0.1
bottom_boundary_condition: str = 'acousto-elastic'
bottom_interp: str = 'linear'
comment_pad: int = 50
dimension: str = '2D'
_dimension: int = 2
frequency: float = 25000.0
interference_mode: str = 'coherent'
simulation_depth_scale: float = 1.01
simulation_range_scale: float = 1.1
simulation_cross_range_scale: float = 2.0
simulation_cross_range_min: float = 10.0
soundspeed_interp: str = 'linear'
surface_depth: float = 0.0
surface_interp: str = 'linear'
volume_attenuation: str = 'none'