SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
mesh2daquifermodel.h
Go to the documentation of this file.
1
24#ifndef OPENSWMMVIS_UI_DIALOGS_MESH2DAQUIFERMODEL_H
25#define OPENSWMMVIS_UI_DIALOGS_MESH2DAQUIFERMODEL_H
26
27#include <QAbstractTableModel>
28#include <QList>
29#include <QString>
30
31#include <openswmm/engine/openswmm_engine.h>
32
33namespace openswmmvis::ui {
34
37class Mesh2DAquiferModel : public QAbstractTableModel
38{
39 Q_OBJECT
40public:
55
56 explicit Mesh2DAquiferModel(QObject *parent = nullptr);
57
60 [[nodiscard]] static QStringList soilTokens();
63 [[nodiscard]] static QStringList closureTokens();
64 [[nodiscard]] static int closureCodeAt(int index);
65 [[nodiscard]] static int closureIndexOf(int code);
66
67 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
68 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
69 QVariant data(const QModelIndex &index, int role) const override;
70 bool setData(const QModelIndex &index, const QVariant &value,
71 int role = Qt::EditRole) override;
72 QVariant headerData(int section, Qt::Orientation orientation,
73 int role = Qt::DisplayRole) const override;
74 Qt::ItemFlags flags(const QModelIndex &index) const override;
75 bool removeRows(int row, int count,
76 const QModelIndex &parent = QModelIndex()) override;
77
79 void load(SWMM_Engine engine);
83 QString commit(SWMM_Engine engine);
84 [[nodiscard]] bool isDirty() const;
85
87 int appendRow();
88
90 void setUnitLabels(const QString &lengthLabel, const QString &rateLabel);
91
92private:
93 struct Row {
94 int scope = 0; // SWMM_GW2D_SCOPE_*
95 QString tag;
96 int cell = -1; // 0-based
97 double ks = 0.5;
98 double zs = 5.0;
99 double thetaS = 0.45;
100 double thetaR = 0.10;
101 double alpha = 2.0;
102 int soil = 0; // SWMM_GW2D_SOIL_*
103 bool soilSet = false;
104 int closure = -1; // SWMM_GW2D_CLOSURE_*
105 bool closureSet = false;
106 double hg0 = -1.0; // < 0 = "use the option default"
107 double cLoss = 0.0;
108 double psiB = 0.20;
109 double lambda = 0.40;
110 double vgN = 1.6;
111 double vgL = 0.5;
112 int mLayers = -1;
113 bool operator==(const Row &o) const;
114 };
115
116 QList<Row> m_rows;
117 QList<Row> m_loaded;
118 QString m_lengthLabel = QStringLiteral("m");
119 QString m_rateLabel = QStringLiteral("mm/hr");
120};
121
124class Mesh2DAquiferNodeModel : public QAbstractTableModel
125{
126 Q_OBJECT
127public:
129
130 explicit Mesh2DAquiferNodeModel(QObject *parent = nullptr);
131
132 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
133 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
134 QVariant data(const QModelIndex &index, int role) const override;
135 bool setData(const QModelIndex &index, const QVariant &value,
136 int role = Qt::EditRole) override;
137 QVariant headerData(int section, Qt::Orientation orientation,
138 int role = Qt::DisplayRole) const override;
139 Qt::ItemFlags flags(const QModelIndex &index) const override;
140 bool removeRows(int row, int count,
141 const QModelIndex &parent = QModelIndex()) override;
142
143 void load(SWMM_Engine engine);
144 QString commit(SWMM_Engine engine);
145 [[nodiscard]] bool isDirty() const;
146 int appendRow(const QString &node, int cell);
147
148 void setUnitLabels(const QString &lengthLabel, const QString &rateLabel,
149 const QString &areaLabel);
150
151private:
152 struct Row {
153 QString node;
154 int cell = 0; // 0-based
155 double kc = 0.0; // 0 = direct Darcy, no semi-confining bed
156 double dc = 0.0;
157 double area = 0.0; // 0 = the cell's own area
158 bool operator==(const Row &o) const;
159 };
160
161 QList<Row> m_rows;
162 QList<Row> m_loaded;
163 QString m_lengthLabel = QStringLiteral("m");
164 QString m_rateLabel = QStringLiteral("mm/hr");
165 QString m_areaLabel = QStringLiteral("m²");
166};
167
168} // namespace openswmmvis::ui
169
170#endif // OPENSWMMVIS_UI_DIALOGS_MESH2DAQUIFERMODEL_H
The [2D_AQUIFER] rows: scope, the five positional columns, and the law/closure selections.
Definition mesh2daquifermodel.h:38
bool removeRows(int row, int count, const QModelIndex &parent=QModelIndex()) override
Definition mesh2daquifermodel.cpp:322
QString commit(SWMM_Engine engine)
Definition mesh2daquifermodel.cpp:374
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
Definition mesh2daquifermodel.cpp:190
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition mesh2daquifermodel.cpp:312
static QStringList soilTokens()
Definition mesh2daquifermodel.cpp:61
void setUnitLabels(const QString &lengthLabel, const QString &rateLabel)
Column labels want the project's length/rate words.
Definition mesh2daquifermodel.cpp:429
bool isDirty() const
Definition mesh2daquifermodel.cpp:418
void load(SWMM_Engine engine)
Replace the staged rows with the engine's.
Definition mesh2daquifermodel.cpp:334
static int closureCodeAt(int index)
Definition mesh2daquifermodel.cpp:75
static QStringList closureTokens()
Definition mesh2daquifermodel.cpp:69
static int closureIndexOf(int code)
Definition mesh2daquifermodel.cpp:85
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition mesh2daquifermodel.cpp:95
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Definition mesh2daquifermodel.cpp:100
int appendRow()
Append a row seeded with the defaults the parser uses.
Definition mesh2daquifermodel.cpp:420
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition mesh2daquifermodel.cpp:290
QVariant data(const QModelIndex &index, int role) const override
Definition mesh2daquifermodel.cpp:105
Column
Definition mesh2daquifermodel.h:41
@ ColAlpha
Definition mesh2daquifermodel.h:48
@ ColCount
Definition mesh2daquifermodel.h:53
@ ColScope
"*", "TAG <t>" or "CELL <n>"
Definition mesh2daquifermodel.h:42
@ ColClosure
Definition mesh2daquifermodel.h:50
@ ColTarget
the tag name or the 1-based cell index
Definition mesh2daquifermodel.h:43
@ ColThetaR
Definition mesh2daquifermodel.h:47
@ ColKs
Definition mesh2daquifermodel.h:44
@ ColZs
Definition mesh2daquifermodel.h:45
@ ColThetaS
Definition mesh2daquifermodel.h:46
@ ColHg0
Definition mesh2daquifermodel.h:51
@ ColCLoss
Definition mesh2daquifermodel.h:52
@ ColSoil
Definition mesh2daquifermodel.h:49
The [2D_AQUIFER_NODE] beds: which 1D node exchanges with which cell, through what conductance.
Definition mesh2daquifermodel.h:125
bool removeRows(int row, int count, const QModelIndex &parent=QModelIndex()) override
Definition mesh2daquifermodel.cpp:568
void setUnitLabels(const QString &lengthLabel, const QString &rateLabel, const QString &areaLabel)
Definition mesh2daquifermodel.cpp:639
int appendRow(const QString &node, int cell)
Definition mesh2daquifermodel.cpp:627
QString commit(SWMM_Engine engine)
Definition mesh2daquifermodel.cpp:602
Column
Definition mesh2daquifermodel.h:128
@ ColCount
Definition mesh2daquifermodel.h:128
@ ColKc
Definition mesh2daquifermodel.h:128
@ ColNode
Definition mesh2daquifermodel.h:128
@ ColArea
Definition mesh2daquifermodel.h:128
@ ColCell
Definition mesh2daquifermodel.h:128
@ ColDc
Definition mesh2daquifermodel.h:128
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition mesh2daquifermodel.cpp:545
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition mesh2daquifermodel.cpp:452
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition mesh2daquifermodel.cpp:562
QVariant data(const QModelIndex &index, int role) const override
Definition mesh2daquifermodel.cpp:462
void load(SWMM_Engine engine)
Definition mesh2daquifermodel.cpp:580
bool isDirty() const
Definition mesh2daquifermodel.cpp:625
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
Definition mesh2daquifermodel.cpp:499
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Definition mesh2daquifermodel.cpp:457
int code
Definition heatconfigdialog.cpp:40
QString lengthLabel
Definition inletdrawingview.cpp:80
SWMM_FilePathRole role
Definition ioportabilitynormalizer.cpp:22
std::vector< int > cell
Definition mesh2dresultsexport.cpp:609
std::vector< double > area
model units²
Definition mesh2dresultsexport.cpp:104
int index
Position in m_quadRegions / m_quadReports.
Definition meshgenerator.cpp:153
QString tag
r.tag or inherited from a dropped RegionMarker.
Definition meshgenerator.cpp:167
Definition openswmmvislayer.h:43
int count
Definition numberformat.cpp:101
void * SWMM_Engine
Definition objectdefaultsapplier.h:19
QVector< int > parent
union-find
Definition pslgminsize.cpp:176