Skip to content

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.

ModernBoxInletCoefficients dataclass

One corrected FHWA-HRT-06-138 Tables 11 and 12 configuration row.

form_2_inlet_coefficients()

Return the corrected Table 11 Form 2 constants for the general solver.

entrance_loss_coefficient()

Return the corrected Table 11 outlet-control entrance-loss coefficient.