Skip to main content

River Discharge Ontology

Earth Science Measurements
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 16 September 2026
Audio Overview
# River Discharge Ontology — Flow Algebra

URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/earth-science-measurements/river-discharge-ontology.html

FLOW RiverDischargeOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Earth Science Measurements
    -> River Discharge Ontology

  PURPOSE:
    Represent river discharge as the volumetric flow rate of water passing through a defined river cross-section, including instantaneous and averaged discharge, stage-discharge relationships, velocity-area methods, current meters, acoustic Doppler measurements, dilution gauging, weirs and flumes, rating curves, flood and low-flow measurements, temporal aggregation, catchment runoff, calibration, uncertainty, provenance, and strict distinctions between discharge, water level, velocity, volume and runoff depth.

  ENTITY RiverDischarge {
    TYPE: VolumetricFlowRateQuantity
    SYMBOL: Q
    DIMENSION: L^3*T^-1
    SI_UNIT: cubic_metre_per_second
    SI_SYMBOL: m^3/s

    DEFINITION:
      river_discharge :=
        volume_of_water_crossing_a_defined_river_cross_section_per_unit_time

    DIFFERENTIAL_FORM:
      Q = dV/dt

    PROPERTIES:
      is_rate_quantity
      depends_on_cross_section
      varies_with_time
      may_be_measured_or_inferred
      may_be_positive_or_signed_under_directional_convention
      may_have_uncertainty
  }

  ENTITY Stage {
    TYPE: WaterLevelQuantity
    SYMBOL: h
    SI_UNIT: metre

    DEFINITION:
      water_surface_elevation_or_height
      relative_to_declared_gauge_datum
  }

  ENTITY MeanFlowVelocity {
    TYPE: VelocityQuantity
    SYMBOL: v_mean
    SI_UNIT: metre_per_second
  }

  ENTITY CrossSectionArea {
    TYPE: AreaQuantity
    SYMBOL: A
    SI_UNIT: square_metre
  }

  UNIT_SYSTEM {
    discharge:
      SI: m^3/s

    common:
      litre_per_second
      cubic_metre_per_day
      cubic_foot_per_second

    conversions:
      1 L/s = 0.001 m^3/s
      1 m^3/s = 1000 L/s

    RULE:
      discharge_unit MUST preserve_volume_per_time_semantics
  }

  TERMINOLOGY_MODEL {
    terms:
      river_discharge
      streamflow
      flow
      flow_rate
      runoff
      channel_discharge

    RULE:
      "flow" MUST be resolved_between
        discharge
        velocity
        water_level
        total_volume

    RULE:
      streamflow MAY be_equivalent_to_discharge
      under_hydrological_volumetric_flow_context
  }

  CONTINUITY_MODEL {
    general:
      Q =
        integral_A(v_normal dA)

    uniform_or_mean_velocity:
      Q =
        A*v_mean

    REQUIRE:
      cross_section
      velocity_component_normal_to_section

    RULE:
      discharge_is_area_integral_of_normal_velocity
  }

  VELOCITY_AREA_MODEL {
    divide_cross_section_into_subsections:
      Q =
        sum(v_i*A_i)

    REQUIRE:
      subsection_areas
      representative_velocities
      cross_section_geometry

    RULE:
      velocity_measurement_location_and_weighting_method MUST be preserved
  }

  CURRENT_METER_MODEL {
    instruments:
      propeller_current_meter
      electromagnetic_current_meter
      acoustic_point_velocity_meter

    measured:
      local_velocity

    discharge:
      derived_from_velocity_distribution_and_cross_section

    RULE:
      local_velocity != mean_section_velocity_without_spatial_integration
  }

  ADCP_MODEL {
    instrument:
      acoustic_Doppler_current_profiler

    measured:
      water_velocity_profiles
      depth
      boat_motion_or_reference_velocity

    discharge:
      integrated_across_cross_section

    REQUIRE:
      transect
      instrument_configuration
      blanking_distance
      edge_estimation
      bottom_tracking_or_GNSS_reference
      sound_speed_context

    RULE:
      ADCP_discharge_is_modelled_integration_of_velocity_and_geometry
  }

  STAGE_MODEL {
    stage:
      water_surface_level_relative_to_gauge_datum

    RULE:
      stage != discharge
  }

  RATING_CURVE_MODEL {
    relation:
      Q = f(h)

    common_power_form:
      Q =
        a*(h-h_0)^b
      WHEN h > h_0

    PARAMETERS:
      a
      b
      h_0 = effective_zero_flow_stage

    REQUIRE:
      gauging_station
      stage_datum
      calibration_measurements
      valid_range
      rating_version

    RULE:
      rating_curve_is_site_specific_and_time_dependent
  }

  RATING_SHIFT_MODEL {
    causes:
      sedimentation
      erosion
      vegetation
      debris
      ice
      channel_migration
      backwater

    shifted_relation:
      Q = f(h, shift_parameter)

    RULE:
      rating_shift_history MUST be preserved
  }

  HYSTERESIS_MODEL {
    phenomenon:
      different_Q_for_same_stage_on_rising_and_falling_limb

    causes:
      unsteady_flow
      flood_wave_slope
      storage
      backwater

    RULE:
      single_valued_stage_discharge_curve MAY be_invalid_during_hysteretic_events
  }

  BACKWATER_MODEL {
    causes:
      downstream_control
      tributary
      reservoir
      tide
      vegetation
      ice

    effect:
      stage_not_uniquely_related_to_discharge

    RULE:
      backwater_conditions MAY require_slope_or_multi_parameter_rating
  }

  SLOPE_AREA_MODEL {
    Manning_relation:
      Q =
        (1/n_M)*A*R_h^(2/3)*S^(1/2)

    PARAMETERS:
      n_M = Manning_roughness
      R_h = hydraulic_radius
      S = energy_slope

    USE:
      indirect_flood_discharge_estimation

    RULE:
      roughness_geometry_and_slope_assumptions MUST be preserved
  }

  WEIR_MODEL {
    generic:
      Q =
        C*geometry_factor*head^exponent

    REQUIRE:
      weir_type
      crest_geometry
      upstream_head
      discharge_coefficient
      submergence_condition

    RULE:
      weir_equation_and_coefficient MUST match_structure_and_flow_regime
  }

  FLUME_MODEL {
    structures:
      Parshall_flume
      Venturi_flume
      critical_depth_flume

    discharge:
      Q = f(head, geometry, calibration)

    RULE:
      flume_geometry_and_submergence_correction MUST be preserved
  }

  DILUTION_GAUGING_MODEL {
    tracer:
      conservative_substance

    methods:
      constant_rate_injection
      slug_injection

    constant_rate_steady_state_example:
      Q =
        q_inj*(C_inj-C_background)/
        (C_downstream-C_background)
      under_complete_mixing_and_steady_conditions

    REQUIRE:
      tracer_concentration
      injection_rate
      background
      complete_mixing
      recovery

    RULE:
      dilution_gauging_requires_mass_conservation_and_mixing_assumptions
  }

  VOLUMETRIC_MODEL {
    small_flow:
      Q =
        collected_volume/collection_time

    REQUIRE:
      collection_time > 0

    RULE:
      volumetric_method_is_direct_but_generally_limited_to_small_flows
  }

  CROSS_SECTION_MODEL {
    geometry:
      width
      depth_profile
      bed_elevation

    area:
      integral_width(depth dy)

    hydraulic_radius:
      R_h =
        A/wetted_perimeter

    RULE:
      cross_section_geometry MAY change_over_time
  }

  WATER_LEVEL_DATUM_MODEL {
    stage_reference:
      gauge_datum

    possible_ties:
      local_benchmark
      national_vertical_datum

    RULE:
      gauge_datum_changes MUST be preserved_and_corrected
  }

  TEMPORAL_MODEL {
    instantaneous:
      Q(t)

    interval_mean:
      Q_mean =
        integral_interval(Q dt)/delta_t

    daily_mean:
      mean_over_declared_hydrological_or_calendar_day

    RULE:
      instantaneous_and_mean_discharge_are_not_semantically_equivalent
  }

  FLOW_VOLUME_MODEL {
    total_volume:
      V =
        integral_interval(Q dt)

    constant_discharge:
      V =
        Q*delta_t

    RULE:
      discharge != water_volume
  }

  RUNOFF_DEPTH_MODEL {
    catchment_area:
      A_c

    runoff_volume:
      V_runoff =
        integral(Q_outflow dt)
        adjusted_for_declared_water_balance_context

    equivalent_runoff_depth:
      R_d =
        V_runoff/A_c
      WHEN A_c != 0

    RULE:
      river_discharge_and_catchment_runoff_depth
      MUST be distinguished
  }

  SPECIFIC_DISCHARGE_MODEL {
    catchment_specific_discharge:
      q =
        Q/A_c

    units:
      m^3/s/km^2
      L/s/km^2

    RULE:
      specific_discharge_requires_catchment_area
  }

  BASEFLOW_MODEL {
    total_streamflow:
      Q_total =
        Q_baseflow + Q_quickflow
      under_declared_separation_model

    RULE:
      baseflow_is_model_dependent_component
  }

  FLOOD_MODEL {
    quantities:
      peak_discharge
      flood_volume
      event_duration
      hydrograph

    peak:
      Q_peak =
        max(Q(t))
      over_declared_event

    RULE:
      flood_peak_depends_on_temporal_resolution_and_event_definition
  }

  LOW_FLOW_MODEL {
    possible_metrics:
      minimum_daily_flow
      n_day_minimum
      flow_duration_percentile

    RULE:
      low_flow_metric_definition_and_aggregation_period MUST be preserved
  }

  FLOW_DURATION_MODEL {
    exceedance_probability:
      fraction_of_time_discharge_equals_or_exceeds_Q

    curve:
      Q versus exceedance_probability

    RULE:
      flow_duration_curve_is_statistical_summary
      not_chronological_hydrograph
  }

  HYDROGRAPH_MODEL {
    hydrograph:
      Q = Q(t)

    event_components:
      rising_limb
      peak
      recession_limb
      baseflow

    RULE:
      hydrograph_temporal_resolution MUST be preserved
  }

  SPATIAL_CONTEXT_MODEL {
    REQUIRE:
      river_or_stream_identifier
      gauging_station
      cross_section
      latitude
      longitude
      catchment

    RULE:
      discharge_is_location_specific
  }

  RELATIONSHIPS {
    RiverDischarge -> IS_A -> VolumetricFlowRate
    RiverDischarge -> RELATES -> VelocityAndCrossSectionArea
    RiverDischarge -> INTEGRATES_OVER_TIME_TO -> WaterVolume
    Stage -> MAY_MAP_TO -> RiverDischargeThroughRatingCurve
    RatingCurve -> BELONGS_TO -> GaugingStation
    CurrentMeter -> MEASURES -> LocalVelocity
    ADCP -> MEASURES -> VelocityFieldAndGeometry
    VelocityAreaMethod -> DERIVES -> RiverDischarge
    CatchmentArea -> NORMALISES -> SpecificDischarge
    RiverDischarge -> CONTRIBUTES_TO -> RunoffVolume
    Hydrograph -> REPRESENTS -> DischargeTimeSeries
  }

  SEMANTIC_EQUIVALENCE {
    "river discharge" ~= streamflow WHEN volumetric_flow_rate_context
    "flow rate" ~= volumetric_discharge WHEN river_context

    discharge != stage
    discharge != water_level
    discharge != velocity
    discharge != total_water_volume
    discharge != runoff_depth
    local_velocity != mean_section_velocity
    instantaneous_discharge != daily_mean_discharge
    hydrograph != flow_duration_curve
  }

  CONSTRAINTS {
    discharge_dimension = L^3*T^-1
    measurement_cross_section_must_be_defined = true
    spatial_location_must_be_defined = true
    stage_datum_must_be_defined_for_rating_curve = true
    discharge_and_stage_are_not_semantically_equivalent = true
    discharge_and_velocity_are_not_semantically_equivalent = true
    discharge_and_volume_are_not_semantically_equivalent = true
    rating_curve_version_and_validity_should_be_preserved = true
    temporal_aggregation_period_should_be_preserved = true
    uncertainty_should_include_velocity_geometry_rating_and_temporal_components_when_relevant = true
  }

  MEASUREMENT_MODEL {
    OBSERVABLE_OR_INFERRED:
      RiverDischarge
      Stage
      MeanFlowVelocity
      CrossSectionArea

    COMMON_METHODS:
      velocity_area
      current_meter
      ADCP
      stage_discharge_rating
      dilution_gauging
      weir
      flume
      slope_area
      volumetric_collection

    RECORD:
      numerical_value
      unit
      river_identifier
      station_identifier
      cross_section_identifier
      latitude
      longitude
      coordinate_reference_system
      stage
      stage_datum
      cross_section_geometry
      velocity_measurements
      measurement_method
      instrument
      rating_curve_version
      rating_shift
      start_time
      end_time
      temporal_aggregation
      flow_condition
      backwater_or_ice_status
      calibration_state
      quality_flag
      uncertainty
      provenance

    UNCERTAINTY:
      measured_or_inferred_discharge =
        best_estimate +/- uncertainty
  }

  CALIBRATION_MODEL {
    velocity_instruments:
      velocity_response_calibration

    stage_sensor:
      water_level_calibration_and_datum_check

    rating_curve:
      calibrated_from_direct_discharge_measurements

    structures:
      weir_or_flume_coefficient_calibration

    REQUIRE:
      calibration_date
      valid_range
      reference_method
      uncertainty

    RULE:
      calibration_and_rating_version MUST match_measurement_period
  }

  UNCERTAINTY_MODEL {
    sources:
      velocity_measurement
      cross_section_geometry
      depth_measurement
      edge_extrapolation
      ADCP_blank_zone
      sound_speed
      stage_measurement
      rating_curve_fit
      rating_shift
      hysteresis
      backwater
      roughness
      tracer_recovery
      temporal_sampling
      instrument_calibration

    PROPAGATION:
      discharge_uncertainty
      <- velocity_geometry_stage_rating_environment_and_method_uncertainties
  }

  REASONING_RULES {
    IF mean_velocity_and_cross_section_area_known
      THEN discharge =
        mean_velocity*cross_section_area

    IF subsection_velocities_and_areas_known
      THEN discharge =
        sum(velocity_i*area_i)

    IF velocity_field_over_cross_section_known
      THEN discharge =
        integral_cross_section(normal_velocity dA)

    IF stage_known AND valid_rating_curve_known
      THEN discharge =
        rating_curve(stage)
      WITH rating_version_and_shift

    IF discharge_time_series_known
      THEN water_volume =
        integral(discharge dt)

    IF discharge_and_time_interval_known
      AND discharge_constant_over_interval
      THEN water_volume =
        discharge*time_interval

    IF runoff_volume_and_catchment_area_known
      AND catchment_area != 0
      THEN runoff_depth =
        runoff_volume/catchment_area

    IF discharge_and_catchment_area_known
      AND catchment_area != 0
      THEN specific_discharge =
        discharge/catchment_area

    IF discharge_series_known
      THEN peak_discharge =
        max(discharge_series)
      over_declared_event

    IF stage_discharge_pairs_known
      THEN MAY fit_rating_curve
      preserving_model_form_range_and_uncertainty
  }

  VALIDATION {
    CHECK quantity_is_discharge
    CHECK volumetric_flow_unit
    CHECK river_and_station_identity
    CHECK cross_section
    CHECK measurement_method
    CHECK velocity_vs_discharge
    CHECK stage_vs_discharge
    CHECK stage_datum
    CHECK rating_curve_version
    CHECK rating_shift
    CHECK hysteresis_or_backwater
    CHECK instantaneous_vs_averaged_discharge
    CHECK temporal_aggregation
    CHECK discharge_vs_volume
    CHECK discharge_vs_runoff_depth
    CHECK cross_section_geometry
    CHECK calibration_state
    CHECK quality_flag
    CHECK uncertainty_representation
  }

  CONFIDENCE {
    definition_confidence: 1.00
    dimensional_confidence: 1.00
    continuity_relationship_confidence: 1.00
    velocity_area_confidence: 0.99
    rating_curve_confidence: 0.97
    ADCP_measurement_confidence: 0.98
    measurement_context_confidence: 0.98

    RULE:
      confidence decreases when cross-section geometry, stage datum,
      rating version, backwater, velocity coverage,
      calibration, temporal aggregation or uncertainty is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_measurement:
      identify_river_station_and_cross_section
      identify_discharge_method
      validate_unit
      attach_stage_and_datum_when_available
      attach_velocity_and_geometry_inputs
      attach_measurement_time
      attach_flow_conditions
      apply_valid_calibration
      apply_rating_curve_when_required
      preserve_raw_observations
      attach_quality_flag
      attach_uncertainty
      update_discharge_state

    ON new_stage_observation:
      preserve_raw_stage
      identify_active_rating_curve
      apply_rating_shift_when_valid
      evaluate_backwater_or_hysteresis_conditions
      derive_discharge
      attach_uncertainty

    ON cross_section_change:
      preserve_previous_geometry
      update_channel_geometry
      invalidate_or_review_rating_curve
      update_uncertainty
      update_confidence

    ON rating_curve_revision:
      preserve_previous_rating
      preserve_direct_gaugings
      attach_new_curve_version
      recompute_affected_discharge_series
      update_uncertainty
      update_provenance

    ON new_time_series_data:
      append_discharge_observation
      update_hydrograph
      recompute_temporal_means
      recompute_event_volume_and_peak_when_requested

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: RiverDischarge
    canonical_symbol: Q
    canonical_dimension: L^3*T^-1
    canonical_SI_unit: m^3/s

    interpretation_order:
      identify_river_station_and_cross_section
      identify_value
      identify_unit
      identify_instantaneous_or_averaged_discharge
      identify_measurement_method
      identify_velocity_and_cross_section_context
      identify_stage_and_datum
      identify_rating_curve_version_and_shift
      identify_backwater_hysteresis_or_ice_conditions
      identify_time_and_aggregation_period
      identify_catchment_context
      identify_calibration_and_quality
      identify_uncertainty
      normalize_units
      validate_flow_semantics
      infer_hydrological_relationships

    ambiguity_controls:
      distinguish_discharge_from_stage
      distinguish_discharge_from_water_level
      distinguish_discharge_from_velocity
      distinguish_discharge_from_total_water_volume
      distinguish_discharge_from_runoff_depth
      distinguish_local_velocity_from_section_mean_velocity
      distinguish_instantaneous_from_averaged_discharge
      distinguish_hydrograph_from_flow_duration_curve
      preserve_station_cross_section_datum_rating_time_method_and_quality_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_and_Earth_science_river_discharge_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Earth Science Measurements
      -> River Discharge Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      terminology_model
      continuity_model
      velocity_area_model
      current_meter_model
      ADCP_model
      stage_model
      rating_curve_model
      rating_shift_model
      hysteresis_model
      backwater_model
      slope_area_model
      weir_model
      flume_model
      dilution_gauging_model
      volumetric_model
      cross_section_model
      water_level_datum_model
      temporal_model
      flow_volume_model
      runoff_depth_model
      specific_discharge_model
      baseflow_model
      flood_model
      low_flow_model
      flow_duration_model
      hydrograph_model
      spatial_context_model
      relationships
      constraints
      measurement_model
      calibration_model
      uncertainty_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      discharge_quantity_definition_changes
      cross_section_or_velocity_model_changes
      stage_or_rating_curve_model_changes
      rating_shift_backwater_or_hysteresis_model_changes
      hydraulic_structure_or_dilution_model_changes
      temporal_or_catchment_model_changes
      calibration_model_changes
      measurement_model_changes
      constraint_model_changes
      reasoning_rule_changes
      unit_model_changes
  }

}

END FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ