hydrobricks
Loading...
Searching...
No Matches
ModelBuilder.h
1#ifndef HYDROBRICKS_MODEL_BUILDER_H
2#define HYDROBRICKS_MODEL_BUILDER_H
3
4#include <set>
5#include <vector>
6
7#include "Includes.h"
8
9class SettingsModel;
10class SettingsBasin;
11class Subbasin;
12class HydroUnit;
13class Brick;
14class Process;
15class Splitter;
16class TimeMachine;
17class Logger;
18struct BrickSettings;
19struct ProcessSettings;
20struct SplitterSettings;
21
23 public:
31 ModelBuilder(Subbasin* subbasin, TimeMachine* timer, Logger* logger, int subbasinIndex = 0, int unitOffset = 0);
32
41 void AssignHydroUnitStructures(SettingsModel& modelSettings, SettingsBasin& basinSettings);
42
51 void AssignSubbasinStructure(SettingsModel& modelSettings, SettingsBasin& basinSettings);
52
60 void BuildModelStructure(SettingsModel& modelSettings);
61
68 void UpdateSubbasinParameters(SettingsModel& modelSettings);
69
77 void UpdateHydroUnitsParameters(SettingsModel& modelSettings);
78
85 void ConnectLoggerToValues(SettingsModel& modelSettings);
86
87 private:
88 Subbasin* _subbasin;
89 TimeMachine* _timer;
90 Logger* _logger;
91 int _subbasinIndex; // index of the subbasin in the logger
92 int _unitOffset; // index of the subbasin's first hydro unit in the logger
93
97 static std::vector<std::set<string>> StructureLandCovers(SettingsModel& modelSettings);
98
103 static int MatchStructure(const std::vector<std::set<string>>& structureCovers, const std::set<string>& present);
104
105 void CreateSubbasinComponents(SettingsModel& modelSettings);
106 void CreateHydroUnitsComponents(SettingsModel& modelSettings);
107 void CreateHydroUnitBrick(SettingsModel& modelSettings, HydroUnit* unit, int iBrick);
108 void PopulateSpatialOverrides(SettingsModel& modelSettings, HydroUnit* unit, const string& brickName);
109 void LinkSurfaceComponentsParents(SettingsModel& modelSettings, HydroUnit* unit);
110 void LinkAreaFractions(SettingsModel& modelSettings, HydroUnit* unit);
111 void LinkSubbasinProcessesTargetBricks(SettingsModel& modelSettings);
112 void LinkHydroUnitProcessesTargetBricks(SettingsModel& modelSettings, HydroUnit* unit);
113 std::vector<Brick*> FindLandCoversFeeding(const string& targetName, HydroUnit* unit, SettingsModel& modelSettings);
114 void BuildForcingConnections(const BrickSettings& brickSettings, HydroUnit* unit, Brick* brick);
115 void BuildForcingConnections(const ProcessSettings& processSettings, HydroUnit* unit, Process* process);
116 void BuildForcingConnections(const SplitterSettings& splitterSettings, HydroUnit* unit, Splitter* splitter);
117 void BuildSubbasinBricksFluxes(SettingsModel& modelSettings);
118 void BuildHydroUnitBricksFluxes(SettingsModel& modelSettings, HydroUnit* unit);
119 void BuildSubbasinSplittersFluxes(SettingsModel& modelSettings);
120 void BuildHydroUnitSplittersFluxes(SettingsModel& modelSettings, HydroUnit* unit);
121};
122
123#endif // HYDROBRICKS_MODEL_BUILDER_H
Definition Brick.h:22
Definition HydroUnit.h:18
Definition Logger.h:13
Definition ModelBuilder.h:22
void AssignHydroUnitStructures(SettingsModel &modelSettings, SettingsBasin &basinSettings)
Definition ModelBuilder.cpp:87
void UpdateHydroUnitsParameters(SettingsModel &modelSettings)
Definition ModelBuilder.cpp:307
void BuildModelStructure(SettingsModel &modelSettings)
Definition ModelBuilder.cpp:139
void ConnectLoggerToValues(SettingsModel &modelSettings)
Definition ModelBuilder.cpp:864
ModelBuilder(Subbasin *subbasin, TimeMachine *timer, Logger *logger, int subbasinIndex=0, int unitOffset=0)
Definition ModelBuilder.cpp:27
void AssignSubbasinStructure(SettingsModel &modelSettings, SettingsBasin &basinSettings)
Definition ModelBuilder.cpp:114
void UpdateSubbasinParameters(SettingsModel &modelSettings)
Definition ModelBuilder.cpp:284
Definition Process.h:16
Definition SettingsBasin.h:62
Definition SettingsModel.h:87
Definition Splitter.h:13
Definition Subbasin.h:17
Definition TimeMachine.h:9
Definition SettingsModel.h:64
Definition SettingsModel.h:44
Definition SettingsModel.h:55