underwater.propagation.weston_regimes
La referencia de la API se publica en inglés en los dos idiomas: se genera a partir de los docstrings del código, que son su texto original.
Weston’s shallow-water propagation regimes (flux theory).
A source in a shallow-water waveguide loses energy in four successive range regimes, each with its own power law. The boundaries between them follow from the seabed reflectivity alone, which makes the set an inexpensive analytic reference for any numerical propagation model:
- spherical spreading — (), while the sound has not yet felt the boundaries;
- cylindrical spreading — (),
once the energy is confined to a cylinder of height
Hand only rays within the critical angle survive; - mode stripping — (), once the accumulated reflection loss has eroded the steep paths;
- single mode — an exponential decay dominated by the lowest-order mode.
Everything here is implemented clean-room from Ainslie, Principles of Sonar
Performance Modelling (Springer 2010), §9.1.1.2 (printed pp. 452-458):
Equations (9.42) to (9.61) and the seabed properties of Table 9.1
(WESTON_SEABEDS). The quantity computed is Ainslie’s propagation
factor F (units m⁻²), reported as the propagation loss
dB re 1 m², which reduces to spherical
spreading for a point source in free water.
The regime formulae are energy-flux (incoherent) results: they describe the
range-averaged field, not its modal interference. That is exactly what makes
them a usable cross-check for phonometry.underwater.propagation.numerical
— the range average of a normal-mode or parabolic-equation field over many
interference cycles converges on the cylindrical-spreading law, with
for a totally reflecting (pressure-release) bottom.
Auto-generated from the source docstrings by
scripts/generate_api_docs.py(make api-docs). Do not edit by hand.
critical_grazing_angle
Section titled “critical_grazing_angle”critical_grazing_angle(sound_speed_ratio: float) -> floatCritical grazing angle , in radians.
A seabed slower than the water (, e.g.
mud) has no critical angle; the function then returns 0, which
correctly switches the reflection-loss gradient to the
refracting-sediment branch of reflection_loss_gradient.
Parameters
| Name | Description |
|---|---|
sound_speed_ratio | , dimensionless and positive. |
Returns: The critical grazing angle, in radians (0 if none exists).
Raises
| Exception | When |
|---|---|
| ValueError | If the ratio is not positive and finite. |
effective_depth
Section titled “effective_depth”effective_depth( water_depth: float, frequency_hz: float, *, seabed: str | WestonSeabed = 'sand', sound_speed: float = 1500.0,) -> floatWeston effective water depth He (Ainslie Eq. 9.55), in metres.
: the depth at which a pressure-release boundary appears to lie, a short distance below the true seabed. Only meaningful for a seabed with a critical angle.
Parameters
| Name | Description |
|---|---|
water_depth | Water-column depth H, in metres. |
frequency_hz | Acoustic frequency, in Hz. |
seabed | "sand", "mud" or a WestonSeabed. |
sound_speed | Water sound speed c_w, in m/s. |
Returns: The effective depth He, in metres.
Raises
| Exception | When |
|---|---|
| ValueError | If the seabed has no critical angle or an input is invalid. |
loss_parameter
Section titled “loss_parameter”loss_parameter(attenuation_db_per_wavelength: float) -> floatSediment loss parameter (Ainslie Eq. 9.23).
Parameters
| Name | Description |
|---|---|
attenuation_db_per_wavelength | , in dB per wavelength. |
Returns: The dimensionless loss parameter .
Raises
| Exception | When |
|---|---|
| ValueError | If the attenuation is negative or non-finite. |
reflection_loss_gradient
Section titled “reflection_loss_gradient”reflection_loss_gradient( seabed: str | WestonSeabed = 'sand', *, frequency_hz: float | None = None,) -> floatReflection loss gradient , in nepers per radian.
The rate at which the seabed reflection loss grows with grazing angle, (Ainslie Eq. 9.45). Two branches:
- a reflecting seabed with a critical angle (sand, coarse silt), (Eq. 9.51), frequency-independent;
- a refracting seabed with none (mud, clay, fine silt), (Eq. 9.53), proportional to frequency.
Parameters
| Name | Description |
|---|---|
seabed | "sand", "mud" or an explicit WestonSeabed. |
frequency_hz | Acoustic frequency, in Hz; required only for the refracting branch (). |
Returns: The reflection loss gradient , in Np/rad.
Raises
| Exception | When |
|---|---|
| ValueError | If the frequency is missing or invalid for a refracting seabed. |
waveguide_cutoff_frequency
Section titled “waveguide_cutoff_frequency”waveguide_cutoff_frequency( water_depth: float, *, seabed: str | WestonSeabed = 'sand', sound_speed: float = 1500.0,) -> floatShallow-water waveguide cut-off frequency fc (Ainslie Eq. 9.60),
in Hz.
— below it no mode is cut on and ducted propagation does not occur.
Parameters
| Name | Description |
|---|---|
water_depth | Water-column depth H, in metres. |
seabed | "sand", "mud" or a WestonSeabed. |
sound_speed | Water sound speed c_w, in m/s. |
Returns: The cut-off frequency, in Hz.
Raises
| Exception | When |
|---|---|
| ValueError | If the seabed has no critical angle or an input is invalid. |
weston_propagation_loss
Section titled “weston_propagation_loss”weston_propagation_loss( range_m: NDArray[np.float64] | list[float] | float, frequency_hz: float, water_depth: float, *, seabed: str | WestonSeabed = 'sand', sound_speed: float = 1500.0, source_depth: float | None = None, receiver_depth: float | None = None, critical_angle: float | None = None, reflection_loss_gradient_value: float | None = None,) -> WestonPropagationResultPropagation loss across Weston’s four shallow-water regimes.
Assembles the piecewise loss from Ainslie’s Equations (9.42), (9.49) and
(9.54), switching regime at the boundaries of
weston_regime_boundaries, and returns each regime’s own law over the
whole range grid so the transitions can be drawn.
Parameters
| Name | Description |
|---|---|
range_m | Range(s) from the source, in metres (scalar or array, strictly positive). |
frequency_hz | Acoustic frequency, in Hz. |
water_depth | Water-column depth H, in metres. |
seabed | "sand", "mud" or a WestonSeabed. |
sound_speed | Water sound speed c_w, in m/s. |
source_depth | Source depth z0, in metres; defaults to H/2 (used only by the single-mode formula). |
receiver_depth | Receiver depth z, in metres; defaults to H/2. |
critical_angle | Override , in degrees (90 for an ideal totally reflecting waveguide). |
reflection_loss_gradient_value | Override , in Np/rad (0 for a lossless bottom: no mode stripping, no single-mode regime). |
Returns: A WestonPropagationResult.
Raises
| Exception | When |
|---|---|
| ValueError | If an input is invalid. |
weston_regime_boundaries
Section titled “weston_regime_boundaries”weston_regime_boundaries( frequency_hz: float, water_depth: float, *, seabed: str | WestonSeabed = 'sand', sound_speed: float = 1500.0, critical_angle: float | None = None, reflection_loss_gradient_value: float | None = None,) -> WestonRegimeBoundariesRegime boundaries of a shallow-water waveguide (Ainslie §9.1.1.2).
Parameters
| Name | Description |
|---|---|
frequency_hz | Acoustic frequency, in Hz. |
water_depth | Water-column depth H, in metres. |
seabed | "sand", "mud" or a WestonSeabed. |
sound_speed | Water sound speed c_w, in m/s. |
critical_angle | Override the seabed critical angle , in degrees. Use 90 for the ideal totally reflecting waveguide. |
reflection_loss_gradient_value | Override , in Np/rad. Use 0 for a lossless bottom (no mode stripping, no single-mode regime). |
Returns: A WestonRegimeBoundaries.
Raises
| Exception | When |
|---|---|
| ValueError | If an input is invalid. |
WESTON_REGIMES
Section titled “WESTON_REGIMES”Constant (tuple).
WESTON_REGIMES = ('spherical', 'cylindrical', 'mode-stripping', 'single-mode')WESTON_SEABEDS
Section titled “WESTON_SEABEDS”Constant (dict).
WESTON_SEABEDS = {'sand': WestonSeabed(name='sand', grain_size=1.5, sound_speed_ratio=1.2, density_ratio=2.1, attenuation_db_per_wavelength=0.88, loss_parameter=0.0161, sound_speed_gradient=0.0), 'mud': WestonSeabed(name='mud', grain_size=8.0, sound_speed_ratio=1.0, density_ratio=1.4, attenuation_db_per_wavelength=0.09, loss_parameter=0.00165, sound_speed_gradient=1.0)}WestonPropagationResult
Section titled “WestonPropagationResult”WestonPropagationResult( range_m: NDArray[np.float64], propagation_loss: NDArray[np.float64], propagation_factor: NDArray[np.float64], regime: NDArray[np.str_], spherical: NDArray[np.float64], cylindrical: NDArray[np.float64], mode_stripping: NDArray[np.float64], single_mode: NDArray[np.float64], multipath: NDArray[np.float64], boundaries: WestonRegimeBoundaries, frequency: float, water_depth: float, source_depth: float, receiver_depth: float, seabed: str,)Weston regime propagation loss versus range.
Attributes
| Name | Description |
|---|---|
range_m | Ranges from the source, in metres. |
propagation_loss | Composite propagation loss per range, in dB re 1 m². |
propagation_factor | The composite propagation factor F, in m⁻². |
regime | The active regime label at each range (one of WESTON_REGIMES). |
spherical | Spherical-spreading loss at every range, in dB. |
cylindrical | Cylindrical-spreading loss (Eq. 9.42) at every range, dB. |
mode_stripping | Mode-stripping loss (Eq. 9.49) at every range, dB (nan when the bottom is lossless: without reflection loss there is nothing to strip). |
single_mode | Single-mode loss (Eq. 9.54) at every range, in dB. |
multipath | Loss from the continuous multipath integral (Eq. 9.46), which joins the cylindrical and mode-stripping regimes smoothly, in dB. |
boundaries | The WestonRegimeBoundaries in force. |
frequency | Acoustic frequency, in Hz. |
water_depth | Water-column depth H, in metres. |
source_depth | Source depth z0, in metres. |
receiver_depth | Receiver depth z, in metres. |
seabed | Name of the seabed used. |
WestonPropagationResult.plot()
Section titled “WestonPropagationResult.plot()”WestonPropagationResult.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the composite loss with each regime’s law and the boundaries.
WestonRegimeBoundaries
Section titled “WestonRegimeBoundaries”WestonRegimeBoundaries( spherical_to_cylindrical: float, cylindrical_to_mode_stripping: float, mode_stripping_to_single_mode: float, critical_angle: float, reflection_loss_gradient: float, effective_depth: float, cutoff_frequency: float, mode_count: float,)Range boundaries between Weston’s four propagation regimes.
Attributes
| Name | Description |
|---|---|
spherical_to_cylindrical | Range at which and are equal, , in metres. |
cylindrical_to_mode_stripping | Ainslie Eq. (9.50) , in metres (inf for a lossless bottom). |
mode_stripping_to_single_mode | , in metres (inf for a lossless bottom). See the module note on Eq. (9.57). |
critical_angle | Critical grazing angle , in radians. |
reflection_loss_gradient | , in Np/rad. |
effective_depth | Weston effective depth He, in metres. |
cutoff_frequency | Waveguide cut-off frequency, in Hz (nan when the seabed has no critical angle). |
mode_count | Number of cut-on modes, (Eq. 9.58), as a real number. |
WestonSeabed
Section titled “WestonSeabed”WestonSeabed( name: str, grain_size: float, sound_speed_ratio: float, density_ratio: float, attenuation_db_per_wavelength: float, loss_parameter: float, sound_speed_gradient: float,)Characteristic seabed properties (Ainslie Table 9.1, printed p. 454).
Attributes
| Name | Description |
|---|---|
name | Sediment name. |
grain_size | Grain size Mz (phi units). |
sound_speed_ratio | . |
density_ratio | . |
attenuation_db_per_wavelength | , in dB per wavelength. |
loss_parameter | (Equation 9.23). |
sound_speed_gradient | c', the sediment sound-speed gradient, in s⁻¹ (0 for sand, 1 for mud). |