hydrobricks
Loading...
Searching...
No Matches
Snowpack.h
1#ifndef HYDROBRICKS_SNOWPACK_H
2#define HYDROBRICKS_SNOWPACK_H
3
4#include <memory>
5
6#include "Includes.h"
7#include "SnowContainer.h"
8#include "SurfaceComponent.h"
9
10class Snowpack : public SurfaceComponent {
11 public:
12 Snowpack();
13
17 void Reset() override;
18
22 void SaveAsInitialState() override;
23
27 void SetParameters(const BrickSettings& brickSettings) override;
28
32 void AttachFluxIn(Flux* flux) override;
33
37 [[nodiscard]] bool IsValid(bool checkProcesses = true) const override;
38
44 [[nodiscard]] WaterContainer* GetSnowContainer() const;
45
49 void Finalize() override;
50
54 void SetInitialState(double value, ContentType type) override;
55
59 [[nodiscard]] double GetContent(ContentType type) const override;
60
64 void UpdateContent(double value, ContentType type) override;
65
69 void UpdateContentFromInputs(double timeStepInDays = 1.0) override;
70
74 void ResetInputBooking() override;
75
79 void ApplyConstraints(double timeStep) override;
80
84 vecDoublePt GetDynamicContentChanges() override;
85
89 double* GetValuePointer(std::string_view name) override;
90
96 [[nodiscard]] bool HasSnow() const;
97
106 [[nodiscard]] double GetSnowAge() const;
107
108 protected:
109 // Snowfall rate [mm/d] from which the surface counts as fresh snow (age reset).
110 static constexpr double kFreshSnowfallRate = 0.01;
111 // Snow content [mm] below which the snowpack counts as empty (age reset).
112 static constexpr double kEmptySnowContent = 0.01;
113
114 std::unique_ptr<SnowContainer> _snow; // owning
115 double _snowAge = 0; // age of the snow surface [d] since the last snowfall
116 double _initialSnowAge = 0; // snow surface age saved with the initial state [d]
117 double _snowfallInput = 0; // snow inflow of the current time step [mm] (for the age reset)
118};
119
120#endif // HYDROBRICKS_SNOWPACK_H
Definition Flux.h:9
Definition Snowpack.h:10
double * GetValuePointer(std::string_view name) override
Definition Snowpack.cpp:155
void SetInitialState(double value, ContentType type) override
Definition Snowpack.cpp:74
double GetSnowAge() const
Definition Snowpack.cpp:170
void SetParameters(const BrickSettings &brickSettings) override
Definition Snowpack.cpp:24
WaterContainer * GetSnowContainer() const
Definition Snowpack.cpp:59
void ApplyConstraints(double timeStep) override
Definition Snowpack.cpp:138
void Finalize() override
Definition Snowpack.cpp:63
void AttachFluxIn(Flux *flux) override
Definition Snowpack.cpp:28
void UpdateContentFromInputs(double timeStepInDays=1.0) override
Definition Snowpack.cpp:114
void UpdateContent(double value, ContentType type) override
Definition Snowpack.cpp:100
vecDoublePt GetDynamicContentChanges() override
Definition Snowpack.cpp:143
void ResetInputBooking() override
Definition Snowpack.cpp:133
bool HasSnow() const
Definition Snowpack.cpp:166
void Reset() override
Definition Snowpack.cpp:9
bool IsValid(bool checkProcesses=true) const override
Definition Snowpack.cpp:40
double GetContent(ContentType type) const override
Definition Snowpack.cpp:88
void SaveAsInitialState() override
Definition Snowpack.cpp:18
Definition SurfaceComponent.h:10
Definition WaterContainer.h:10
Definition SettingsModel.h:52