OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
SnowModel.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Caleb Buahin
3
12
13#pragma once
14namespace openswmm {
16}
17namespace openswmm::surface {
23struct SnowInputs {
24 double dt_s = 0, rain_m = 0, snow_m = 0, Ta_C = 0, wind_ms = 0;
25 double rh = 0, Qsi = 0, Qli = 0, Qg = 0, cos_psi_avg = 0, hri = 0;
26 // Existing climate coefficients for degree-day rain-on-snow; passed
27 // through unchanged on the legacy batch boundary (F^-1 and in Hg).
28 double gamma = 0, ea = 0;
29};
30
36 double melt_m = 0, throughfall_m = 0, sublim_m = 0, swe_m = 0, cover_frac = 0;
37 double Ts_C = 0, T_C = 0, albedo = 0, energy_kJm2 = 0;
38};
39
44class SnowModel {
45public:
48 virtual ~SnowModel() = default;
53 virtual void initializeElements(int n) = 0;
61 virtual void step(int e, const SnowInputs& input, SnowOutputs& output) = 0;
65 virtual int stateSize() const = 0;
71 virtual void pack(int e, double* output) const = 0;
77 virtual void unpack(int e, const double* input) = 0;
78 // Existing subcatchments use this native-unit batch boundary to preserve
79 // operation order and inter-subcatchment plowing. SI elements use step().
92 virtual void execute(SimulationContext& context, double dt_s, double temp_F, double wind_mph,
93 const double* rain_ft_s, const double* snow_ft_s, double gamma,
94 double ea) = 0;
102 virtual void plowSnow(SimulationContext& context, double dt_s, const double* snow_ft_s) = 0;
103};
104}
Polymorphic point and native-batch snow boundary. One owner serializes state mutation and buffer use....
Definition SnowModel.hpp:44
virtual int stateSize() const =0
Read the element payload length expected by pack/unpack.
virtual void unpack(int e, const double *input)=0
Restore one matching model's element payload.
virtual void plowSnow(SimulationContext &context, double dt_s, const double *snow_ft_s)=0
Accumulate and redistribute native batch snowfall through derived lifecycle.
virtual void pack(int e, double *output) const =0
Copy one model's element payload into a caller buffer.
virtual ~SnowModel()=default
Destroy derived owned snow state through the base interface. Caller ends all active callbacks/borrows...
virtual void initializeElements(int n)=0
Allocate/reset model-specific storage for point elements.
virtual void step(int e, const SnowInputs &input, SnowOutputs &output)=0
Advance one model element through its SI point boundary.
virtual void execute(SimulationContext &context, double dt_s, double temp_F, double wind_mph, const double *rain_ft_s, const double *snow_ft_s, double gamma, double ea)=0
Execute the native subcatchment batch boundary for legacy arithmetic/order.
Definition CatchmentHandler.cpp:70
Definition GroundHeat.hpp:19
Definition ExchangeLaw.hpp:60
Central, reentrant simulation context.
Definition SimulationContext.hpp:390
One element's interval weather, with SI point-input units. dt_s is seconds; rain_m/snow_m are interva...
Definition SnowModel.hpp:23
double dt_s
Definition SnowModel.hpp:24
double wind_ms
Definition SnowModel.hpp:24
double rain_m
Definition SnowModel.hpp:24
double Ta_C
Definition SnowModel.hpp:24
double Qsi
Definition SnowModel.hpp:25
double Qli
Definition SnowModel.hpp:25
double ea
Definition SnowModel.hpp:28
double gamma
Definition SnowModel.hpp:28
double cos_psi_avg
Definition SnowModel.hpp:25
double snow_m
Definition SnowModel.hpp:24
double hri
Definition SnowModel.hpp:25
double rh
Definition SnowModel.hpp:25
double Qg
Definition SnowModel.hpp:25
Point snow results: interval depths metres and model-specific thermal state. melt_m can include pack ...
Definition SnowModel.hpp:35
double cover_frac
Definition SnowModel.hpp:36
double melt_m
Definition SnowModel.hpp:36
double swe_m
Definition SnowModel.hpp:36
double sublim_m
Definition SnowModel.hpp:36
double throughfall_m
Definition SnowModel.hpp:36
double albedo
Definition SnowModel.hpp:37
double energy_kJm2
Definition SnowModel.hpp:37
double Ts_C
Definition SnowModel.hpp:37
double T_C
Definition SnowModel.hpp:37