hydrobricks
Loading...
Searching...
No Matches
ProcessLateralSnowRedistributionFrey.h
Go to the documentation of this file.
1
8#ifndef HYDROBRICKS_PROCESS_LATERAL_SNOW_REDISTRIBUTION_FREY_H
9#define HYDROBRICKS_PROCESS_LATERAL_SNOW_REDISTRIBUTION_FREY_H
10
11#include "ProcessLateral.h"
12
13class FluxToBrick;
14class Forcing;
15
39 public:
40 explicit ProcessLateralSnowRedistributionFrey(WaterContainer* container, bool dynamicDensity = false);
41
42 ~ProcessLateralSnowRedistributionFrey() override = default;
43
47 [[nodiscard]] bool IsValid() const override;
48
54 static void RegisterProcessSettings(SettingsModel* modelSettings);
55
61 static void RegisterProcessSettingsDynamic(SettingsModel* modelSettings);
62
66 void SetHydroUnitProperties(HydroUnit* unit, Brick* brick) override;
67
71 void SetParameters(const ProcessSettings& processSettings) override;
72
76 void AttachForcing(Forcing* forcing) override;
77
81 void Reset() override;
82
86 void Finalize() override;
87
91 [[nodiscard]] bool IsLateralProcess() const noexcept override {
92 return true;
93 }
94
95 protected:
96 bool _dynamicDensity; // Whether the snow density evolves dynamically
97 float _slopeDeg; // Slope of the hydro unit [°]
98 Forcing* _temperature; // Air temperature forcing (dynamic variant only)
99 const float* _correction; // Correction coefficient C []
100 const float* _holdingCapacity; // Land-cover snow holding capacity H_v (as a snow depth) [mm]
101 const float* _rhoMax; // Maximum snow density for redistribution [kg/m3]
102 const float* _maxSnowDepth; // Maximum snow depth (over-accumulation guard) [mm]
103 const float* _snowDensity; // Constant snow density (constant variant) [kg/m3]
104 const float* _rhoMin; // Minimum snow density (dynamic variant) [kg/m3]
105 const float* _rhoFreshMax; // Maximum fresh-snow density (dynamic variant) [kg/m3]
106 const float* _rhoSettling; // Settling rate toward rhoMax (dynamic variant) [1/day]
107 const float* _rhoScale; // Density sigmoid slope coefficient (dynamic variant) []
108 const float* _tScale; // Density sigmoid shift coefficient (dynamic variant) [°C]
109 double _density; // Tracked bulk snow density (dynamic variant) [kg/m3]
110 double _prevSwe; // Committed SWE at the previous time step (dynamic variant) [mm]
111
115 const vecDouble& GetRates() override;
116
117 private:
124 [[nodiscard]] double GetSnowDensity() const;
125
131 [[nodiscard]] double ComputeFreshSnowDensity() const;
132
141 double AvoidUnrealisticAccumulation(double rate, Flux* flux);
142};
143
144#endif // HYDROBRICKS_PROCESS_LATERAL_SNOW_REDISTRIBUTION_FREY_H
Definition Brick.h:22
Definition FluxToBrick.h:9
Definition Flux.h:9
Definition Forcing.h:7
Definition HydroUnit.h:18
Definition ProcessLateralSnowRedistributionFrey.h:38
void AttachForcing(Forcing *forcing) override
Definition ProcessLateralSnowRedistributionFrey.cpp:85
bool IsValid() const override
Definition ProcessLateralSnowRedistributionFrey.cpp:34
void Finalize() override
Definition ProcessLateralSnowRedistributionFrey.cpp:109
static void RegisterProcessSettingsDynamic(SettingsModel *modelSettings)
Definition ProcessLateralSnowRedistributionFrey.cpp:51
const vecDouble & GetRates() override
Definition ProcessLateralSnowRedistributionFrey.cpp:149
bool IsLateralProcess() const noexcept override
Definition ProcessLateralSnowRedistributionFrey.h:91
void SetHydroUnitProperties(HydroUnit *unit, Brick *brick) override
Definition ProcessLateralSnowRedistributionFrey.cpp:64
void SetParameters(const ProcessSettings &processSettings) override
Definition ProcessLateralSnowRedistributionFrey.cpp:68
void Reset() override
Definition ProcessLateralSnowRedistributionFrey.cpp:93
static void RegisterProcessSettings(SettingsModel *modelSettings)
Definition ProcessLateralSnowRedistributionFrey.cpp:43
Definition ProcessLateral.h:8
Definition SettingsModel.h:70
Definition WaterContainer.h:9
Definition SettingsModel.h:30