hydrobricks
Loading...
Searching...
No Matches
GRUnitHydrograph.h
1#ifndef HYDROBRICKS_UNIT_HYDROGRAPH_GR_H
2#define HYDROBRICKS_UNIT_HYDROGRAPH_GR_H
3
4#include <cmath>
5#include <vector>
6
13namespace gr_uh {
14
18inline double SH1(double t, double x4) {
19 if (t <= 0.0) {
20 return 0.0;
21 }
22 if (t >= x4) {
23 return 1.0;
24 }
25 return std::pow(t / x4, 2.5);
26}
27
31inline double SH2(double t, double x4) {
32 if (t <= 0.0) {
33 return 0.0;
34 }
35 if (t >= 2.0 * x4) {
36 return 1.0;
37 }
38 if (t < x4) {
39 return 0.5 * std::pow(t / x4, 2.5);
40 }
41 return 1.0 - 0.5 * std::pow(2.0 - t / x4, 2.5);
42}
43
53inline void ComputeOrdinates(double x4, std::vector<double>& uh1Ord, std::vector<double>& uh2Ord) {
54 if (x4 <= 0.0) {
55 x4 = 0.5;
56 }
57 int n1 = static_cast<int>(std::ceil(x4));
58 int n2 = static_cast<int>(std::ceil(2.0 * x4));
59
60 uh1Ord.resize(n1);
61 for (int j = 1; j <= n1; ++j) {
62 uh1Ord[j - 1] = SH1(static_cast<double>(j), x4) - SH1(static_cast<double>(j - 1), x4);
63 }
64
65 uh2Ord.resize(n2);
66 for (int j = 1; j <= n2; ++j) {
67 uh2Ord[j - 1] = SH2(static_cast<double>(j), x4) - SH2(static_cast<double>(j - 1), x4);
68 }
69}
70
71} // namespace gr_uh
72
73#endif // HYDROBRICKS_UNIT_HYDROGRAPH_GR_H
Definition GRUnitHydrograph.h:13
double SH2(double t, double x4)
Definition GRUnitHydrograph.h:31
void ComputeOrdinates(double x4, std::vector< double > &uh1Ord, std::vector< double > &uh2Ord)
Definition GRUnitHydrograph.h:53
double SH1(double t, double x4)
Definition GRUnitHydrograph.h:18