Built-ins and references¶
Standard records are explicit, inspectable inputs. Their attached source records and applicability limits remain part of the engineering contract.
Independent, early-stage culvert hydraulics library.
The package exposes internally tested geometry and hydraulic components through provisional combined solvers. External engineering validation is not yet complete.
DEFAULT_SOLVER_CONFIGURATION = SolverConfiguration()
module-attribute
¶
CONCRETE = CulvertMaterial(name='Concrete (select pipe or box for roughness resolution)', typical_n=0.012, range_n=(0.01, 0.015))
module-attribute
¶
CONCRETE_BOX = CulvertMaterial(name='Smooth Reinforced Concrete Box', typical_n=0.012, range_n=(0.012, 0.015), reference=MRWA_CONCRETE_REFERENCE)
module-attribute
¶
CONCRETE_PIPE = CulvertMaterial(name='Smooth Reinforced Concrete Pipe', typical_n=0.012, range_n=(0.011, 0.013), reference=MRWA_CONCRETE_REFERENCE)
module-attribute
¶
CORRUGATED_STEEL = CulvertMaterial(name='Corrugated Steel Pipe (diameter/corrugation-specific n required)', typical_n=0.024, range_n=(0.011, 0.027), reference=MRWA_CSP_REFERENCE, contextual_roughness_required=True)
module-attribute
¶
SMOOTH_HDPE = CulvertMaterial(name='Smooth Interior Corrugated Polyethylene', typical_n=0.012, range_n=(0.009, 0.015), manufacturer_roughness_required=True)
module-attribute
¶
MRWA_CSP_MANNING_TABLE = (CspManningEntry(300, CspCorrugation.PITCH_68_DEPTH_13, 0.011), CspManningEntry(375, CspCorrugation.PITCH_68_DEPTH_13, 0.012), CspManningEntry(450, CspCorrugation.PITCH_68_DEPTH_13, 0.013), CspManningEntry(600, CspCorrugation.PITCH_68_DEPTH_13, 0.015), CspManningEntry(750, CspCorrugation.PITCH_68_DEPTH_13, 0.017), CspManningEntry(900, CspCorrugation.PITCH_68_DEPTH_13, 0.018), CspManningEntry(900, CspCorrugation.PITCH_75_DEPTH_25, 0.022), CspManningEntry(1050, CspCorrugation.PITCH_68_DEPTH_13, 0.019), CspManningEntry(1050, CspCorrugation.PITCH_75_DEPTH_25, 0.022), CspManningEntry(1200, CspCorrugation.PITCH_68_DEPTH_13, 0.02), CspManningEntry(1200, CspCorrugation.PITCH_75_DEPTH_25, 0.023), CspManningEntry(1200, CspCorrugation.PITCH_125_DEPTH_25, 0.022), CspManningEntry(1350, CspCorrugation.PITCH_68_DEPTH_13, 0.021), CspManningEntry(1350, CspCorrugation.PITCH_75_DEPTH_25, 0.023), CspManningEntry(1350, CspCorrugation.PITCH_125_DEPTH_25, 0.022), CspManningEntry(1500, CspCorrugation.PITCH_68_DEPTH_13, 0.021), CspManningEntry(1500, CspCorrugation.PITCH_75_DEPTH_25, 0.024), CspManningEntry(1500, CspCorrugation.PITCH_125_DEPTH_25, 0.023), CspManningEntry(1650, CspCorrugation.PITCH_68_DEPTH_13, 0.021), CspManningEntry(1650, CspCorrugation.PITCH_75_DEPTH_25, 0.025), CspManningEntry(1650, CspCorrugation.PITCH_125_DEPTH_25, 0.024), CspManningEntry(1800, CspCorrugation.PITCH_68_DEPTH_13, 0.021), CspManningEntry(1800, CspCorrugation.PITCH_75_DEPTH_25, 0.026), CspManningEntry(1800, CspCorrugation.PITCH_125_DEPTH_25, 0.024), CspManningEntry(1950, CspCorrugation.PITCH_68_DEPTH_13, 0.021), CspManningEntry(1950, CspCorrugation.PITCH_75_DEPTH_25, 0.027), CspManningEntry(1950, CspCorrugation.PITCH_125_DEPTH_25, 0.025))
module-attribute
¶
STANDARD_INLET_COEFFICIENTS = (CIRCULAR_CONCRETE_SQUARE_EDGE, CIRCULAR_CONCRETE_GROOVE_END, CIRCULAR_CMP_HEADWALL, CIRCULAR_CMP_MITERED, CIRCULAR_CMP_PROJECTING, BOX_CONCRETE_FLARED_WINGWALLS_30_75, BOX_CONCRETE_PARALLEL_WINGWALLS_0, BOX_CONCRETE_CHAMFER_90_HEADWALL, BOX_CONCRETE_BEVEL_45_HEADWALL)
module-attribute
¶
CIRCULAR_CONCRETE_SQUARE_EDGE = InletCoefficients(name='Circular Concrete, Square edge with headwall', chart=1, scale=1, form=InletEquationForm.SPECIFIC_HEAD, k=0.0098, m=2.0, c=0.0398, y=0.67, shape=GeometryShape.CIRCULAR)
module-attribute
¶
CIRCULAR_CONCRETE_GROOVE_END = InletCoefficients(name='Circular Concrete, Groove end with headwall', chart=1, scale=2, form=InletEquationForm.SPECIFIC_HEAD, k=0.0018, m=2.0, c=0.0292, y=0.74, shape=GeometryShape.CIRCULAR)
module-attribute
¶
CIRCULAR_CMP_PROJECTING = InletCoefficients(name='Circular Corrugated Metal, Projecting', chart=2, scale=3, form=InletEquationForm.SPECIFIC_HEAD, k=0.034, m=1.5, c=0.0553, y=0.54, shape=GeometryShape.CIRCULAR)
module-attribute
¶
CIRCULAR_CMP_MITERED = InletCoefficients(name='Circular Corrugated Metal, Mitered to slope', chart=2, scale=2, form=InletEquationForm.SPECIFIC_HEAD, k=0.021, m=1.33, c=0.0463, y=0.75, slope_correction=0.7, shape=GeometryShape.CIRCULAR)
module-attribute
¶
CIRCULAR_CMP_HEADWALL = InletCoefficients(name='Circular Corrugated Metal, Headwall', chart=2, scale=1, form=InletEquationForm.SPECIFIC_HEAD, k=0.0078, m=2.0, c=0.0379, y=0.69, shape=GeometryShape.CIRCULAR)
module-attribute
¶
BOX_CONCRETE_CHAMFER_90_HEADWALL = InletCoefficients(name='Box Concrete, 90° headwall with 3/4" chamfers', chart=10, scale=1, form=InletEquationForm.WEIR, k=0.515, m=0.667, c=0.0375, y=0.79, shape=GeometryShape.RECTANGULAR)
module-attribute
¶
BOX_CONCRETE_BEVEL_45_HEADWALL = InletCoefficients(name='Box Concrete, 90° headwall with 45° bevels', chart=10, scale=2, form=InletEquationForm.WEIR, k=0.495, m=0.667, c=0.0314, y=0.82, shape=GeometryShape.RECTANGULAR)
module-attribute
¶
BOX_CONCRETE_FLARED_WINGWALLS_30_75 = InletCoefficients(name='Box Concrete, 30° to 75° wingwall flares', chart=8, scale=1, form=InletEquationForm.SPECIFIC_HEAD, k=0.026, m=1.0, c=0.0347, y=0.81, shape=GeometryShape.RECTANGULAR)
module-attribute
¶
BOX_CONCRETE_PARALLEL_WINGWALLS_0 = InletCoefficients(name='Box Concrete, 0° wingwall flares (parallel wingwalls)', chart=8, scale=3, form=InletEquationForm.SPECIFIC_HEAD, k=0.061, m=0.75, c=0.0423, y=0.82, shape=GeometryShape.RECTANGULAR)
module-attribute
¶
STANDARD_EXIT_LOSS_COEFFICIENT = 1.0
module-attribute
¶
STANDARD_EXIT_LOSS_SELECTION = ExitLossSelection(ko=STANDARD_EXIT_LOSS_COEFFICIENT, name='HDS-5 reservoir or pool exit loss', basis=ExitLossSelectionBasis.HDS5_STANDARD, source=_HDS5_SECTION_314_EXIT_REF)
module-attribute
¶
PIPE_LOSS_SOCKET_END = EntranceLossCoefficient(name='Pipe, Concrete: Headwall or headwall and wingwalls, socket end (groove-end)', ke=0.2, shape=GeometryShape.CIRCULAR)
module-attribute
¶
PIPE_LOSS_SQUARE_EDGE = EntranceLossCoefficient(name='Pipe, Concrete: Headwall or headwall and wingwalls, square-edge', ke=0.5, shape=GeometryShape.CIRCULAR)
module-attribute
¶
PIPE_CMP_LOSS_PROJECTING = EntranceLossCoefficient(name='Pipe, CMP: Projecting from fill (no headwall)', ke=0.9, shape=GeometryShape.CIRCULAR)
module-attribute
¶
PIPE_CMP_LOSS_HEADWALL = EntranceLossCoefficient(name='Pipe, CMP: Headwall or headwall and wingwalls square-edge', ke=0.5, shape=GeometryShape.CIRCULAR)
module-attribute
¶
BOX_LOSS_FLARED_30_75 = EntranceLossCoefficient(name='Box, RC: Wingwalls at 30 deg to 75 deg to barrel, square top edge', ke=0.4, shape=GeometryShape.RECTANGULAR)
module-attribute
¶
BOX_LOSS_PARALLEL_0 = EntranceLossCoefficient(name='Box, RC: Wingwalls parallel (extension of sides), square top edge', ke=0.7, shape=GeometryShape.RECTANGULAR)
module-attribute
¶
GRAVITATIONAL_ACCELERATION = 9.80665
module-attribute
¶
STANDARD_WATER_DENSITY = 998.2
module-attribute
¶
STANDARD_WATER_KINEMATIC_VISCOSITY = 1.004e-06
module-attribute
¶
HDS5_LABORATORY_HW_D_MAX = 3.0
module-attribute
¶
EXTREME_HEADWATER_RATIO = 10.0
module-attribute
¶
FHWA_MODERN_BOX_HW_D_MIN = 0.4
module-attribute
¶
FHWA_MODERN_BOX_HW_D_MAX = 2.3
module-attribute
¶
MRWA_CSP_REFERENCE = SourceReference(source_id='MRWA-CULVERT-DESIGN-PROCEDURE-TABLE-2.2', publication='Design Procedure - Culverts', edition='Website reviewed 6 September 2026', locator="Section 2.8, Table 2.2: Manning's n for helically wound CSP", url='https://www.mainroads.wa.gov.au/technical-commercial/technical-library/road-traffic-engineering/drainage-waterways/culverts/design-procedure/', applicability='Nominal circular CSP diameters and corrugation sizes listed in MRWA Table 2.2.', notes='MRWA attributes the table to AISI (1999). The MRWA Part 5B supplement directs designers to manufacturer data first and this table when manufacturer data is absent. A hydraulic lookup does not establish current MRWA product or construction compliance.')
module-attribute
¶
MRWA_CONCRETE_REFERENCE = SourceReference(source_id='MRWA-CULVERT-DESIGN-PROCEDURE-TABLE-2.1-V2E', publication='Design Procedure - Culverts', edition='Version 2E, 5 May 2026', locator="Section 2.8, Table 2.1: Manning's n for RCP and RCB", url='https://www.mainroads.wa.gov.au/technical-commercial/technical-library/road-traffic-engineering/drainage-waterways/culverts/design-procedure/', applicability='Smooth reinforced-concrete pipe and box culverts used in MRWA design.', notes='The table gives 0.011-0.013 for concrete pipe and 0.012-0.015 for concrete box.')
module-attribute
¶
MRWA_PART5B_REFERENCE = SourceReference(source_id='MRWA-SUPPLEMENT-AGRD-PART5B-1F', publication='MRWA Supplement to Austroads Guide to Road Design Part 5B: Drainage, Open Channels, Culverts and Floodways', edition='Version 1F, 3 July 2020; live page reviewed 8 September 2026', locator='Section 3.2: Information Required', url='https://www.mainroads.wa.gov.au/technical-commercial/technical-library/road-traffic-engineering/guide-to-road-design/mrwa-supplement-to-austroads-guide-to-road-design-part-5b/', applicability='MRWA culvert-design roughness source precedence.', notes='Plastic-pipe Manning roughness is to be sourced from the applicable manufacturer.')
module-attribute
¶
MRWA_SPEC404_REFERENCE = SourceReference(source_id='MRWA-SPECIFICATION-404-2026-07-17', publication='Specification 404 Culverts', edition='05/6181-003, issued 17 July 2026', locator='Scope, products and materials, and contract-specific requirements', url='https://www.mainroads.wa.gov.au/globalassets/technical-commercial/technical-library/specifications/400-series-drainage/specification-404-culverts.pdf', applicability='Product and construction requirements for MRWA culverts.', notes='Hydraulic roughness selection alone does not demonstrate specification compliance.')
module-attribute
¶
FHWA_HRT_06_138_REFERENCE = SourceReference(source_id='FHWA-HRT-06-138-CORRECTED-TABLES-11-12', publication='Effects of Inlet Geometry on Hydraulic Performance of Box Culverts', edition='Corrected errata version, 2007', locator='Tables 11 and 12, printed pages 85-86', url='https://www.fhwa.dot.gov/publications/research/infrastructure/hydraulics/06138/06138.pdf', applicability='Modern reinforced-concrete box inlet configurations represented by Figure 93; the polynomial is useful only for approximately 0.4 < HW/D < 2.3.', notes="Uses dimensionless discharge Q/(A*sqrt(g*D)) and net opening area when corner fillets are present. These are not HY-8's recomputed South Dakota-box polynomials.")
module-attribute
¶
FHWA_HDS5_NORMAL_DEPTH_TAILWATER = SourceReference(source_id='FHWA-HDS5-2012-SECTION-1.4.4', publication='Hydraulic Design of Highway Culverts', edition='Third Edition, April 2012', locator='Section 1.4.4, Tailwater (printed page 1.19; PDF page 35)', url='https://www.fhwa.dot.gov/engineering/hydraulics/pubs/12026/hif12026.pdf', applicability='Normal-depth approximation for a downstream channel without controls that require a backwater calculation.', notes='A prismatic uniform-flow boundary is not a receiving-reach backwater model; impoundments, constrictions, junctions, tidal effects, and other downstream controls require a more detailed method.')
module-attribute
¶
FHWA_HDS5_ROADWAY_OVERTOPPING = SourceReference(source_id='FHWA-HDS5-2012-EQ-3.9', publication='Hydraulic Design of Highway Culverts', edition='Third Edition, April 2012', locator='Section 3.1.5, Equation 3.9 and Figures 3.10-3.12', url='https://www.fhwa.dot.gov/engineering/hydraulics/pubs/12026/hif12026.pdf', applicability='Broad-crested-weir flow over a roadway embankment; the SI discharge coefficient must be selected for the actual crest and overtopping depth.', notes='Equation 3.9 is applied to constant crests and to the horizontal integration segments used for irregular roadway profiles. Downstream submergence is handled only by the separately sourced correction implemented by the roadway solver.')
module-attribute
¶
FHWA_HY8_ROADWAY_PROFILE_INTEGRATION = SourceReference(source_id='FHWA-RD-88-125-ROADWAY-PROFILE', publication='HYDRAIN - Integrated Drainage Design Computer System, Volume VI. HY8 - Culvert Analysis', edition='FHWA-RD-88-125, July 1988', locator='Section 3, Roadway Overtopping, printed pages 19-20', url='https://rosap.ntl.bts.gov/view/dot/68373/dot_68373_DS1.pdf', applicability='Roadway profiles described by station/elevation coordinates; the roadway-weir equation is integrated between adjacent coordinates with four-point Gaussian quadrature.', notes='The reference states that the weir coefficient and submergence reduction are evaluated at each integration point.')
module-attribute
¶
FHWA_BRIDGE_WATERWAYS_ROADWAY_SUBMERGENCE = SourceReference(source_id='FHWA-RD-86-108-ROADWAY-SUBMERGENCE', publication='Bridge Waterways Analysis Model: Research Report', edition='FHWA-RD-86-108, July 1986', locator='Figure 10, roadway overtopping submergence relationship', url='https://rosap.ntl.bts.gov/view/dot/54268', applicability='Downstream-submergence reduction for paved and gravel roadway overtopping. The correction is applied as a multiplier to the free-flow roadway discharge coefficient.')
module-attribute
¶
EPA_SWMM_ROADWAY_SUBMERGENCE_DIGITISATION = SourceReference(source_id='EPA-SWMM-5.2-ROADWAY-SUBMERGENCE-DIGITISATION', publication='EPA Storm Water Management Model roadway-weir implementation', edition='SWMM 5.2, release commit 65e8435e094bc7c10b83d230dc2829cd5031938b', locator='src/solver/roadway.c, Kt_Paved and Kt_Gravel tables', url='https://github.com/USEPA/Stormwater-Management-Model/blob/65e8435e094bc7c10b83d230dc2829cd5031938b/src/solver/roadway.c', applicability='Digital ordinates for the paved and gravel roadway submergence curves. The implementation identifies FHWA/RD-86/108 Figure 10 as the source of the data.', notes='Used as transparent digitisation evidence only; the FHWA publication remains the governing engineering source. Values above the published ratio range are not extrapolated.')
module-attribute
¶
CspManningEntry
dataclass
¶
One available diameter/corrugation Manning value from MRWA Table 2.2.