Skip to main content

Soil Moisture Ontology

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

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

FLOW SoilMoistureOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Earth Science Measurements
    -> Soil Moisture Ontology

  PURPOSE:
    Represent soil moisture as a family of Earth science measurements describing water contained within soil relative to a defined mass, volume, pore volume, potential or saturation basis, including gravimetric and volumetric water content, degree of saturation, soil water potential, field capacity, wilting point, direct and indirect measurement methods, depth profiles, calibration, temperature and soil-property effects, remote sensing, spatial and temporal sampling, uncertainty, provenance, and strict distinctions between soil moisture quantities and related hydrological variables.

  ENTITY SoilMoisture {
    TYPE: SoilWaterStateQuantity

    DEFINITION:
      soil_moisture :=
        quantified_water_content_or_water_state_of_defined_soil_sample_or_volume
        under_declared_measurement_basis

    PROPERTIES:
      depends_on_soil_volume_or_mass
      depends_on_depth
      depends_on_soil_properties
      varies_with_time
      varies_spatially
      may_be_directly_measured_or_inferred
      may_have_uncertainty
  }

  ENTITY GravimetricWaterContent {
    TYPE: DimensionlessMassRatioQuantity
    SYMBOL: theta_g
    ALTERNATE_SYMBOL: w

    DEFINITION:
      theta_g =
        m_water/m_dry_soil

    DIMENSION:
      dimensionless_mass_ratio
  }

  ENTITY VolumetricWaterContent {
    TYPE: DimensionlessVolumeFractionQuantity
    SYMBOL: theta_v

    DEFINITION:
      theta_v =
        V_water/V_bulk_soil

    DIMENSION:
      dimensionless_volume_fraction

    COMMON_REPORTING:
      m^3/m^3
      percent_volume
  }

  ENTITY DegreeOfSaturation {
    TYPE: DimensionlessPoreWaterFraction
    SYMBOL: S_r

    DEFINITION:
      S_r =
        V_water/V_voids

    RANGE:
      0 <= S_r <= 1
      under_standard_unsaturated_or_saturated_pore_volume_context
  }

  ENTITY SoilWaterPotential {
    TYPE: PotentialOrPressureRelatedQuantity
    SYMBOL: psi

    POSSIBLE_COMPONENTS:
      matric_potential
      gravitational_potential
      pressure_potential
      osmotic_potential

    RULE:
      soil_water_potential != soil_water_content
  }

  UNIT_SYSTEM {
    gravimetric_water_content:
      kg/kg
      g/g
      percent_mass

    volumetric_water_content:
      m^3/m^3
      percent_volume

    degree_of_saturation:
      dimensionless_fraction
      percent

    water_potential:
      pascal
      kilopascal
      megapascal
      metre_of_water_head

    RULE:
      water_content_basis_and_units MUST be preserved
  }

  TERMINOLOGY_MODEL {
    terms:
      soil_moisture
      soil_water_content
      gravimetric_water_content
      volumetric_water_content
      saturation
      soil_water_potential
      matric_potential

    RULE:
      generic_soil_moisture MUST be resolved_to_specific_quantity_basis

    ambiguity_controls:
      gravimetric_water_content != volumetric_water_content
      volumetric_water_content != degree_of_saturation
      soil_water_content != soil_water_potential
  }

  MASS_BALANCE_MODEL {
    wet_soil_mass:
      m_wet =
        m_dry + m_water

    water_mass:
      m_water =
        m_wet - m_dry

    gravimetric_content:
      theta_g =
        (m_wet-m_dry)/m_dry
      WHEN m_dry != 0

    RULE:
      dry_mass_reference MUST be preserved
  }

  VOLUMETRIC_MODEL {
    theta_v =
      V_water/V_bulk

    relation_using_water_mass:
      V_water =
        m_water/rho_water

    REQUIRE:
      bulk_volume != 0

    RULE:
      bulk_soil_volume_includes_solids_and_pores
  }

  BULK_DENSITY_CONVERSION_MODEL {
    dry_bulk_density:
      rho_b =
        m_dry/V_bulk

    relation:
      theta_v =
        theta_g*rho_b/rho_water

    approximation:
      theta_v approximately_equals
        theta_g*rho_b
      only_when_density_units_are_normalized_relative_to_water_density

    REQUIRE:
      dry_bulk_density
      water_density
      compatible_units

    RULE:
      gravimetric_to_volumetric_conversion_requires_bulk_density
  }

  POROSITY_MODEL {
    porosity:
      phi =
        V_voids/V_bulk

    density_relation:
      phi =
        1-rho_b/rho_s
      under_two_phase_solid_void_model

    WHERE:
      rho_s = particle_density

    RULE:
      porosity_and_water_content_are_distinct
  }

  SATURATION_MODEL {
    degree_of_saturation:
      S_r =
        theta_v/phi
      WHEN phi != 0

    inverse:
      theta_v =
        S_r*phi

    saturated_condition:
      S_r approximately_equals 1

    RULE:
      saturated_volumetric_water_content approximately_equals_porosity
      only_when_pores_are_effectively_water_filled
  }

  SOIL_WATER_STORAGE_MODEL {
    layer_water_storage:
      W =
        theta_v*layer_thickness

    equivalent_water_depth:
      units_of_length

    layered_profile:
      W_total =
        sum(theta_v_i*delta_z_i)

    RULE:
      soil_water_storage_requires_depth_interval
  }

  DEPTH_PROFILE_MODEL {
    profile:
      theta = theta(z,t)

    sample_interval:
      depth_top
      depth_bottom

    sensor_depth:
      nominal_or_effective_measurement_depth

    RULE:
      soil_moisture_without_depth_context
      MAY be semantically_incomplete
  }

  OVEN_DRY_MODEL {
    method:
      gravimetric_reference_measurement

    process:
      weigh_wet_sample
      dry_to_declared_constant_mass_condition
      weigh_dry_sample

    result:
      theta_g =
        (m_wet-m_dry)/m_dry

    REQUIRE:
      drying_temperature
      drying_duration_or_constant_mass_criterion
      balance_calibration

    RULE:
      operational_dry_mass_definition MUST be preserved
  }

  TDR_MODEL {
    method:
      time_domain_reflectometry

    measured:
      electromagnetic_wave_travel_time_or_apparent_dielectric_permittivity

    inferred:
      volumetric_water_content

    calibration:
      theta_v =
        f(apparent_permittivity, soil_properties)

    RULE:
      TDR_signal != volumetric_water_content_without_calibration_model
  }

  FDR_CAPACITANCE_MODEL {
    methods:
      frequency_domain_reflectometry
      capacitance_sensor

    measured:
      dielectric_response

    inferred:
      volumetric_water_content

    dependencies:
      soil_texture
      bulk_density
      salinity
      temperature
      sensor_installation

    RULE:
      dielectric_sensor_calibration MAY be_soil_specific
  }

  NEUTRON_PROBE_MODEL {
    principle:
      hydrogen_content_affects_neutron_moderation

    measured:
      neutron_count_ratio

    inferred:
      volumetric_water_content

    REQUIRE:
      access_tube
      calibration
      depth
      background_and_standard_count

    RULE:
      hydrogen_from_sources_other_than_water MAY affect_measurement
  }

  TENSIOMETER_MODEL {
    measured:
      matric_pressure_head_or_potential

    RULE:
      tensiometer_measures_soil_water_potential
      not_direct_water_content

    conversion:
      water_content MAY be inferred_through_soil_water_retention_curve
  }

  RETENTION_CURVE_MODEL {
    relation:
      theta =
        f(psi)

    possible_models:
      van_Genuchten
      Brooks_Corey
      empirical_site_specific

    van_Genuchten_example:
      theta =
        theta_r
        + (theta_s-theta_r)/
          (1+(alpha*abs(h))^n)^m

    RULE:
      retention_curve_parameters_and_hysteresis_state MUST be preserved
  }

  FIELD_CAPACITY_MODEL {
    concept:
      water_content_after_gravitational_drainage_under_declared_operational_definition

    possible_definition:
      water_content_at_selected_matric_potential
      or field_based_drainage_condition

    RULE:
      field_capacity_is_operational_or_model_dependent
      not_universal_fixed_water_content
  }

  WILTING_POINT_MODEL {
    concept:
      soil_water_state_associated_with_declared_plant_wilting_reference

    common_operational_reference:
      selected_matric_potential

    RULE:
      permanent_wilting_point_depends_on_soil_plant_and_operational_definition
  }

  AVAILABLE_WATER_MODEL {
    plant_available_water:
      theta_field_capacity - theta_wilting_point

    profile_available_storage:
      sum(
        (theta_FC_i-theta_WP_i)
        * layer_thickness_i
      )

    RULE:
      available_water_requires_consistent_field_capacity_and_wilting_point_definitions
  }

  INFILTRATION_CONTEXT_MODEL {
    rainfall_or_irrigation:
      adds_water_to_soil_surface

    processes:
      infiltration
      redistribution
      drainage
      evaporation
      root_uptake

    water_balance:
      delta_storage =
        infiltration
        - drainage
        - evapotranspiration
        +/- lateral_flow

    RULE:
      soil_moisture_change_is_state_change
      not_identical_to_infiltration_rate
  }

  TEMPERATURE_MODEL {
    effects:
      water_density
      dielectric_response
      sensor_electronics
      phase_change

    RULE:
      sensor_temperature_compensation SHOULD be preserved_when_applied
  }

  SALINITY_MODEL {
    effects:
      electrical_conductivity
      dielectric_sensor_response
      osmotic_potential

    RULE:
      saline_soils MAY require_specific_calibration_and_potential_context
  }

  FROZEN_SOIL_MODEL {
    components:
      liquid_water
      ice

    dielectric_response:
      differs_between_liquid_water_and_ice

    RULE:
      unfrozen_water_content_total_water_content_and_ice_content
      MUST be distinguished
  }

  SPATIAL_MODEL {
    point_measurement:
      sensor_or_sample_location

    profile_measurement:
      multiple_depths

    field_average:
      spatially_aggregated_water_content

    gridded_product:
      raster_or_modelled_field

    RULE:
      point_profile_field_average_and_grid_cell_measurements
      are_different_spatial_supports
  }

  REMOTE_SENSING_MODEL {
    possible_platforms:
      satellite
      aircraft
      drone

    possible_observations:
      microwave_brightness_temperature
      radar_backscatter
      thermal_or_optical_proxy

    inferred:
      near_surface_soil_moisture

    REQUIRE:
      retrieval_algorithm
      footprint
      depth_sensitivity
      vegetation_correction
      surface_roughness_context

    RULE:
      remote_sensor_signal != soil_moisture_without_retrieval_model
  }

  SCALE_MODEL {
    point_scale:
      centimetres_to_decimetres

    field_scale:
      metres_to_kilometres

    satellite_footprint:
      potentially_kilometre_scale

    RULE:
      measurements_at_different_spatial_scales MUST_NOT be_assumed_directly_equivalent
  }

  TEMPORAL_MODEL {
    soil_moisture:
      theta = theta(t)

    observation:
      timestamp

    possible_aggregation:
      instantaneous
      hourly_mean
      daily_mean
      seasonal_statistic

    RULE:
      temporal_aggregation_period MUST be preserved
  }

  RELATIONSHIPS {
    SoilMoisture -> DESCRIBES -> SoilWaterState
    GravimetricWaterContent -> RELATES -> WaterMassAndDrySoilMass
    VolumetricWaterContent -> RELATES -> WaterVolumeAndBulkSoilVolume
    BulkDensity -> ENABLES -> GravimetricToVolumetricConversion
    Porosity -> RELATES -> DegreeOfSaturation
    VolumetricWaterContent -> CONTRIBUTES_TO -> SoilWaterStorage
    SoilWaterPotential -> RELATES_TO -> WaterContentThroughRetentionCurve
    TDR -> MEASURES -> DielectricResponse
    DielectricCalibration -> MAPS -> SensorResponseToWaterContent
    RemoteSensor -> OBSERVES -> SurfaceElectromagneticResponse
    RetrievalModel -> MAPS -> RemoteObservationToSoilMoisture
    Depth -> QUALIFIES -> SoilMoistureMeasurement
  }

  SEMANTIC_EQUIVALENCE {
    "soil water content" ~= soil_moisture WHEN basis_is_declared
    "volumetric soil moisture" ~= volumetric_water_content
    "gravimetric soil moisture" ~= gravimetric_water_content

    gravimetric_water_content != volumetric_water_content
    volumetric_water_content != degree_of_saturation
    soil_water_content != soil_water_potential
    soil_moisture != infiltration_rate
    soil_moisture != groundwater_level
    field_capacity != saturation
    remote_sensor_signal != soil_moisture
    snow_or_surface_water != soil_water_content
  }

  CONSTRAINTS {
    soil_moisture_basis_must_be_defined = true
    soil_depth_or_interval_should_be_defined = true
    soil_identity_or_properties_should_be_preserved = true
    denominator_must_be_nonzero = true
    gravimetric_and_volumetric_water_content_are_not_semantically_equivalent = true
    water_content_and_water_potential_are_not_semantically_equivalent = true
    bulk_density_required_for_gravimetric_volumetric_conversion = true
    porosity_required_for_saturation_conversion = true
    indirect_sensor_measurement_requires_calibration_model = true
    remote_sensing_measurement_requires_retrieval_model = true
    uncertainty_should_include_sampling_calibration_soil_property_and_scale_components = true
  }

  MEASUREMENT_MODEL {
    OBSERVABLE_OR_INFERRED:
      GravimetricWaterContent
      VolumetricWaterContent
      DegreeOfSaturation
      SoilWaterPotential
      SoilWaterStorage

    COMMON_METHODS:
      oven_dry_gravimetry
      TDR
      FDR
      capacitance_sensor
      neutron_probe
      tensiometer
      resistance_block
      remote_sensing
      model_assimilation

    RECORD:
      quantity_type
      numerical_value
      unit
      soil_location
      latitude
      longitude
      coordinate_reference_system
      depth
      depth_interval
      soil_type
      texture
      bulk_density
      particle_density
      porosity
      temperature
      salinity_or_conductivity_when_relevant
      frozen_or_unfrozen_state
      method
      instrument
      raw_sensor_response
      calibration_model
      retrieval_model_when_remote
      spatial_support
      timestamp
      temporal_aggregation
      quality_flag
      uncertainty
      provenance

    UNCERTAINTY:
      measured_or_inferred_soil_moisture =
        best_estimate +/- uncertainty
  }

  CALIBRATION_MODEL {
    direct_reference:
      oven_dry_gravimetric_measurement

    dielectric_sensor:
      response -> volumetric_water_content

    neutron_probe:
      count_ratio -> volumetric_water_content

    remote_sensing:
      electromagnetic_observation -> surface_soil_moisture

    REQUIRE:
      calibration_data
      soil_properties
      valid_range
      temperature_or_salinity_context_when_relevant
      uncertainty

    RULE:
      calibration_model SHOULD match_soil_and_sensor_conditions
  }

  UNCERTAINTY_MODEL {
    sources:
      wet_mass
      dry_mass
      bulk_volume
      bulk_density
      particle_density
      porosity
      sampling_variability
      soil_heterogeneity
      sensor_calibration
      temperature
      salinity
      installation
      depth_representation
      remote_retrieval
      spatial_scaling
      temporal_variability

    PROPAGATION:
      soil_moisture_uncertainty
      <- mass_volume_soil_property_sampling_sensor_and_retrieval_uncertainties
  }

  REASONING_RULES {
    IF wet_mass_and_dry_mass_known
      AND dry_mass != 0
      THEN gravimetric_water_content =
        (wet_mass-dry_mass)/dry_mass

    IF water_volume_and_bulk_soil_volume_known
      AND bulk_soil_volume != 0
      THEN volumetric_water_content =
        water_volume/bulk_soil_volume

    IF gravimetric_water_content_bulk_density_and_water_density_known
      AND water_density != 0
      THEN volumetric_water_content =
        gravimetric_water_content*bulk_density/water_density

    IF bulk_density_and_particle_density_known
      AND particle_density != 0
      THEN porosity =
        1-bulk_density/particle_density
      UNDER two_phase_solid_void_model

    IF volumetric_water_content_and_porosity_known
      AND porosity != 0
      THEN degree_of_saturation =
        volumetric_water_content/porosity

    IF volumetric_water_content_and_layer_thickness_known
      THEN water_storage =
        volumetric_water_content*layer_thickness

    IF layered_profile_known
      THEN total_soil_water_storage =
        sum(theta_v_i*layer_thickness_i)

    IF soil_water_potential_and_valid_retention_curve_known
      THEN infer_water_content =
        retention_curve(soil_water_potential)

    IF indirect_sensor_response_and_valid_calibration_known
      THEN infer_soil_moisture =
        calibration(sensor_response)

    IF remote_observation_and_valid_retrieval_model_known
      THEN infer_surface_soil_moisture =
        retrieval(remote_observation)
  }

  VALIDATION {
    CHECK soil_moisture_quantity_type
    CHECK unit_consistency
    CHECK soil_location
    CHECK depth_or_interval
    CHECK gravimetric_vs_volumetric_basis
    CHECK denominator_nonzero
    CHECK bulk_density_for_basis_conversion
    CHECK porosity_for_saturation
    CHECK soil_water_content_vs_potential
    CHECK sensor_method
    CHECK calibration_model
    CHECK soil_texture_and_density_context
    CHECK temperature_and_salinity
    CHECK frozen_soil_state
    CHECK remote_retrieval_model
    CHECK spatial_support
    CHECK temporal_aggregation
    CHECK quality_flag
    CHECK uncertainty_representation
  }

  CONFIDENCE {
    definition_confidence: 1.00
    quantity_basis_confidence: 1.00
    gravimetric_relationship_confidence: 1.00
    volumetric_relationship_confidence: 1.00
    bulk_density_conversion_confidence: 0.99
    indirect_sensor_confidence: 0.97
    remote_retrieval_confidence: 0.94
    measurement_context_confidence: 0.98

    RULE:
      confidence decreases when quantity basis, depth, soil properties,
      bulk density, porosity, temperature, salinity,
      calibration, spatial support or uncertainty is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_measurement:
      identify_soil_moisture_quantity
      validate_unit
      attach_location_and_CRS
      attach_depth_or_interval
      attach_soil_type_and_properties
      attach_temperature_and_salinity_when_relevant
      identify_measurement_method
      preserve_raw_sensor_response
      apply_valid_calibration_or_retrieval
      attach_spatial_and_temporal_support
      attach_quality_flag
      attach_uncertainty
      update_soil_moisture_state

    ON bulk_density_revision:
      preserve_gravimetric_measurement
      update_bulk_density
      recompute_volumetric_water_content
      propagate_uncertainty

    ON porosity_revision:
      preserve_water_content
      update_porosity
      recompute_degree_of_saturation
      update_uncertainty

    ON calibration_revision:
      preserve_raw_sensor_data
      preserve_previous_calibration
      apply_new_calibration
      recompute_affected_results
      update_uncertainty
      update_confidence

    ON retention_curve_revision:
      preserve_water_potential_measurements
      preserve_previous_curve
      update_curve_parameters
      recompute_inferred_water_content
      update_uncertainty

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_domain: SoilMoisture
    primary_quantities:
      GravimetricWaterContent
      VolumetricWaterContent
      DegreeOfSaturation
      SoilWaterPotential

    interpretation_order:
      identify_soil_moisture_quantity
      identify_value
      identify_unit
      identify_mass_volume_saturation_or_potential_basis
      identify_location
      identify_depth_or_interval
      identify_soil_properties
      identify_bulk_density_and_porosity
      identify_temperature_salinity_and_frozen_state
      identify_direct_or_indirect_method
      identify_calibration_or_retrieval_model
      identify_spatial_support
      identify_temporal_aggregation
      identify_quality_flag
      identify_uncertainty
      normalize_units
      validate_basis
      infer_soil_water_relationships

    ambiguity_controls:
      distinguish_gravimetric_from_volumetric_water_content
      distinguish_volumetric_water_content_from_degree_of_saturation
      distinguish_water_content_from_water_potential
      distinguish_soil_moisture_from_infiltration_rate
      distinguish_soil_moisture_from_groundwater_level
      distinguish_field_capacity_from_saturation
      distinguish_remote_sensor_signal_from_retrieved_soil_moisture
      distinguish_snow_or_surface_water_from_soil_water
      preserve_depth_soil_properties_calibration_scale_time_and_provenance_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_and_Earth_science_soil_moisture_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Earth Science Measurements
      -> Soil Moisture Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_domain
      ontology_path
      terminology_model
      mass_balance_model
      volumetric_model
      bulk_density_conversion_model
      porosity_model
      saturation_model
      soil_water_storage_model
      depth_profile_model
      oven_dry_model
      TDR_model
      FDR_capacitance_model
      neutron_probe_model
      tensiometer_model
      retention_curve_model
      field_capacity_model
      wilting_point_model
      available_water_model
      infiltration_context_model
      temperature_model
      salinity_model
      frozen_soil_model
      spatial_model
      remote_sensing_model
      scale_model
      temporal_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
      soil_moisture_basis_changes
      bulk_density_or_porosity_model_changes
      soil_water_retention_model_changes
      direct_or_indirect_sensor_model_changes
      calibration_or_retrieval_model_changes
      soil_property_or_environment_model_changes
      spatial_or_temporal_support_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