1#ifndef HYDROBRICKS_REACH_H
2#define HYDROBRICKS_REACH_H
44 virtual ~Reach() =
default;
84 double RouteUpstream(
double inflowVolume,
double timeStepInDays);
95 double RouteLocal(
double localVolume,
double timeStepInDays);
103 return _routeLocal && _scheme != Scheme::None;
158 [[nodiscard]]
double GetWidth()
const;
213 return _main.subreaches;
241 return _main.storage + _local.storage;
254 vecDouble initialSchedule;
258 double c0 = 1, c1 = 0, c2 = 0;
259 bool instantaneous =
false;
264 vecDouble previousInflow;
265 vecDouble previousOutflow;
266 vecDouble subStorage;
267 vecDouble initialSubStorage;
268 double subreachTimeStep = -1;
271 double initialStorage = 0;
274 double lastTravelTime = -1;
276 double lastTimeStep = -1;
280 Scheme _scheme = Scheme::None;
281 bool _routeLocal =
false;
286 const float* _celerity =
nullptr;
287 const float* _celerityExponent =
nullptr;
288 const float* _referenceDischarge =
nullptr;
289 const float* _x =
nullptr;
290 const float* _width =
nullptr;
291 const float* _manning =
nullptr;
294 double _celerityOverride = NAN_D;
295 double _xOverride = NAN_D;
296 double _widthOverride = NAN_D;
297 double _manningOverride = NAN_D;
315 double RouteBranch(
RoutingState& state,
double volume,
double length,
double timeStepInDays);
317 double RouteLag(
RoutingState& state,
double volume,
double travelTime,
double timeStepInDays);
319 double RouteMuskingum(
RoutingState& state,
double volume,
double travelTime,
double x,
double timeStepInDays);
330 void ComputeCungeParameters(
double dischargeM3s,
double length,
double& travelTime,
double& x)
const;
342 [[nodiscard]]
int ComputeSubreachCount(
double length,
double timeStepInDays)
const;
349 static void SetSubreachCount(
RoutingState& state,
int count);
354 static void ComputeOrdinates(
RoutingState& state,
double travelTime,
double timeStepInDays);
360 void ComputeCoefficients(
RoutingState& state,
double travelTime,
double x,
double timeStepInDays)
const;
Scheme
Definition Reach.h:30
double GetMuskingumX() const
Definition Reach.cpp:152
double RouteLocal(double localVolume, double timeStepInDays)
Definition Reach.cpp:268
double GetCelerityForDischarge(double dischargeM3s) const
Definition Reach.cpp:159
double GetWidth() const
Definition Reach.cpp:131
double GetOutflow() const
Definition Reach.h:231
double GetStorage() const
Definition Reach.h:240
double GetCelerity() const
Definition Reach.cpp:145
static Scheme SchemeFromString(const string &name)
Definition Reach.cpp:27
static string SchemeToString(Scheme scheme)
Definition Reach.cpp:44
bool RoutesLocalRunoff() const
Definition Reach.h:102
void Initialize()
Definition Reach.cpp:57
Scheme GetScheme() const
Definition Reach.h:130
double RouteUpstream(double inflowVolume, double timeStepInDays)
Definition Reach.cpp:261
double GetSlope() const
Definition Reach.h:148
void SaveAsInitialState()
Definition Reach.cpp:489
int GetSubreachCount() const
Definition Reach.h:212
double GetTravelTimeInDays() const
Definition Reach.cpp:186
double GetManning() const
Definition Reach.cpp:138
void Reset()
Definition Reach.cpp:478
Reach(Subbasin *subbasin)
Definition Reach.cpp:22
Subbasin * GetSubbasin() const
Definition Reach.h:121
void SetChannelRouting(const ChannelRoutingSettings &settings)
Definition Reach.cpp:78
double GetLength() const
Definition Reach.h:139
double GetInflow() const
Definition Reach.h:222
Definition SettingsModel.h:23