# PyOpenChannel
A comprehensive Python library for open channel flow analysis and design. PyOpenChannel provides tools for hydraulic engineers, water resources professionals, and students to analyze and design open channel systems with ease and accuracy.
## Features
### 🏗️ Channel Geometries
- **Rectangular channels**: Standard rectangular cross-sections
- **Trapezoidal channels**: Most common natural and constructed channels
- **Triangular channels**: V-shaped channels and ditches
- **Circular channels**: Pipes and culverts with free surface flow
- **Parabolic channels**: Efficient hydraulic sections
### 💧 Hydraulic Calculations
- **Manning's equation**: Uniform flow calculations
- **Critical depth**: Critical flow conditions and Froude number analysis
- **Normal depth**: Uniform flow depth calculations
- **Energy equation**: Specific energy and alternate depths
- **Momentum equation**: Hydraulic jump analysis
### 📐 Flow Analysis
- **Uniform flow**: Complete flow state analysis
- **Critical flow**: Critical conditions and flow regime classification
- **Gradually varied flow**: Water surface profile calculations (basic implementation)
- **Flow classification**: Subcritical, critical, and supercritical flow identification
### 🎯 Channel Design
- **Optimal sections**: Hydraulically efficient channel design
- **Economic sections**: Cost-optimized channel design
- **Channel sizing**: Capacity-based channel dimensioning
- **Design recommendations**: Freeboard, velocity limits, and side slopes
## Installation
### From Source (Development)
```bash
git clone https://github.com/yourusername/pyopenchannel.git
cd pyopenchannel
pip install -e .
```
### Requirements
- Python 3.12+
- No external dependencies for core functionality
## Quick Start
```python
import pyopenchannel as poc
# Create a rectangular channel
channel = poc.RectangularChannel(width=3.0)
# Calculate normal depth for given flow conditions
discharge = 5.0 # m³/s
slope = 0.001 # dimensionless
manning_n = 0.025
normal_depth = poc.NormalDepth.calculate(channel, discharge, slope, manning_n)
print(f"Normal depth: {normal_depth:.3f} m")
# Calculate critical depth
critical_depth = poc.CriticalDepth.calculate(channel, discharge)
print(f"Critical depth: {critical_depth:.3f} m")
# Analyze flow regime
if normal_depth > critical_depth:
print("Flow regime: Subcritical (mild slope)")
else:
print("Flow regime: Supercritical (steep slope)")
```
## Examples
### Basic Flow Analysis
```python
import pyopenchannel as poc
# Create a trapezoidal channel
channel = poc.TrapezoidalChannel(bottom_width=2.0, side_slope=1.5)
# Flow conditions
discharge = 10.0 # m³/s
slope = 0.002 # 0.2%
manning_n = 0.030 # earth channel
# Create uniform flow analyzer
uniform_flow = poc.UniformFlow(channel, slope, manning_n)
flow_state = uniform_flow.calculate_flow_state(discharge)
print(f"Flow depth: {flow_state.depth:.3f} m")
print(f"Flow velocity: {flow_state.velocity:.3f} m/s")
print(f"Froude number: {flow_state.froude_number:.3f}")
print(f"Flow type: {'Subcritical' if flow_state.is_subcritical else 'Supercritical'}")
```
### Channel Design
```python
import pyopenchannel as poc
# Design optimal rectangular channel
discharge = 15.0 # m³/s
slope = 0.001 # 0.1%
manning_n = 0.025 # concrete lining
result = poc.OptimalSections.rectangular(discharge, slope, manning_n)
print(f"Optimal width: {result.channel.width:.3f} m")
print(f"Flow depth: {result.depth:.3f} m")
print(f"Flow velocity: {result.velocity:.3f} m/s")
print(f"Recommended freeboard: {result.freeboard:.3f} m")
print(f"Total channel depth: {result.total_depth:.3f} m")
```
### Economic Design
```python
import pyopenchannel as poc
# Economic channel design considering costs
economic_designer = poc.EconomicSections(
excavation_cost_per_m3=25.0, # $/m³
lining_cost_per_m2=50.0, # $/m²
land_cost_per_m2=100.0 # $/m²
)
result = economic_designer.design_rectangular(
discharge=20.0, slope=0.001, manning_n=0.015
)
print(f"Economic width: {result.channel.width:.3f} m")
print(f"Flow depth: {result.depth:.3f} m")
print(f"Cost per meter: ${result.cost_per_meter:.2f}/m")
```
## API Reference
### Channel Geometries
#### RectangularChannel(width)
Rectangular channel cross-section.
**Parameters:**
- `width` (float): Channel bottom width in meters
**Methods:**
- `area(depth)`: Cross-sectional area
- `wetted_perimeter(depth)`: Wetted perimeter
- `top_width(depth)`: Top width (constant for rectangular)
- `hydraulic_radius(depth)`: Hydraulic radius (A/P)
#### TrapezoidalChannel(bottom_width, side_slope)
Trapezoidal channel cross-section.
**Parameters:**
- `bottom_width` (float): Channel bottom width in meters
- `side_slope` (float): Side slope ratio (horizontal:vertical)
#### TriangularChannel(side_slope)
Triangular channel cross-section.
**Parameters:**
- `side_slope` (float): Side slope ratio (horizontal:vertical)
#### CircularChannel(diameter)
Circular channel cross-section (pipe with free surface).
**Parameters:**
- `diameter` (float): Pipe diameter in meters
#### ParabolicChannel(shape_parameter)
Parabolic channel cross-section.
**Parameters:**
- `shape_parameter` (float): Shape parameter 'a' in y = ax²
### Hydraulic Calculations
#### ManningEquation
Static methods for Manning's equation calculations.
**Methods:**
- `discharge(area, hydraulic_radius, slope, manning_n)`: Calculate discharge
- `velocity(hydraulic_radius, slope, manning_n)`: Calculate velocity
- `required_slope(discharge, area, hydraulic_radius, manning_n)`: Calculate required slope
#### CriticalDepth
Critical depth and critical flow calculations.
**Methods:**
- `calculate(channel, discharge)`: Calculate critical depth
- `froude_number(velocity, hydraulic_depth)`: Calculate Froude number
#### NormalDepth
Normal depth calculations for uniform flow.
**Methods:**
- `calculate(channel, discharge, slope, manning_n)`: Calculate normal depth
### Flow Analysis
#### UniformFlow(channel, slope, manning_n)
Uniform flow analysis.
**Methods:**
- `calculate_flow_state(discharge)`: Get complete flow state
- `calculate_discharge(depth)`: Calculate discharge for given depth
#### EnergyEquation
Energy equation applications.
**Methods:**
- `specific_energy(depth, velocity)`: Calculate specific energy
- `minimum_specific_energy(channel, discharge)`: Minimum specific energy
- `alternate_depths(channel, discharge, specific_energy)`: Calculate alternate depths
### Design Tools
#### OptimalSections
Hydraulically optimal channel design.
**Methods:**
- `rectangular(discharge, slope, manning_n)`: Optimal rectangular section
- `trapezoidal(discharge, slope, manning_n, side_slope)`: Optimal trapezoidal section
- `triangular(discharge, slope, manning_n)`: Optimal triangular section
#### EconomicSections(excavation_cost, lining_cost, land_cost)
Economic channel design.
**Methods:**
- `design_rectangular(discharge, slope, manning_n)`: Economic rectangular design
- `design_trapezoidal(discharge, slope, manning_n, side_slope)`: Economic trapezoidal design
#### ChannelDesigner
General design utilities.
**Methods:**
- `calculate_freeboard(discharge, depth, velocity)`: Recommended freeboard
- `check_velocity_limits(velocity, channel_material)`: Velocity limit checks
- `recommend_side_slope(soil_type)`: Side slope recommendations
- `size_channel_for_capacity(discharge, slope, manning_n, channel_type)`: Size channel for capacity
## Constants and Utilities
### Physical Constants
- `GRAVITY`: 9.81 m/s²
- `WATER_DENSITY`: 1000 kg/m³
- `KINEMATIC_VISCOSITY`: 1.004×10⁻⁶ m²/s
### Manning's Roughness Coefficients
Pre-defined roughness coefficients for common channel materials:
- Concrete (smooth): 0.012
- Concrete (rough): 0.017
- Earth channels: 0.025-0.040
- Natural channels: 0.030-0.040
### Side Slope Recommendations
Recommended side slopes for different soil types:
- Rock: 0.25:1 to 0.5:1
- Firm earth: 1:1
- Ordinary earth: 1.5:1
- Sandy earth: 2:1
- Loose earth: 3:1
## Error Handling
PyOpenChannel includes comprehensive error handling with custom exceptions:
- `PyOpenChannelError`: Base exception class
- `InvalidGeometryError`: Invalid channel geometry parameters
- `ConvergenceError`: Iterative calculations failed to converge
- `InvalidFlowConditionError`: Physically impossible flow conditions
- `InvalidRoughnessError`: Invalid Manning's roughness coefficient
- `InvalidSlopeError`: Invalid channel slope
## Testing
Run the test suite:
```bash
# Run all tests
pytest
# Run with coverage
pytest --cov=pyopenchannel
# Run specific test categories
pytest -m unit # Unit tests only
pytest -m integration # Integration tests only
pytest -m "not slow" # Skip slow tests
```
## Examples Directory
The `examples/` directory contains comprehensive examples:
- `basic_calculations.py`: Fundamental hydraulic calculations
- `channel_design.py`: Channel design and optimization examples
Run examples:
```bash
python examples/basic_calculations.py
python examples/channel_design.py
```
## Applications
PyOpenChannel is suitable for:
### Water Resources Engineering
- River and stream analysis
- Flood control channel design
- Irrigation and drainage systems
- Culvert and bridge hydraulics
### Civil Engineering
- Storm water management
- Highway drainage design
- Urban channel systems
- Infrastructure hydraulics
### Environmental Engineering
- Constructed wetlands
- Stream restoration
- Ecological channel design
- Natural channel analysis
### Education and Research
- Hydraulic engineering coursework
- Research applications
- Design verification
- Parametric studies
## Theory and Background
PyOpenChannel implements fundamental open channel flow theory:
### Manning's Equation
```
Q = (1/n) × A × R^(2/3) × S^(1/2)
```
Where:
- Q = discharge (m³/s)
- n = Manning's roughness coefficient
- A = cross-sectional area (m²)
- R = hydraulic radius (m)
- S = channel slope (dimensionless)
### Critical Flow Condition
```
Q² = g × A³ / T
```
Where:
- g = gravitational acceleration (m/s²)
- T = top width (m)
### Froude Number
```
Fr = V / √(g × D)
```
Where:
- V = average velocity (m/s)
- D = hydraulic depth (m)
Flow classification:
- Fr < 1: Subcritical flow
- Fr = 1: Critical flow
- Fr > 1: Supercritical flow
## Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
### Development Setup
```bash
git clone https://github.com/yourusername/pyopenchannel.git
cd pyopenchannel
pip install -e ".[dev]"
```
### Running Tests
```bash
pytest
```
If using `uv`
```bash
uv run --with pytest pytest
```
### Code Style
This project uses:
- Black for code formatting
- isort for import sorting
- flake8 for linting
- mypy for type checking
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Acknowledgments
- Based on established open channel flow theory from hydraulic engineering literature
- Inspired by classic texts: "Open Channel Hydraulics" by Ven Te Chow
- Developed for educational and professional use in hydraulic engineering
## Support
For questions, issues, or contributions:
1. Check the documentation and examples
2. Search existing issues on GitHub
3. Create a new issue with detailed information
4. Consider contributing improvements
## Roadmap
Future enhancements planned:
- [ ] Complete gradually varied flow implementation
- [ ] Hydraulic jump calculations
- [ ] Compound channel analysis
- [ ] Sediment transport basics
- [ ] Unsteady flow analysis
- [ ] Advanced optimization algorithms
- [ ] Integration with GIS data
- [ ] Visualization tools
- [ ] Additional channel shapes
- [ ] Performance optimizations
---
**PyOpenChannel** - Making open channel flow analysis accessible, accurate, and efficient.
Raw data
{
"_id": null,
"home_page": null,
"name": "pyopenchannel",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "Alexius Academia <alexius.sayco.academia@gmail.com>",
"keywords": "channel-design, civil-engineering, hydraulic-engineering, hydraulics, manning-equation, open-channel-flow, water-resources",
"author": null,
"author_email": "Alexius Academia <alexius.sayco.academia@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/59/c4/6f5ecc180840482ce98327222968a3a9b9cac1cf4e359665a071142cb053/pyopenchannel-0.4.0.tar.gz",
"platform": null,
"description": "# PyOpenChannel\n\nA comprehensive Python library for open channel flow analysis and design. PyOpenChannel provides tools for hydraulic engineers, water resources professionals, and students to analyze and design open channel systems with ease and accuracy.\n\n## Features\n\n### \ud83c\udfd7\ufe0f Channel Geometries\n- **Rectangular channels**: Standard rectangular cross-sections\n- **Trapezoidal channels**: Most common natural and constructed channels \n- **Triangular channels**: V-shaped channels and ditches\n- **Circular channels**: Pipes and culverts with free surface flow\n- **Parabolic channels**: Efficient hydraulic sections\n\n### \ud83d\udca7 Hydraulic Calculations\n- **Manning's equation**: Uniform flow calculations\n- **Critical depth**: Critical flow conditions and Froude number analysis\n- **Normal depth**: Uniform flow depth calculations\n- **Energy equation**: Specific energy and alternate depths\n- **Momentum equation**: Hydraulic jump analysis\n\n### \ud83d\udcd0 Flow Analysis\n- **Uniform flow**: Complete flow state analysis\n- **Critical flow**: Critical conditions and flow regime classification\n- **Gradually varied flow**: Water surface profile calculations (basic implementation)\n- **Flow classification**: Subcritical, critical, and supercritical flow identification\n\n### \ud83c\udfaf Channel Design\n- **Optimal sections**: Hydraulically efficient channel design\n- **Economic sections**: Cost-optimized channel design\n- **Channel sizing**: Capacity-based channel dimensioning\n- **Design recommendations**: Freeboard, velocity limits, and side slopes\n\n## Installation\n\n### From Source (Development)\n\n```bash\ngit clone https://github.com/yourusername/pyopenchannel.git\ncd pyopenchannel\npip install -e .\n```\n\n### Requirements\n\n- Python 3.12+\n- No external dependencies for core functionality\n\n## Quick Start\n\n```python\nimport pyopenchannel as poc\n\n# Create a rectangular channel\nchannel = poc.RectangularChannel(width=3.0)\n\n# Calculate normal depth for given flow conditions\ndischarge = 5.0 # m\u00b3/s\nslope = 0.001 # dimensionless\nmanning_n = 0.025\n\nnormal_depth = poc.NormalDepth.calculate(channel, discharge, slope, manning_n)\nprint(f\"Normal depth: {normal_depth:.3f} m\")\n\n# Calculate critical depth\ncritical_depth = poc.CriticalDepth.calculate(channel, discharge)\nprint(f\"Critical depth: {critical_depth:.3f} m\")\n\n# Analyze flow regime\nif normal_depth > critical_depth:\n print(\"Flow regime: Subcritical (mild slope)\")\nelse:\n print(\"Flow regime: Supercritical (steep slope)\")\n```\n\n## Examples\n\n### Basic Flow Analysis\n\n```python\nimport pyopenchannel as poc\n\n# Create a trapezoidal channel\nchannel = poc.TrapezoidalChannel(bottom_width=2.0, side_slope=1.5)\n\n# Flow conditions\ndischarge = 10.0 # m\u00b3/s\nslope = 0.002 # 0.2%\nmanning_n = 0.030 # earth channel\n\n# Create uniform flow analyzer\nuniform_flow = poc.UniformFlow(channel, slope, manning_n)\nflow_state = uniform_flow.calculate_flow_state(discharge)\n\nprint(f\"Flow depth: {flow_state.depth:.3f} m\")\nprint(f\"Flow velocity: {flow_state.velocity:.3f} m/s\")\nprint(f\"Froude number: {flow_state.froude_number:.3f}\")\nprint(f\"Flow type: {'Subcritical' if flow_state.is_subcritical else 'Supercritical'}\")\n```\n\n### Channel Design\n\n```python\nimport pyopenchannel as poc\n\n# Design optimal rectangular channel\ndischarge = 15.0 # m\u00b3/s\nslope = 0.001 # 0.1%\nmanning_n = 0.025 # concrete lining\n\nresult = poc.OptimalSections.rectangular(discharge, slope, manning_n)\n\nprint(f\"Optimal width: {result.channel.width:.3f} m\")\nprint(f\"Flow depth: {result.depth:.3f} m\")\nprint(f\"Flow velocity: {result.velocity:.3f} m/s\")\nprint(f\"Recommended freeboard: {result.freeboard:.3f} m\")\nprint(f\"Total channel depth: {result.total_depth:.3f} m\")\n```\n\n### Economic Design\n\n```python\nimport pyopenchannel as poc\n\n# Economic channel design considering costs\neconomic_designer = poc.EconomicSections(\n excavation_cost_per_m3=25.0, # $/m\u00b3\n lining_cost_per_m2=50.0, # $/m\u00b2\n land_cost_per_m2=100.0 # $/m\u00b2\n)\n\nresult = economic_designer.design_rectangular(\n discharge=20.0, slope=0.001, manning_n=0.015\n)\n\nprint(f\"Economic width: {result.channel.width:.3f} m\")\nprint(f\"Flow depth: {result.depth:.3f} m\")\nprint(f\"Cost per meter: ${result.cost_per_meter:.2f}/m\")\n```\n\n## API Reference\n\n### Channel Geometries\n\n#### RectangularChannel(width)\nRectangular channel cross-section.\n\n**Parameters:**\n- `width` (float): Channel bottom width in meters\n\n**Methods:**\n- `area(depth)`: Cross-sectional area\n- `wetted_perimeter(depth)`: Wetted perimeter\n- `top_width(depth)`: Top width (constant for rectangular)\n- `hydraulic_radius(depth)`: Hydraulic radius (A/P)\n\n#### TrapezoidalChannel(bottom_width, side_slope)\nTrapezoidal channel cross-section.\n\n**Parameters:**\n- `bottom_width` (float): Channel bottom width in meters\n- `side_slope` (float): Side slope ratio (horizontal:vertical)\n\n#### TriangularChannel(side_slope)\nTriangular channel cross-section.\n\n**Parameters:**\n- `side_slope` (float): Side slope ratio (horizontal:vertical)\n\n#### CircularChannel(diameter)\nCircular channel cross-section (pipe with free surface).\n\n**Parameters:**\n- `diameter` (float): Pipe diameter in meters\n\n#### ParabolicChannel(shape_parameter)\nParabolic channel cross-section.\n\n**Parameters:**\n- `shape_parameter` (float): Shape parameter 'a' in y = ax\u00b2\n\n### Hydraulic Calculations\n\n#### ManningEquation\nStatic methods for Manning's equation calculations.\n\n**Methods:**\n- `discharge(area, hydraulic_radius, slope, manning_n)`: Calculate discharge\n- `velocity(hydraulic_radius, slope, manning_n)`: Calculate velocity\n- `required_slope(discharge, area, hydraulic_radius, manning_n)`: Calculate required slope\n\n#### CriticalDepth\nCritical depth and critical flow calculations.\n\n**Methods:**\n- `calculate(channel, discharge)`: Calculate critical depth\n- `froude_number(velocity, hydraulic_depth)`: Calculate Froude number\n\n#### NormalDepth\nNormal depth calculations for uniform flow.\n\n**Methods:**\n- `calculate(channel, discharge, slope, manning_n)`: Calculate normal depth\n\n### Flow Analysis\n\n#### UniformFlow(channel, slope, manning_n)\nUniform flow analysis.\n\n**Methods:**\n- `calculate_flow_state(discharge)`: Get complete flow state\n- `calculate_discharge(depth)`: Calculate discharge for given depth\n\n#### EnergyEquation\nEnergy equation applications.\n\n**Methods:**\n- `specific_energy(depth, velocity)`: Calculate specific energy\n- `minimum_specific_energy(channel, discharge)`: Minimum specific energy\n- `alternate_depths(channel, discharge, specific_energy)`: Calculate alternate depths\n\n### Design Tools\n\n#### OptimalSections\nHydraulically optimal channel design.\n\n**Methods:**\n- `rectangular(discharge, slope, manning_n)`: Optimal rectangular section\n- `trapezoidal(discharge, slope, manning_n, side_slope)`: Optimal trapezoidal section\n- `triangular(discharge, slope, manning_n)`: Optimal triangular section\n\n#### EconomicSections(excavation_cost, lining_cost, land_cost)\nEconomic channel design.\n\n**Methods:**\n- `design_rectangular(discharge, slope, manning_n)`: Economic rectangular design\n- `design_trapezoidal(discharge, slope, manning_n, side_slope)`: Economic trapezoidal design\n\n#### ChannelDesigner\nGeneral design utilities.\n\n**Methods:**\n- `calculate_freeboard(discharge, depth, velocity)`: Recommended freeboard\n- `check_velocity_limits(velocity, channel_material)`: Velocity limit checks\n- `recommend_side_slope(soil_type)`: Side slope recommendations\n- `size_channel_for_capacity(discharge, slope, manning_n, channel_type)`: Size channel for capacity\n\n## Constants and Utilities\n\n### Physical Constants\n- `GRAVITY`: 9.81 m/s\u00b2\n- `WATER_DENSITY`: 1000 kg/m\u00b3\n- `KINEMATIC_VISCOSITY`: 1.004\u00d710\u207b\u2076 m\u00b2/s\n\n### Manning's Roughness Coefficients\nPre-defined roughness coefficients for common channel materials:\n- Concrete (smooth): 0.012\n- Concrete (rough): 0.017\n- Earth channels: 0.025-0.040\n- Natural channels: 0.030-0.040\n\n### Side Slope Recommendations\nRecommended side slopes for different soil types:\n- Rock: 0.25:1 to 0.5:1\n- Firm earth: 1:1\n- Ordinary earth: 1.5:1\n- Sandy earth: 2:1\n- Loose earth: 3:1\n\n## Error Handling\n\nPyOpenChannel includes comprehensive error handling with custom exceptions:\n\n- `PyOpenChannelError`: Base exception class\n- `InvalidGeometryError`: Invalid channel geometry parameters\n- `ConvergenceError`: Iterative calculations failed to converge\n- `InvalidFlowConditionError`: Physically impossible flow conditions\n- `InvalidRoughnessError`: Invalid Manning's roughness coefficient\n- `InvalidSlopeError`: Invalid channel slope\n\n## Testing\n\nRun the test suite:\n\n```bash\n# Run all tests\npytest\n\n# Run with coverage\npytest --cov=pyopenchannel\n\n# Run specific test categories\npytest -m unit # Unit tests only\npytest -m integration # Integration tests only\npytest -m \"not slow\" # Skip slow tests\n```\n\n## Examples Directory\n\nThe `examples/` directory contains comprehensive examples:\n\n- `basic_calculations.py`: Fundamental hydraulic calculations\n- `channel_design.py`: Channel design and optimization examples\n\nRun examples:\n\n```bash\npython examples/basic_calculations.py\npython examples/channel_design.py\n```\n\n## Applications\n\nPyOpenChannel is suitable for:\n\n### Water Resources Engineering\n- River and stream analysis\n- Flood control channel design\n- Irrigation and drainage systems\n- Culvert and bridge hydraulics\n\n### Civil Engineering\n- Storm water management\n- Highway drainage design\n- Urban channel systems\n- Infrastructure hydraulics\n\n### Environmental Engineering\n- Constructed wetlands\n- Stream restoration\n- Ecological channel design\n- Natural channel analysis\n\n### Education and Research\n- Hydraulic engineering coursework\n- Research applications\n- Design verification\n- Parametric studies\n\n## Theory and Background\n\nPyOpenChannel implements fundamental open channel flow theory:\n\n### Manning's Equation\n```\nQ = (1/n) \u00d7 A \u00d7 R^(2/3) \u00d7 S^(1/2)\n```\nWhere:\n- Q = discharge (m\u00b3/s)\n- n = Manning's roughness coefficient\n- A = cross-sectional area (m\u00b2)\n- R = hydraulic radius (m)\n- S = channel slope (dimensionless)\n\n### Critical Flow Condition\n```\nQ\u00b2 = g \u00d7 A\u00b3 / T\n```\nWhere:\n- g = gravitational acceleration (m/s\u00b2)\n- T = top width (m)\n\n### Froude Number\n```\nFr = V / \u221a(g \u00d7 D)\n```\nWhere:\n- V = average velocity (m/s)\n- D = hydraulic depth (m)\n\nFlow classification:\n- Fr < 1: Subcritical flow\n- Fr = 1: Critical flow \n- Fr > 1: Supercritical flow\n\n## Contributing\n\nContributions are welcome! Please see CONTRIBUTING.md for guidelines.\n\n### Development Setup\n\n```bash\ngit clone https://github.com/yourusername/pyopenchannel.git\ncd pyopenchannel\npip install -e \".[dev]\"\n```\n\n### Running Tests\n\n```bash\npytest\n```\n\nIf using `uv`\n```bash\nuv run --with pytest pytest\n```\n\n### Code Style\n\nThis project uses:\n- Black for code formatting\n- isort for import sorting\n- flake8 for linting\n- mypy for type checking\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Acknowledgments\n\n- Based on established open channel flow theory from hydraulic engineering literature\n- Inspired by classic texts: \"Open Channel Hydraulics\" by Ven Te Chow\n- Developed for educational and professional use in hydraulic engineering\n\n## Support\n\nFor questions, issues, or contributions:\n\n1. Check the documentation and examples\n2. Search existing issues on GitHub\n3. Create a new issue with detailed information\n4. Consider contributing improvements\n\n## Roadmap\n\nFuture enhancements planned:\n\n- [ ] Complete gradually varied flow implementation\n- [ ] Hydraulic jump calculations\n- [ ] Compound channel analysis\n- [ ] Sediment transport basics\n- [ ] Unsteady flow analysis\n- [ ] Advanced optimization algorithms\n- [ ] Integration with GIS data\n- [ ] Visualization tools\n- [ ] Additional channel shapes\n- [ ] Performance optimizations\n\n---\n\n**PyOpenChannel** - Making open channel flow analysis accessible, accurate, and efficient.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A comprehensive Python library for open channel flow analysis and design",
"version": "0.4.0",
"project_urls": {
"Changelog": "https://github.com/alexiusacademia/pyopenchannel/releases",
"Documentation": "https://github.com/alexiusacademia/pyopenchannel#readme",
"Homepage": "https://github.com/alexiusacademia/pyopenchannel",
"Issues": "https://github.com/alexiusacademia/pyopenchannel/issues",
"Repository": "https://github.com/alexiusacademia/pyopenchannel"
},
"split_keywords": [
"channel-design",
" civil-engineering",
" hydraulic-engineering",
" hydraulics",
" manning-equation",
" open-channel-flow",
" water-resources"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "1748da252a73787f65ffcfe127173a885fba5ed40e906e1a77ff2fa35145dea0",
"md5": "84bead3c88b32166b473ccd2a25af619",
"sha256": "725a0cac458e97df684a2a830c7494941df091ab15128f3c724848e0e5d1209a"
},
"downloads": -1,
"filename": "pyopenchannel-0.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "84bead3c88b32166b473ccd2a25af619",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 60631,
"upload_time": "2025-08-17T07:44:20",
"upload_time_iso_8601": "2025-08-17T07:44:20.814307Z",
"url": "https://files.pythonhosted.org/packages/17/48/da252a73787f65ffcfe127173a885fba5ed40e906e1a77ff2fa35145dea0/pyopenchannel-0.4.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "59c46f5ecc180840482ce98327222968a3a9b9cac1cf4e359665a071142cb053",
"md5": "d354162fbe735a042c34711e1ac89af7",
"sha256": "cf84e2cf2954a1c51858f6e59ed9db3d8a620cdb9801838bb825fbfa79a9ce8a"
},
"downloads": -1,
"filename": "pyopenchannel-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "d354162fbe735a042c34711e1ac89af7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 105237,
"upload_time": "2025-08-17T07:44:22",
"upload_time_iso_8601": "2025-08-17T07:44:22.565015Z",
"url": "https://files.pythonhosted.org/packages/59/c4/6f5ecc180840482ce98327222968a3a9b9cac1cf4e359665a071142cb053/pyopenchannel-0.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-17 07:44:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "alexiusacademia",
"github_project": "pyopenchannel",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pyopenchannel"
}