Skip to content

Component library

Introduction

WSIMOD contains a variety of components to represent physical processes. We recommend viewing the API for a detailed description of the models included, however, we provide an overview of documented components, their assumptions and required input data on this page.

Component Library

Component Assumptions Data
Catchment - Flows from Catchment nodes are simply read from data, thus assumed to be unresponsive to wider water cycle changes. - Flow data in the data_input_dict at the model timestep. Units: cubic metres/timestep
- Values for each variable defined in constants.POLLUTANTS also stored in data_input_dict at the model timestep. Units: kg/m3/timestep (additive pollutants)
Distribution - No distribution processes yet represented, this class is just for conveyance. - None
FWTW - See wtw.py/WTW for treatment.
- Stores treated water in a service reservoir tank, with a single tank per FWTW node.
- Aims to satisfy a throughput that would top up the service reservoirs until full.
- Currently, will not allow a deficit, thus introducing water from 'other measures' if pulls cannot fulfil demand. Behaviour under a deficit should be determined and validated before introducing.
- See wtw.py/WTW for treatment.
- Service reservoir tank capacity, area, and datum. Units: cubic metres, squared metres, metres
Groundwater - Conceptualises groundwater as a tank.
- Baseflow is generated following a residence-time method.
- Baseflow is sent to storage.py/River, nodes.py/Node or waste.py/Waste nodes.
- Infiltration to sewer.py/Sewer nodes occurs when the storage in the tank is greater than a specified threshold, at a rate proportional to the sqrt of volume above the threshold. (Note, this behaviour is not validated and a high uncertainty process in general)
- If decays are provided to model water quality transformations, see core.py/DecayObj.
- Groundwater tank capacity, area, and datum. Units: cubic metres, squared metres, metres
- Infiltration behaviour determined by an infiltration_threshold and infiltration_pct. Units: proportion of capacity
- Optional dictionary of decays with pollutants as keys and decay parameters (a constant and a temperature sensitivity exponent) as values. Units: -
GrowingSurface - In the soil water module, crop stages and crop coefficients control the evapotranspiration.
- Fertiliser and manure application are the major source of soil nutrients, which are added into soil nutrient pools, including dissovled inorganic, dissolved organic, fast and humus for both nitrogen and phosphorus.
- Nutrient transformation processes in soil are simulated, including fluxes between the soil nutrient pools, denitrification for nitrogen, adsorption/desorption for phosphorus. These processes are affected by temperature and soil moisture.
- Crop uptake of nutrients are simulated based on crop stages, which is different for spring-sown and autumn-sown crops.
- Soil erosion from the growing surface is simulated as one of the major sources of suspended solids in rivers, which is mainly affected by rainfall energy and crop/ground cover. Phosphorus will also be eroded along with the soil particles, in both adsorbed inorganic and humus form.
- data_input_dict can contain a variety of pollutant deposition data. srp-fertiliser describes phosphate. noy-fertiliser describes nitrogen as nitrates. nhx-fertiliser describes nitrogen as ammonia. srp/noy/ nhx-manure can also be used to specify manure application. Units: kg/m2/timestep (data is read at a monthly timestep)
- Rooting depth. Units: m
- Evapotranspiration depletion factor. Units:
- Sowing day, harvest day and crop calendars. Units: day number in Julian calendar
- Crop factor. Units:
- Initial storage for solid pollutants. Units: kg
Land - Percolation, surface runoff, and subsurface runoff, can be described with a residence-time method.
- Flows to percolation, surface runoff, and subsurface runoff are generated by different hydrological response units (subclasses of land.py/Surface), but aggregated for a given land node.
- Flows to percolation are distributed to storage.py/Groundwater nodes while surface/subsurface runoff to nodes.py/Node or storage.py/River nodes.
- Input data associated with the land node (precipitation, temperature, evapotranspiartion) are the same for every surface.
- Water received from sewer.py/Sewer objects is sent to the first land.py/ImperviousSurface in the surfaces list.
- Precipitation and evapotranspiration are in the data_input_dict at the model timestep. Units: metres/timestep
- Temperature in the data_input_dict at the model timestep. Units: C
- Residence time of surface, subsurface and percolation flows. Units: number of timesteps
Node - No physical processes represented, can be used as a junction. - All nodes require a name
NutrientPool - Four nutrient pools are conceptualised for both nitrogen and phosphorus in soil, which includes humus pool, fast pool, dissolved inorganic pool, and dissolved organic pool. Humus and fast pool represent immobile pool of organic nutrients in the soil with slow and fast turnover, respectively. Dissolved inorganic and organic pool represent nutrients in dissolved phase in soil water (for phosphorus, dissolved organic pool might contain particulate phase). Given that phoshphorus can be adsorbed and attached to soil particles, an adsorbed inorganic pool is created specifically for phosphorus.
- The major sources of nutrients to soil are conceptualised as
- atmospheric deposition:
- dry deposition:
- for nitrogen, inorganic fraction of dry deposition is added to the dissovled inorganic pool, while the rest is added to the fast pool;
- for phosphorus, all is added to adsorbed inorganic pool.
- wet deposition: all is added to the dissolved inorganic pool.
- fertilisers: all added to the dissolved inorganic pool.
- manure: the inorganic fraction is added to the dissovled inorganic pool, with the rest added to the fast pool.
- residue: the part with fast turnover is added to the fast pool, with the rest added to the humus pool.
- Nutrient fluxes between these pools are simulated to represent the biochemical processes that can transform the nutrients between different forms. These processes include
- degradation of humus pool to fast pool
- dissolution of humus pool to dissovled organic pool
- mineralisation of fast pool to dissolved inorganic pool
- dissolution of fast pool to dissolved organic pool
- immobilisation of dissolved inroganic pool to fast pool The rate of these processes are affected by the soil temperature and moisture conditions.
- When soil erosion happens, a portion of both the adsorbed inorganic pool and humus pool for phosphorus will be eroded as well.
- fraction_dry_n_to_dissolved_inorganic, fraction_manure_to_dissolved_inorganic, fraction_residue_to_fast. Units: -, all should in [0-1]
- degrhpar, dishpar, minfpar, disfpar, immobdpar. Units: -, all should in [0-1]
PerviousSurface - In IHACRES, the maximum infiltration per time step is controlled by an infiltration capacity, beyond which the precipitation will flow directly as surface runoff.
- Evapotranspiration and effective precipitation are calculated based on soil moisture content.
- Effective precipitation is then divided into percolation, surface runoff, and subsurface runoff by multiplying the corresponding coefficient.
- Percolation, surface runoff, and subsurface runoff are sent into the corresponding residence tanks for rounting to downstream.
- The mass of pollutants in soil water tank proportionately leaves the soil water tank into the routing residence tanks. Evapotranspiration can only bring out water, with pollutants left in the soil tank.
- Field capacity and wilting point. Units: -, both should in [0-1], with field capacity > wilting point
- Infiltration capacity. Units: m/day
- Surface, percolation coefficient. Units: -, both should in [0-1]
- et0 coefficient. Units:
- ihacres_p. Units: -
QueueGroundwater - Conceptualises groundwater as a tank.
- Baseflow is generated following a timearea method.
- Baseflow is sent to storage.py/River, nodes.py/Node or waste.py/Waste nodes.
- No infiltration to sewers is modelled.
- If decays are provided to model water quality transformations, see core.py/DecayObj.
- Groundwater tank capacity, area, and datum. Units: cubic metres, squared metres, metres
- timearea is a dictionary containing the timearea diagram. Units: duration of flow (in timesteps) and proportion of flow
- Optional dictionary of decays with pollutants as keys and decay parameters (a constant and a temperature sensitivity exponent) as values. Units: -
Reservoir - Conceptualised as a Tank.
- Recharged only via pumped abstractions.
- Evaporation/precipitation onto surface area currently ignored.
- If decays are provided to model water quality transformations, see core.py/DecayObj.
- Tank capacity, area, and datum. Units: cubic metres, squared metres, metres
- Optional dictionary of decays with pollutants as keys and decay parameters (a constant and a temperature sensitivity exponent) as values. Units: -
ResidentialDemand - Per capita calculations to generate demand based on population.
- Pollutant concentration of generated demand uses a fixed mass per person per timestep.
- Temperature of generated wastewater is based partially on air temperature and partially on a constant.
- Can interact with land.py/GardenSurface to simulate garden water use.
- population. Units: n
- per_capita. Units: m3/timestep
- data_input_dict should contain air temperature at model timestep. Units: C
RiverReservoir - Conceptualised as a Tank.
- Recharged via pumped abstractions and receives water from inflowing arcs.
- Reservoir aims to satisfy a static environmental_flow.
- If tank capacity is exceeded, reservoir spills downstream towards nodes.py/Node, storage.py/River or waste.py/Waste nodes. Spill counts towards environmental_flow.
- Evaporation/precipitation onto surface area currently ignored.
- Currently, if a reservoir satisfies a pull from a downstream node, it does not count towards environmental_flow.
- If decays are provided to model water quality transformations, see core.py/DecayObj.
- Tank capacity, area, and datum. Units: cubic metres, squared metres, metres
- environmental_flow Units: cubic metres/timestep
- Optional dictionary of decays with pollutants as keys and decay parameters (a constant and a temperature sensitivity exponent) as values. Units: -
River - River is conceptualised as a water tank that receives flows from various sources (e.g., runoffs from urban and rural land, baseflow from groundwater), interacts with water infrastructure (e.g., abstraction for irrigation and domestic supply, sewage and treated effluent discharge), and discharges flows downstream. It has length and width as shape parameters, average velocity to indicate flow speed and capacity to indicate the maximum storage limit.
- Flows from different sources into rivers will fully mix. River tank is assumed to have delay and attenuation effects when generate outflows. These effects are simulated based on the average velocity.
- In-river biochemical processes are simulated as sources/sinks of nutrients in the river tank, including
- denitrification (for nitrogen)
- phytoplankton absorption/release (for nitrogen and phosphorus)
- macrophyte uptake (for nitrogen and phosphorus) These processes are affected by river temperature.
- depth, length, width Units: m
- velocity Units: m/day
- damping coefficient Units:
- minimum required flow Units: m3/day
Sewer - Sewer networks can be represented in an aggregated manner, where the behaviour of collections of manholes/pipes can be captured in a single component.
- Travel time of water received from either land.py/Land objects or demand.py/Demand objects is assumed to be received as a non-point source and thus can be represented with the time-area method.
- Travel time of water from an upstream Sewer object has a fixed travel time through the node.
- The flow capacity of sewer network can be represented as with a Tank.
- The Sewer object is not currently biochemically active.
- pipe_timearea is a dictionary containing the timearea diagram. Units: duration of flow (in timesteps) and proportion of flow
- pipe_time describes the travel time of water received from upstream Sewer objects. Units: number of timesteps
- capacity, chamber_area, chamber_datum describe the dimensions of the Tank that controls flow. Units: cubic metres, squared metres, metres
Surface - Generic Surface that reads data and can apply simple forms of pollution deposition.
- Formulated as a Tank object.
- Ammonia->Nitrite->Nitrate decay takes place if parameters describing this process are provided in decays (see core.py/DecayObj for transformation details).
- data_input_dict can contain a variety of pollutant deposition data. srp-dry describes phosphate. noy-dry describes nitrogen as nitrates. nhx-dry describes nitrogen as ammonia. srp/noy/ nhx-wet can also be used to specify wet deposition. Units: kg/m2/timestep (data is read at a monthly timestep)
UnlimitedDistribution - Water demand is always satisfied. - None
WTW - Throughput can be modelled entirely with a set capacity.
- Pollutant reduction for the entire treatment process can be modelled primarily with a single (temperature sensitive) transformation for each pollutant.
- Liquor and solids are tracked and calculated with proportional multiplier parameters.
- treatment_throughput_capacity Units: cubic metres/timestep
- process_parameters contains the constant (non temperature sensitive) and exponent (temperature sensitive) transformations applied to treated water for each pollutant. Units:
- liquor_multiplier and percent_solids describe the proportion of throughput that goes to liquor/solids.
WWTW - See wtw.py/WTW for treatment.
- When treatment_throughput_capacity is exceeded, water is first sent to a stormwater storage tank before denying pushes. Leftover water in this tank aims to be treated in subsequent timesteps.
- Can be pulled from to simulate active wastewater effluent use.
- See wtw.py/WTW for treatment.
- Stormwater tank capacity, area, and datum. Units: cubic metres, squared metres, metres
Waste - Water 'disappears' (leaves the model) from these nodes. - None