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
simulationstatusmodel.h
Go to the documentation of this file.
1
7#ifndef SIMULATIONSTATUSMODEL_H
8#define SIMULATIONSTATUSMODEL_H
9
10#include <QAbstractItemModel>
11#include <QDateTime>
12#include <QStringList>
13#include <QMap>
14#include <QtNumeric>
15
16class SWMMVisProjectWindow; // Forward declaration
17
22 Idle,
23 Running,
24 Success,
25 Failed,
27};
28
36 int id = -1;
37 QString instanceName;
38 QString inpPath;
39 QString engineVersion;
40
42 double progress = 0.0;
43
44 // Continuity errors: polled by the runner in the step loop and
45 // pushed live during the run, not just at finish.
46 double runoffErrPct = 0.0;
47 double routingErrPct = 0.0;
48 double twoDErrPct = qQNaN();
49
50 int errorCode = 0;
51 QString errorMessage;
52
53 // Wall-clock timestamps for the run's lifecycle.
54 QDateTime startedAt;
55 QDateTime finishedAt;
56
57 // Simulation timeline (engine-side dates). Start / end are set once
58 // from the runner; current is pushed every progress tick directly as
59 // a QDateTime (converted from the engine OADate on the worker
60 // thread), so the model stores what it receives verbatim.
61 QDateTime startSimDate;
62 QDateTime endSimDate;
63 QDateTime currentSimDate;
64
65 double avgTimestepSec = 0.0;
66
67 // 2D solver telemetry (swmm_2d_get_run_stats), pushed with each tick.
68 QString twoDBackend;
69 int twoDMomentum = 0;
70 int twoDLtsTiers = 0;
71 qint64 twoDSteps = 0;
72 QVector<qint64> twoDTierCells;
73
74 QStringList warnings;
76};
77
97class SimulationStatusModel : public QAbstractItemModel
98{
99 Q_OBJECT
100
101public:
102 static constexpr int ColName = 0;
103 static constexpr int ColStatus = 1;
104 static constexpr int ColProgress = 2;
105 static constexpr int ColStartDate = 3;
106 static constexpr int ColCurrentDate = 4;
107 static constexpr int ColEndDate = 5;
108 static constexpr int ColRunoffErr = 6;
109 static constexpr int ColRoutingErr = 7;
110 static constexpr int ColTwoDErr = 8;
111 static constexpr int ColDuration = 9;
112 static constexpr int ColAvgTimestep = 10;
113 static constexpr int ColVersion = 11;
114 static constexpr int Col2DBackend = 12;
115 static constexpr int ColLtsTiers = 13;
116 static constexpr int NumColumns = 14;
117
118 explicit SimulationStatusModel(QObject *parent = nullptr);
119
120 // ── Public mutators (called from GUI thread via queued signals) ──────────
122 int addJob(const QString &instanceName, const QString &inpPath,
123 const QString &engineVersion = QString());
124
132 const QString &instanceName,
133 const QString &inpPath,
134 const QString &engineVersion = QString());
135
142 const QString &instanceName,
143 const QString &inpPath,
144 const QString &engineVersion);
145
152 void updateProgress(int jobId, double fraction,
153 const QDateTime &currentSimDate,
154 double runoffErrFrac = 0.0,
155 double routingErrFrac = 0.0,
156 double avgTimestepSec = 0.0,
157 double twoDErrFrac = qQNaN());
158
165 void updateTwoDSolverStats(int jobId, const QString &backend, int momentum,
166 int ltsTiers, qint64 steps,
167 const QVector<qint64> &tierCells);
168
170 void setSimulationDates(int jobId,
171 const QDateTime &startSimDate,
172 const QDateTime &endSimDate);
173
175 void addWarning(int jobId, int code, const QString &message);
176
183 void finishJob(int jobId, bool success, int errCode, const QString &errMsg,
184 double runoffErrFrac, double routingErrFrac,
185 double twoDErrFrac = qQNaN());
186
188 const SimulationJobRecord *jobRecord(int jobId) const;
189
191 int jobIdForRow(int row) const;
192
202 QList<int> clearJobsForModel(SWMMVisProjectWindow *model);
203
204 // ── QAbstractItemModel ───────────────────────────────────────────────────
205 QModelIndex index(int row, int column,
206 const QModelIndex &parent = QModelIndex()) const override;
207 QModelIndex parent(const QModelIndex &child) const override;
208 int rowCount (const QModelIndex &parent = QModelIndex()) const override;
209 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
210 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
211 QVariant headerData(int section, Qt::Orientation orientation,
212 int role = Qt::DisplayRole) const override;
213
214private:
215 // sentinel internalId for top-level (job) indices
216 static constexpr quintptr kRootId = ~quintptr(0);
217
218 int jobIndexById(int jobId) const;
219
220 QList<SimulationJobRecord> m_jobs;
221 int m_nextId = 0;
222
223 // Mapping from (model instance, engine version) → persistent job ID.
224 // Different engine versions for the same model get separate rows.
225 QMap<SWMMVisProjectWindow*, QMap<QString, int>> m_modelToJobId;
226};
227
228#endif // SIMULATIONSTATUSMODEL_H
MDI sub-window owning a MapCanvas, SWMMModelLayer, and map tools.
Definition swmmvisprojectwindow.h:58
Two-level QAbstractItemModel for the Simulation Status dock.
Definition simulationstatusmodel.h:98
static constexpr int ColVersion
Definition simulationstatusmodel.h:113
static constexpr int ColEndDate
Definition simulationstatusmodel.h:107
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Definition simulationstatusmodel.cpp:336
int jobIdForRow(int row) const
Definition simulationstatusmodel.cpp:261
static constexpr int ColProgress
Definition simulationstatusmodel.h:104
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Definition simulationstatusmodel.cpp:341
void setSimulationDates(int jobId, const QDateTime &startSimDate, const QDateTime &endSimDate)
Definition simulationstatusmodel.cpp:155
static constexpr int ColStatus
Definition simulationstatusmodel.h:103
static constexpr int ColTwoDErr
Definition simulationstatusmodel.h:110
int addOrReuseJobForModel(SWMMVisProjectWindow *model, const QString &instanceName, const QString &inpPath, const QString &engineVersion=QString())
Add or reuse a job row bound to a model instance.
Definition simulationstatusmodel.cpp:49
void updateProgress(int jobId, double fraction, const QDateTime &currentSimDate, double runoffErrFrac=0.0, double routingErrFrac=0.0, double avgTimestepSec=0.0, double twoDErrFrac=qQNaN())
Update progress for a running job.
Definition simulationstatusmodel.cpp:127
static constexpr int Col2DBackend
"cpu · LOCAL_INERTIAL", "—" for 1D runs
Definition simulationstatusmodel.h:114
static constexpr int ColRunoffErr
Definition simulationstatusmodel.h:108
static constexpr int ColRoutingErr
Definition simulationstatusmodel.h:109
QList< int > clearJobsForModel(SWMMVisProjectWindow *model)
Remove every row bound to the given model.
Definition simulationstatusmodel.cpp:267
int addJob(const QString &instanceName, const QString &inpPath, const QString &engineVersion=QString())
Definition simulationstatusmodel.cpp:29
static constexpr int ColLtsTiers
"4 tiers · t3 84 %"
Definition simulationstatusmodel.h:115
const SimulationJobRecord * jobRecord(int jobId) const
Definition simulationstatusmodel.cpp:254
void finishJob(int jobId, bool success, int errCode, const QString &errMsg, double runoffErrFrac, double routingErrFrac, double twoDErrFrac=qQNaN())
Definition simulationstatusmodel.cpp:206
static constexpr int ColAvgTimestep
Definition simulationstatusmodel.h:112
static constexpr int ColCurrentDate
Definition simulationstatusmodel.h:106
void updateTwoDSolverStats(int jobId, const QString &backend, int momentum, int ltsTiers, qint64 steps, const QVector< qint64 > &tierCells)
Definition simulationstatusmodel.cpp:516
static constexpr int NumColumns
Definition simulationstatusmodel.h:116
static constexpr int ColDuration
Definition simulationstatusmodel.h:111
int ensureJobForModel(SWMMVisProjectWindow *model, const QString &instanceName, const QString &inpPath, const QString &engineVersion)
Return the job row bound to (model, engine version), creating an Idle row if none exists yet....
Definition simulationstatusmodel.cpp:101
static constexpr int ColName
Definition simulationstatusmodel.h:102
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition simulationstatusmodel.cpp:491
static constexpr int ColStartDate
Definition simulationstatusmodel.h:105
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition simulationstatusmodel.cpp:327
void addWarning(int jobId, int code, const QString &message)
Definition simulationstatusmodel.cpp:175
int code
Definition heatconfigdialog.cpp:40
SWMM_FilePathRole role
Definition ioportabilitynormalizer.cpp:22
std::vector< std::vector< float > > steps
one per selected time step
Definition mesh2dresultsexport.cpp:295
int index
Position in m_quadRegions / m_quadReports.
Definition meshgenerator.cpp:153
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
QString message
Definition queryparser.cpp:150
SimulationJobStatus
Status of a single simulation job.
Definition simulationstatusmodel.h:21
@ Idle
Row exists for an open model; no run yet.
Data record for one simulation run.
Definition simulationstatusmodel.h:35
QString instanceName
Displayed name (e.g. "Example1.inp")
Definition simulationstatusmodel.h:37
QString errorMessage
Definition simulationstatusmodel.h:51
QString engineVersion
Engine version string (e.g. "6.0.0" or "5.3.0")
Definition simulationstatusmodel.h:39
QDateTime startSimDate
Definition simulationstatusmodel.h:61
SimulationJobStatus status
Definition simulationstatusmodel.h:41
QVector< qint64 > twoDTierCells
rebuild-sampled cells per LTS tier
Definition simulationstatusmodel.h:72
int twoDMomentum
0 LOCAL_INERTIAL, 1 FULL_SWE, 2 DIFFUSIVE_WAVE
Definition simulationstatusmodel.h:69
QDateTime currentSimDate
Definition simulationstatusmodel.h:63
QDateTime startedAt
Definition simulationstatusmodel.h:54
QString twoDBackend
empty = no 2D run / not started
Definition simulationstatusmodel.h:68
QString inpPath
Full .inp path.
Definition simulationstatusmodel.h:38
int droppedWarnings
oldest entries trimmed past the per-job cap
Definition simulationstatusmodel.h:75
double routingErrPct
Definition simulationstatusmodel.h:47
double progress
[0.0, 1.0]
Definition simulationstatusmodel.h:42
qint64 twoDSteps
cumulative marcher substeps
Definition simulationstatusmodel.h:71
double twoDErrPct
NaN = run has no 2D model.
Definition simulationstatusmodel.h:48
QDateTime endSimDate
Definition simulationstatusmodel.h:62
int errorCode
Definition simulationstatusmodel.h:50
double runoffErrPct
Definition simulationstatusmodel.h:46
double avgTimestepSec
running average engine timestep (seconds)
Definition simulationstatusmodel.h:65
QDateTime finishedAt
Definition simulationstatusmodel.h:55
int twoDLtsTiers
configured LTS_TIERS
Definition simulationstatusmodel.h:70
QStringList warnings
"[code] message" entries
Definition simulationstatusmodel.h:74