OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
SurfaceSpeciesKernel.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
25
26#ifndef OPENSWMM_ENGINE_QUALITY_SURFACE_SPECIES_KERNEL_HPP
27#define OPENSWMM_ENGINE_QUALITY_SURFACE_SPECIES_KERNEL_HPP
28
29#include <cstddef>
30#include <cstdint>
31#include <vector>
32
33#include "Landuse.hpp"
34
35namespace openswmm {
37namespace surfacespecies {
38
42struct Block {
43 int n = 0;
44 int nlu = 0;
45 const std::vector<landuse::BuildupParams>* bu_params = nullptr;
46 const std::vector<landuse::WashoffParams>* wo_params = nullptr;
47 std::vector<double>* buildup = nullptr;
48 std::vector<double>* conc = nullptr;
52 const std::vector<double>* ponded_reacted_mass = nullptr;
53 const std::vector<uint8_t>* ponded_reactor_mask = nullptr;
54 const std::vector<uint8_t>* lid_reactor_mask = nullptr;
55 std::vector<double>* ponded_qual = nullptr;
56 std::vector<double>* runon_qual_rate = nullptr;
57 std::vector<double>* total_load = nullptr;
58 const std::vector<double>* mcf = nullptr;
59 const std::vector<double>* c_rain = nullptr;
60 const std::vector<bool>* snow_only = nullptr;
61 const std::vector<int>* co_pollut = nullptr;
62 const std::vector<double>* co_frac = nullptr;
63 // Ledgers [s], user mass.
64 std::vector<double>* led_surface_buildup = nullptr;
65 std::vector<double>* led_wet_deposition = nullptr;
66 std::vector<double>* led_bmp_removal = nullptr;
67 std::vector<double>* led_infil_loss = nullptr;
68 std::vector<double>* led_runoff_load = nullptr;
69 std::vector<double>* led_sweeping = nullptr;
70 std::vector<double>* led_ponded_lost = nullptr;
73 const std::vector<unsigned char>* sweep_now = nullptr;
74 const std::vector<double>* sweep_removal = nullptr;
75
84 std::size_t bu_idx(int sc, int lu, int s) const noexcept {
85 return static_cast<std::size_t>(sc) * static_cast<std::size_t>(nlu * n) +
86 static_cast<std::size_t>(lu) * static_cast<std::size_t>(n) +
87 static_cast<std::size_t>(s);
88 }
89};
90
94void step(SimulationContext& ctx, Block& b, double dt_runoff, double old_runoff_time) noexcept;
95
100void bookPostLid(SimulationContext& ctx, Block& b, double dt_runoff,
101 const std::vector<double>& lid_infil_vol) noexcept;
102
103} // namespace surfacespecies
104} // namespace openswmm
105
106#endif
Pollutant buildup and washoff per land use — batch SoA.
Definition SurfaceSpeciesKernel.cpp:23
void bookPostLid(SimulationContext &ctx, Block &b, double dt_runoff, const std::vector< double > &lid_infil_vol) noexcept
Book one accepted family's post-LID losses and delivered runoff load using pre-LID concentration.
Definition SurfaceSpeciesKernel.cpp:804
void step(SimulationContext &ctx, Block &b, double dt_runoff, double old_runoff_time) noexcept
Advance one species family's buildup/sweeping/washoff and pre-LID complete-mix concentration.
Definition SurfaceSpeciesKernel.cpp:58
Definition ExchangeLaw.hpp:60
Central, reentrant simulation context.
Definition SimulationContext.hpp:390
Definition SurfaceSpeciesKernel.hpp:42
const std::vector< double > * ponded_reacted_mass
Definition SurfaceSpeciesKernel.hpp:52
std::vector< double > * led_wet_deposition
Definition SurfaceSpeciesKernel.hpp:65
std::vector< double > * led_ponded_lost
Definition SurfaceSpeciesKernel.hpp:70
const std::vector< double > * co_frac
[s] or null
Definition SurfaceSpeciesKernel.hpp:62
const std::vector< bool > * snow_only
[s]
Definition SurfaceSpeciesKernel.hpp:60
std::vector< double > * ponded_qual
[sc*n + s], concentration mass
Definition SurfaceSpeciesKernel.hpp:55
const std::vector< int > * co_pollut
[s] or null
Definition SurfaceSpeciesKernel.hpp:61
std::vector< double > * conc
Definition SurfaceSpeciesKernel.hpp:48
std::vector< double > * led_sweeping
Definition SurfaceSpeciesKernel.hpp:69
std::vector< double > * buildup
[(sc*nlu + lu)*n + s], per normalizer unit
Definition SurfaceSpeciesKernel.hpp:47
std::vector< double > * led_runoff_load
Definition SurfaceSpeciesKernel.hpp:68
const std::vector< unsigned char > * sweep_now
Definition SurfaceSpeciesKernel.hpp:73
const std::vector< uint8_t > * lid_reactor_mask
Definition SurfaceSpeciesKernel.hpp:54
std::vector< double > * runon_qual_rate
[sc*n + s], concentration mass / s
Definition SurfaceSpeciesKernel.hpp:56
const std::vector< landuse::BuildupParams > * bu_params
[lu*n + s]
Definition SurfaceSpeciesKernel.hpp:45
const std::vector< landuse::WashoffParams > * wo_params
[lu*n + s]
Definition SurfaceSpeciesKernel.hpp:46
std::vector< double > * total_load
[sc*n + s], user mass
Definition SurfaceSpeciesKernel.hpp:57
std::vector< double > * led_infil_loss
Definition SurfaceSpeciesKernel.hpp:67
const std::vector< double > * mcf
[s] concentration mass -> user mass
Definition SurfaceSpeciesKernel.hpp:58
const std::vector< double > * c_rain
[s] rainfall concentration
Definition SurfaceSpeciesKernel.hpp:59
const std::vector< uint8_t > * ponded_reactor_mask
Definition SurfaceSpeciesKernel.hpp:53
int nlu
land uses
Definition SurfaceSpeciesKernel.hpp:44
std::vector< double > * led_surface_buildup
Definition SurfaceSpeciesKernel.hpp:64
int n
species in the family
Definition SurfaceSpeciesKernel.hpp:43
const std::vector< double > * sweep_removal
Definition SurfaceSpeciesKernel.hpp:74
std::size_t bu_idx(int sc, int lu, int s) const noexcept
Flatten a prepared subcatchment/landuse/species buildup coordinate.
Definition SurfaceSpeciesKernel.hpp:84
std::vector< double > * led_bmp_removal
Definition SurfaceSpeciesKernel.hpp:66