D Library for Hydraulics Engineering.

library, general
dub fetch hydroflow --version 1.2.4



A D-library for hydraulics calculations. This library was created to aide civil engineers and hydraulics engineers in calculation phase of their design or analysis.

Major Features

  • Open Channel

  • Simple Weirs

  • Diversion Dam Analysis

    • Sharp-crested weir
    • Broad-crested weir
    • Ogee-shaped weir
  • Reservoir construction and operation studies


Only one import is necessary to use the library.

import hydroflow;

All submodules will be imported by this module.


1. Rectangular Open Channel

Say we are given a rectangular channel problem and the unknown is the depth of the water in the channel:

Given Value
Dicharge, Q 1.0 m3
Bed Slope, S 0.001
Base Width, b 1.0 m
Manning's Roughness Coefficient, n 0.015

To solve this, you may refer to the code below:

import hydroflow;
import std.stdio;

void main()
    RectangularOpenChannel roc = new RectangularOpenChannel();

	roc.setUnknown = roc.Unknown.WATER_DEPTH;

	// Set the given values
	roc.setBedSlope = 0.001;
	roc.setDischarge = 1;
	roc.setBaseWidth = 1;
	roc.setManningRoughness = 0.015;
    // Now test if the calculation will be successful
    if (roc.solve())

Using Different Unit

By default, the unit used is in metric. There are two (2) units available, the other is the english system.

To set the unit to english:

RectangularOpenChannel roc = new RectangularOpenChannel();
roc.setUnit = roc.Units.ENGLISH;

2. Analysis of Sharp-Crested (Gated) Weirs

Currently, the analysis for sharp-crested weirs only support metric system (meters, meters/second, cubic meters/sec).

SharpCrestedWeir scw = new SharpCrestedWeir();

scw.setDischarge = 100;
scw.setUSApronElev = 50;
scw.setDSApronElev = 49.4;
scw.setCrestLength = 30;
scw.setCrestElev = 52;
scw.setTailwaterElev = 52.5;

if (scw.analysis())
	// If the analysis has returned no error during 
	// calculation and error checking.
	writeln("Afflux elevation: ", scw.getAffluxElevation);
	// Displays the error message.