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.1.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.1-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wave_attenuation_1d-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 7d3f269c72a12a98a611c738c65888e9457e0503004fa6e23ab7ffbe23885828
MD5 935c947761403c313b0ab0c838930e8c
BLAKE2b-256 be583af4fc1026bc22f17e138ff2eefafbd6d1b5f90ccb148ae7d9a6ec5c28ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wave_attenuation_1d-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 815382d828aca6980e1fd94f2993bc5d5f6fd92d5f875fc2b8107d1e3482cf72
MD5 c2077e5df044f69269ae0a17969e17d3
BLAKE2b-256 0acc5195c40f1928ebcf42cf6aa4cd490b315547f0b7a8c7375af003ce91aa6a

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