Skip to main content

Simple 1D Wave Attenuation Model for Coastal Vegetation

Project description

wave-attenuation-1d: Simple 1D Wave Attenuation Model for Coastal Vegetation

Python PyPI version License: MIT DOI Code style: black

A fast numerical solver for simulating wave attenuation through coastal vegetation, solving the linearized shallow water equations with vegetation-induced drag.

Overview

This package models how coastal vegetation (e.g., mangroves, salt marshes) reduces wave energy, providing a nature-based solution for coastal protection. The model uses high-order numerical methods with Numba acceleration for efficient computation.

Mathematical Model

The solver implements the 1D linearized shallow water equations with vegetation drag:

$\frac{\partial \eta}{\partial t} + h\frac{\partial u}{\partial x} = 0$

$\frac{\partial u}{\partial t} + g\frac{\partial \eta}{\partial x} = -c_D \chi_{\text{veg}}(x) u$

where:

  • $\eta(x,t)$ - free surface elevation [m]
  • $u(x,t)$ - depth-averaged velocity [m/s]
  • $h$ - water depth [m]
  • $g$ - gravitational acceleration (9.81 m/s²)
  • $c_D$ - linearized drag coefficient [1/s]
  • $\chi_{\text{veg}}(x)$ - vegetation indicator function

Installation

pip install wave-attenuation-1d

Requirements

  • Python ≥ 3.8
  • NumPy ≥ 1.20.0
  • Numba ≥ 0.54.0
  • netCDF4 ≥ 1.5.0
  • tqdm ≥ 4.62.0

Quick Start

# Run with example configuration
wave-attenuation-1d configs/sparse_config.txt

# Run with custom config
wave-attenuation-1d my_config.txt

# Check version
wave-attenuation-1d --version

Features

  • 4th-order Runge-Kutta time integration with implicit drag treatment
  • Numba JIT compilation for ~100x speedup over pure Python
  • NetCDF output with CF-1.8 compliant metadata
  • Automatic transmission coefficient calculation
  • Configurable vegetation patches with varying drag coefficients

Configuration

Create a text configuration file:

[DOMAIN]
L = 200.0      # Domain length [m]
d = 2.0        # Water depth [m]
dx = 0.5       # Grid spacing [m]
T = 500.0      # Simulation time [s]

[WAVE]
A = 0.3        # Wave amplitude [m]
omega = 0.628  # Angular frequency [rad/s]

[VEGETATION]
start = 80.0   # Vegetation start [m]
end = 120.0    # Vegetation end [m]
cD = 0.14      # Drag coefficient [1/s]

[NUMERICAL]
cfl_target = 0.4    # Target CFL number
output_dt = 1.0     # Output interval [s]

Output Format

Results are saved as NetCDF files containing:

  • Time series of surface elevation and velocity
  • Wave envelope and RMS velocity
  • Metadata including all parameters and transmission coefficients

Numerical Methods

  • Spatial discretization: 2nd-order centered differences
  • Time integration: 4th-order Runge-Kutta (RK4)
  • Drag treatment: Implicit scheme for unconditional stability
  • Boundary conditions:
    • Left: Sinusoidal wave generation
    • Right: Sommerfeld radiation condition

Citation

If you use this model in your research, please cite:

@software{herho2025wave,
  author = {Herho, Sandy H. S. and Anwar, Iwan P. and Ndruru, Theo R. E. B. N. 
            and Suwarman, Rusmawan and Irawan, Dasapta E.},
  title = {{wave-attenuation-1d: Simple 1D Wave Attenuation Model for Coastal Vegetation}},
  year = {2025},
  url = {https://github.com/sandyherho/wave_attenuation_1d}
}

Authors

License

MIT License - see LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wave_attenuation_1d-0.1.2.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wave_attenuation_1d-0.1.2-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file wave_attenuation_1d-0.1.2.tar.gz.

File metadata

  • Download URL: wave_attenuation_1d-0.1.2.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.2 Linux/6.11.9-100.fc39.x86_64

File hashes

Hashes for wave_attenuation_1d-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f987231ea4a742226fb5fb2b5ea91a8193bae2d69754d103ff8fc158e27d9e70
MD5 4723cc6db78435be79618f777278ba77
BLAKE2b-256 780782b2c71b92948007b678aae857129221807fc2c7edf66ae3fb8d531b39fb

See more details on using hashes here.

File details

Details for the file wave_attenuation_1d-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: wave_attenuation_1d-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.2 Linux/6.11.9-100.fc39.x86_64

File hashes

Hashes for wave_attenuation_1d-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b8287efc123cacf49ed72670c74b9d210f8310a71b8440949575dbfd53eadbd0
MD5 0b3e4d23490ac0725ba04ba538456b2f
BLAKE2b-256 c980267154d2b5dd5f81218c4a797e493257426b712b550832d529a8c5db6a45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page