13#ifndef OPENSWMM_SOURCE_WATER_DRIVER_HPP
14#define OPENSWMM_SOURCE_WATER_DRIVER_HPP
47 std::vector<std::array<double, 4>>
layers;
129 using
BottomCeiling = std::function<
double(
int type,
int unit,
double start,
double end)>;
160 const std::vector<std::pair<
int,
double>>& non_lid_areas = {},
162 bool hydraulic_returns =
false);
189 std::string
creditSurfaceReturns(
double start,
const std::vector<SourceSurfaceReturn>& returns);
237 std::string
stage(
int group,
double end,
double completed_through,
296 const std::vector<SourceWaterLedger>&
ledgers(
bool trial =
false)
const;
304 const std::vector<SourceWaterDelivery>&
deliveries(
bool trial =
false)
const;
312 const std::vector<SourceAtmosphericLedger>&
atmosphere(
bool trial =
false)
const;
325 const std::vector<SourcePollutantLedger>&
pollutants(
bool trial =
false)
const;
373 std::unique_ptr<State> state_, trial_;
375 int pending_group_ = -1;
381 const State& view(
bool trial)
const;
387 double storage(
const State& state,
int source)
const;
Low Impact Development (LID) control modules.
Scheduling of water sources with common integration clocks.
Snow processes associated with hydrological source owners.
Definition CompletedSourceArchive.hpp:25
Definition CompletedSourceArchive.hpp:25
Owned three-pool non-LID reservoir, native soil state and completed routing history....
Definition Runoff.hpp:195
std::function< bool(int, double, double, double &)> InfiltrationBoundary
Definition Runoff.hpp:204
Definition SourceClockGroups.hpp:54
double storedVolume(int source) const
Sum accepted physical runoff/LID stored water for one source.
Definition SourceWaterDriver.cpp:508
const std::vector< SourceOutfallReturn > & pendingOutfallReturns() const
Borrow accepted hydraulic receipts waiting for their source clock.
Definition SourceWaterDriver.cpp:396
const std::vector< double > & spatialFractions() const
Borrow accepted per-source inside physical-area fractions.
Definition SourceWaterDriver.cpp:331
void checkpoint(detail::CompletedSourceArchive &archive, bool model)
Stream private native model or accepted runtime source histories.
Definition SourceWaterDriver.cpp:1113
double balanceResidual(int group, bool trial=false) const
Read balanceResidual for one selected source-clock group.
Definition SourceWaterDriver.cpp:512
void cancel()
Drop an active water trial and its tracked pending group forcing. Retains accepted water/histories an...
Definition SourceWaterDriver.cpp:1107
~SourceWaterDriver()
Release private accepted/trial histories without committing a pending trial. Borrowed state/kernel/le...
double pendingPollutantMass(int group, int pollutant, bool trial=false) const
Read pendingPollutantMass for one selected source-clock group.
Definition SourceWaterDriver.cpp:468
std::string initialize(const SimulationContext &context, const std::vector< int > &seeds, const std::vector< std::pair< int, double > > &non_lid_areas={}, const lid::LIDSolver *initial_lids=nullptr, bool hydraulic_returns=false)
Build private source kernels/ledgers from a simulation-start model snapshot.
Definition SourceWaterDriver.cpp:522
std::string configureSpatialCoverage(const std::vector< double > &inside_fractions)
Bind uniform inside fractions once before any source advancement.
Definition SourceWaterDriver.cpp:334
double pollutantBalanceResidual(int group, int pollutant, bool trial=false) const
Read pollutantBalanceResidual for one selected source-clock group.
Definition SourceWaterDriver.cpp:454
const lid::LIDSolver & lids(bool trial=false) const
Borrow trial or accepted lids state without copying it.
Definition SourceWaterDriver.cpp:436
std::string creditSurfaceReturns(double start, const std::vector< SourceSurfaceReturn > &returns)
Validate and queue paired aquifer-return water/mass before source trials.
Definition SourceWaterDriver.cpp:349
double pendingVolume(int group, bool trial=false) const
Read pendingVolume for one selected source-clock group.
Definition SourceWaterDriver.cpp:495
std::string stage(int group, double end, double completed_through, const RunoffSolver::InfiltrationBoundary *boundary=nullptr, const BottomCeiling *bottom_ceiling=nullptr, const ForcingTransform *forcing=nullptr)
Advance one source group into a private completed-interval trial.
Definition SourceWaterDriver.cpp:1008
SourceWaterDriver waterTrial() const
Copy committed water, kernels, ledgers and clocks for an independent trial.
Definition SourceWaterDriver.cpp:312
std::string creditOutfallReturns(double start, double end, const std::vector< double > &volumes)
Queue one explicitly accepted hydraulic-return interval exactly once.
Definition SourceWaterDriver.cpp:399
const std::vector< SourceWaterDelivery > & deliveries(bool trial=false) const
Borrow trial or accepted deliveries state without copying it.
Definition SourceWaterDriver.cpp:442
double outfallReturnEnd() const
Read the last credited accepted hydraulic-return endpoint.
Definition SourceWaterDriver.cpp:393
SourceWaterDriver()
Construct an uninitialized driver without source state or IO. Most data accessors require successful ...
const std::vector< SourceAtmosphericLedger > & atmosphere(bool trial=false) const
Borrow trial or accepted atmosphere state without copying it.
Definition SourceWaterDriver.cpp:445
const SourceClockGroups & clocks() const
Borrow source membership, accepted endpoints and staged forcing clocks.
Definition SourceWaterDriver.hpp:256
const std::vector< SourcePollutantLedger > & pollutants(bool trial=false) const
Borrow trial or accepted pollutants state without copying it.
Definition SourceWaterDriver.cpp:451
const std::vector< std::string > & pollutantNames() const
Borrow ordered active source-pollutant identifiers from accepted state.
Definition SourceWaterDriver.cpp:448
const SimulationContext & context(bool trial=false) const
Borrow trial or accepted context state without copying it.
Definition SourceWaterDriver.cpp:430
std::string commit()
Adopt staged private water and its source-group endpoint together.
Definition SourceWaterDriver.cpp:1096
const std::vector< SourceWaterLedger > & ledgers(bool trial=false) const
Borrow trial or accepted ledgers state without copying it.
Definition SourceWaterDriver.cpp:439
std::function< void(SourceForcingInterval &)> ForcingTransform
Synchronous transform of a private resolved forcing-segment copy. Caller supplies completed-interval ...
Definition SourceWaterDriver.hpp:135
bool acceptsOutfallReturns() const
Read whether explicit water-only hydraulic receipts were enabled.
Definition SourceWaterDriver.cpp:390
std::function< double(int type, int unit, double start, double end)> BottomCeiling
Synchronous LID bottom-capacity callback; caller-owned, never retained. Receives LID type/group and u...
Definition SourceWaterDriver.hpp:129
SourceWaterDriver(SourceWaterDriver &&) noexcept
Move owned accepted/trial histories and source clocks without copying water. Transfers pending-group ...
Per-source-group native/UEB snow ownership and cumulative water balance. Liquid source delivery,...
Definition SourceSnow.hpp:38
Definition OutfallExchange.hpp:17
Definition ExplicitInertialSolver.hpp:68
SourceEtKind
Definition SourceWaterDriver.hpp:64
@ IMPERVIOUS
Definition SourceWaterDriver.hpp:64
@ LID
Definition SourceWaterDriver.hpp:64
@ PERVIOUS
Definition SourceWaterDriver.hpp:64
Definition DegreeDaySnow.cpp:36
Central, reentrant simulation context.
Definition SimulationContext.hpp:390
Definition SourceWaterDriver.hpp:65
SourceEtKind kind
Definition SourceWaterDriver.hpp:66
int source
Definition SourceWaterDriver.hpp:67
int type
Definition SourceWaterDriver.hpp:67
double area
Definition SourceWaterDriver.hpp:68
bool soil_eligible
Definition SourceWaterDriver.hpp:69
double evaporation
Definition SourceWaterDriver.hpp:70
double potential
Definition SourceWaterDriver.hpp:70
int unit
Definition SourceWaterDriver.hpp:67
Piecewise-constant forcing over [start,end) in elapsed seconds. month is zero-based; infil_factor/rec...
Definition SourceClockGroups.hpp:32
Definition SourceWaterDriver.hpp:60
double available
Definition SourceWaterDriver.hpp:62
double volume
Definition SourceWaterDriver.hpp:62
int source
Definition SourceWaterDriver.hpp:61
Definition SourceWaterDriver.hpp:45
int unit
Definition SourceWaterDriver.hpp:46
int type
Definition SourceWaterDriver.hpp:46
std::vector< double > outside_infiltration
Definition SourceWaterDriver.hpp:48
std::vector< double > surface_mass
Definition SourceWaterDriver.hpp:49
std::vector< double > impervious_mass
Definition SourceWaterDriver.hpp:50
std::vector< double > aquifer_return
Definition SourceWaterDriver.hpp:51
std::vector< double > outlet
Definition SourceWaterDriver.hpp:48
int source
Definition SourceWaterDriver.hpp:46
std::vector< std::array< double, 4 > > layers
Definition SourceWaterDriver.hpp:47
std::vector< double > pending_routing
Definition SourceWaterDriver.hpp:52
std::vector< double > drain_mass
Definition SourceWaterDriver.hpp:49
std::vector< double > spatial_infiltration
Definition SourceWaterDriver.hpp:48
std::vector< double > removed
Definition SourceWaterDriver.hpp:48
std::vector< double > incoming
Definition SourceWaterDriver.hpp:53
std::vector< double > pervious_mass
Definition SourceWaterDriver.hpp:50
std::vector< double > rain
Definition SourceWaterDriver.hpp:48
Definition SourceWaterDriver.hpp:55
int type
Definition SourceWaterDriver.hpp:56
int source
Definition SourceWaterDriver.hpp:56
std::vector< double > mass
Definition SourceWaterDriver.hpp:58
int pool
Definition SourceWaterDriver.hpp:56
double volume
Definition SourceWaterDriver.hpp:57
int unit
Definition SourceWaterDriver.hpp:56
Definition SourceWaterDriver.hpp:35
double end
Definition SourceWaterDriver.hpp:37
double volume
Definition SourceWaterDriver.hpp:37
bool drain
Definition SourceWaterDriver.hpp:38
std::vector< double > mass
Definition SourceWaterDriver.hpp:39
int source
Definition SourceWaterDriver.hpp:36
double start
Definition SourceWaterDriver.hpp:37
int node
Definition SourceWaterDriver.hpp:36
Definition SourceWaterDriver.hpp:27
double evaporation
Definition SourceWaterDriver.hpp:28
double initial_storage
Definition SourceWaterDriver.hpp:28
double spatial_infiltration
Completed destination split, ft3; sum equals infiltration.
Definition SourceWaterDriver.hpp:30
double aquifer_return
Definition SourceWaterDriver.hpp:31
double captured
Definition SourceWaterDriver.hpp:33
double outlet
Definition SourceWaterDriver.hpp:33
double infiltration
Definition SourceWaterDriver.hpp:28
double pervious_return
Definition SourceWaterDriver.hpp:33
double rain
Definition SourceWaterDriver.hpp:28
double outfall_return
Definition SourceWaterDriver.hpp:32
double outside_infiltration
Definition SourceWaterDriver.hpp:30
double runon
Definition SourceWaterDriver.hpp:33