hydrobricks
Loading...
Searching...
No Matches
Logger.h
1#ifndef HYDROBRICKS_LOGGER_H
2#define HYDROBRICKS_LOGGER_H
3
4#include "Includes.h"
5#include "SettingsModel.h"
6#include "Subbasin.h"
7
13class Logger {
14 public:
15 explicit Logger();
16
17 virtual ~Logger() = default;
18
26 void InitContainers(int timeSize, const std::vector<Subbasin*>& subbasins, SettingsModel& modelSettings);
27
31 void Reset();
32
40 void SetSubbasinValuePointer(int iSubbasin, int iLabel, double* valPt);
41
49 void SetHydroUnitValuePointer(int iUnit, int iLabel, double* valPt);
50
58 void SetHydroUnitFractionPointer(int iUnit, int iLabel, double* valPt);
59
68 void SetHydroUnitLabelBasis(int iLabel, const string& basis);
69
75 void SetDate(double date);
76
80 void SaveInitialValues();
81
85 void Record();
86
90 void Increment();
91
98 bool DumpOutputs(const string& path);
99
106 [[nodiscard]] axd GetOutletDischarge() const;
107
114 [[nodiscard]] axd GetSubbasinDischarge(int subbasinId) const;
115
122 [[nodiscard]] vecInt GetIndicesForSubbasinElements(const string& item) const;
123
130 [[nodiscard]] vecInt GetIndicesForHydroUnitElements(const string& item) const;
131
139 [[nodiscard]] double GetTotalSubbasin(const string& item) const;
140
148 [[nodiscard]] double GetTotalHydroUnits(const string& item, bool needsAreaWeighting = false) const;
149
155 [[nodiscard]] double GetTotalOutletDischarge() const;
156
162 [[nodiscard]] double GetTotalET() const;
163
170 [[nodiscard]] double GetSubbasinInitialStorageState(const string& tag) const;
171
178 [[nodiscard]] double GetSubbasinFinalStorageState(const string& tag) const;
179
191 [[nodiscard]] int GetFractionIndexForComponent(const string& componentName) const;
192
199 [[nodiscard]] double GetHydroUnitsInitialStorageState(const string& tag) const;
200
207 [[nodiscard]] double GetHydroUnitsFinalStorageState(const string& tag) const;
208
214 [[nodiscard]] double GetTotalWaterStorageChanges() const;
215
221 [[nodiscard]] double GetTotalSnowStorageChanges() const;
222
228 [[nodiscard]] double GetTotalGlacierStorageChanges() const;
229
235 [[nodiscard]] vecAxd GetSubbasinValues() const;
236
243 const vecAxxd& GetSubbasinValuesPerSubbasin() const {
244 return _subbasinValues;
245 }
246
252 const vecAxxd& GetHydroUnitValues() const {
253 return _hydroUnitValues;
254 }
255
261 const axd& GetTime() const {
262 return _time;
263 }
264
270 const vecInt& GetSubbasinIds() const {
271 return _subbasinIds;
272 }
273
279 const vecInt& GetSubbasinDownstreamIds() const {
280 return _subbasinDownstreamIds;
281 }
282
288 const vecInt& GetSubbasinStructureIds() const {
289 return _subbasinStructureIds;
290 }
291
297 const axd& GetSubbasinLocalAreas() const {
298 return _subbasinLocalAreas;
299 }
300
306 const axd& GetSubbasinDrainedAreas() const {
307 return _subbasinDrainedAreas;
308 }
309
315 [[nodiscard]] int GetSubbasinCount() const {
316 return static_cast<int>(_subbasinIds.size());
317 }
318
324 const vecInt& GetHydroUnitIds() const {
325 return _hydroUnitIds;
326 }
327
333 const axd& GetHydroUnitAreas() const {
334 return _hydroUnitAreas;
335 }
336
342 const vecStr& GetSubbasinLabels() const {
343 return _subbasinLabels;
344 }
345
351 const vecStr& GetHydroUnitLabels() const {
352 return _hydroUnitLabels;
353 }
354
360 const vecStr& GetHydroUnitFractionLabels() const {
361 return _hydroUnitFractionLabels;
362 }
363
369 const vecAxxd& GetHydroUnitFractions() const {
370 return _hydroUnitFractions;
371 }
372
378 const vecStr& GetHydroUnitLabelBases() const {
379 return _hydroUnitLabelBases;
380 }
381
387 const axd& GetHydroUnitSubbasinFractions() const {
388 return _hydroUnitSubbasinFractions;
389 }
390
395 _recordFractions = true;
396 }
397
404 void AddSubbasinEtIndex(int iLabel);
405
411 void AddHydroUnitEtIndex(int iLabel) {
412 _hydroUnitEtIndices.push_back(iLabel);
413 }
414
415 protected:
416 int _cursor;
417 axd _time;
418 bool _recordFractions;
419 vecInt _subbasinIds; // processing order, the outlet last
420 vecInt _subbasinDownstreamIds;
421 vecInt _subbasinStructureIds;
422 axd _subbasinLocalAreas;
423 axd _subbasinDrainedAreas;
424 axd _subbasinWeights; // local area / catchment area, to sum subbasin values over the catchment
425 int _outletIndex; // index of the terminal subbasin
426 vecStr _subbasinLabels;
427 vecAxd _subbasinInitialValues; // [label](subbasins)
428 vecAxxd _subbasinValues; // [label](time x subbasins)
429 vector<vecDoublePt> _subbasinValuesPt; // [label][subbasin]
430 vecInt _hydroUnitIds;
431 vecInt _hydroUnitStructureIds;
432 axd _hydroUnitAreas;
433 vecStr _hydroUnitLabels;
434 vecStr _hydroUnitLabelBases; // [label] area the values are expressed over
435 axd _hydroUnitSubbasinFractions; // [unit] unit area / subbasin area
436 vecAxd _hydroUnitInitialValues;
437 vecAxxd _hydroUnitValues;
438 vector<vecDoublePt> _hydroUnitValuesPt;
439 vecStr _hydroUnitFractionLabels;
440 vecAxxd _hydroUnitFractions;
441 vector<vecDoublePt> _hydroUnitFractionsPt;
442 vecInt _subbasinEtIndices; // indices into _subbasinValues that are ET (to-atmosphere) fluxes
443 vecInt _hydroUnitEtIndices; // indices into _hydroUnitValues that are ET (to-atmosphere) fluxes
444
445 private:
452 [[nodiscard]] double WeightedTotal(int iLabel) const;
453
460 [[nodiscard]] int GetSubbasinIndex(int subbasinId) const;
461
467 [[nodiscard]] int GetOutletLabelIndex() const;
468};
469
470#endif // HYDROBRICKS_LOGGER_H
Definition Logger.h:13
const vecAxxd & GetHydroUnitFractions() const
Definition Logger.h:369
const vecStr & GetHydroUnitLabelBases() const
Definition Logger.h:378
void RecordFractions()
Definition Logger.h:394
void SetSubbasinValuePointer(int iSubbasin, int iLabel, double *valPt)
Definition Logger.cpp:97
int GetSubbasinCount() const
Definition Logger.h:315
bool DumpOutputs(const string &path)
Definition Logger.cpp:191
const vecInt & GetSubbasinIds() const
Definition Logger.h:270
void AddHydroUnitEtIndex(int iLabel)
Definition Logger.h:411
vecInt GetIndicesForHydroUnitElements(const string &item) const
Definition Logger.cpp:250
void Reset()
Definition Logger.cpp:93
const vecInt & GetHydroUnitIds() const
Definition Logger.h:324
const vecAxxd & GetSubbasinValuesPerSubbasin() const
Definition Logger.h:243
double GetTotalET() const
Definition Logger.cpp:334
double GetTotalSubbasin(const string &item) const
Definition Logger.cpp:274
void Record()
Definition Logger.cpp:154
double GetHydroUnitsFinalStorageState(const string &tag) const
Definition Logger.cpp:416
const axd & GetHydroUnitAreas() const
Definition Logger.h:333
void Increment()
Definition Logger.cpp:187
double GetTotalHydroUnits(const string &item, bool needsAreaWeighting=false) const
Definition Logger.cpp:284
double GetTotalGlacierStorageChanges() const
Definition Logger.cpp:445
const vecInt & GetSubbasinDownstreamIds() const
Definition Logger.h:279
const vecStr & GetSubbasinLabels() const
Definition Logger.h:342
double GetTotalSnowStorageChanges() const
Definition Logger.cpp:440
const axd & GetSubbasinDrainedAreas() const
Definition Logger.h:306
void SetDate(double date)
Definition Logger.cpp:128
const axd & GetTime() const
Definition Logger.h:261
void SetHydroUnitFractionPointer(int iUnit, int iLabel, double *valPt)
Definition Logger.cpp:114
void SetHydroUnitLabelBasis(int iLabel, const string &basis)
Definition Logger.cpp:109
const vecAxxd & GetHydroUnitValues() const
Definition Logger.h:252
double GetSubbasinFinalStorageState(const string &tag) const
Definition Logger.cpp:387
const vecStr & GetHydroUnitFractionLabels() const
Definition Logger.h:360
void SetHydroUnitValuePointer(int iUnit, int iLabel, double *valPt)
Definition Logger.cpp:103
const vecInt & GetSubbasinStructureIds() const
Definition Logger.h:288
double GetSubbasinInitialStorageState(const string &tag) const
Definition Logger.cpp:377
double GetTotalOutletDischarge() const
Definition Logger.cpp:328
double GetHydroUnitsInitialStorageState(const string &tag) const
Definition Logger.cpp:398
int GetFractionIndexForComponent(const string &componentName) const
Definition Logger.cpp:366
const axd & GetSubbasinLocalAreas() const
Definition Logger.h:297
vecInt GetIndicesForSubbasinElements(const string &item) const
Definition Logger.cpp:238
axd GetSubbasinDischarge(int subbasinId) const
Definition Logger.cpp:234
const axd & GetHydroUnitSubbasinFractions() const
Definition Logger.h:387
void SaveInitialValues()
Definition Logger.cpp:133
vecAxd GetSubbasinValues() const
Definition Logger.cpp:221
const vecStr & GetHydroUnitLabels() const
Definition Logger.h:351
void InitContainers(int timeSize, const std::vector< Subbasin * > &subbasins, SettingsModel &modelSettings)
Definition Logger.cpp:21
void AddSubbasinEtIndex(int iLabel)
Definition Logger.cpp:122
double GetTotalWaterStorageChanges() const
Definition Logger.cpp:435
axd GetOutletDischarge() const
Definition Logger.cpp:230
Definition SettingsModel.h:87