81 std::vector<std::size_t>
row;
84 bool apply(
const double* x,
double*
y)
const;
113 std::size_t
bytes()
const;
119 std::size_t factorBytes()
const;
122 std::size_t pairs_ = 0;
123 std::vector<std::size_t> source_row_, row_, diagonal_, scatter_;
124 std::vector<int> source_column_, column_;
125 std::vector<double> scalar_lu_;
126 std::vector<std::array<double, 4>> block_lu_, inverses_;
212 static bool residual(
const Problem&,
const Trial&,
double dt, Evaluation&);
215 static bool linearize(
const Problem&,
const Trial&,
double dt,
double step, Linearization&);
219 static LinearResult
solveLinear(
const Matrix&,
const std::vector<double>& rhs,
221 LinearWorkspace* =
nullptr);
228 static LinearResult
solveBlockLinear(
const Matrix&,
const std::vector<double>& rhs,
230 std::vector<double>&, LinearWorkspace* =
nullptr);
240 const CondensationControls&,
bool allow_fallback,
241 std::vector<double>&, LinearWorkspace* =
nullptr);
246 Result
solve(
const Problem&,
double dt,
const Controls&, Endpoint&);
251 LinearWorkspace linear_workspace_;
Single-source scalar kernels for the explicit FV 1D network solver.
Native GMRES iteration for finite-volume linear systems.
SoA storage for the 1D finite-volume network mesh and its state.
Definition ImplicitNetworkSolver.hpp:111
void release()
Definition NativeLinearWorkspace.cpp:26
std::size_t bytes() const
Definition NativeLinearWorkspace.cpp:23
friend class ImplicitNetworkSolver
Definition ImplicitNetworkSolver.hpp:117
Definition ImplicitNetworkSolver.hpp:31
Status
Definition ImplicitNetworkSolver.hpp:189
@ LinearFailure
Definition ImplicitNetworkSolver.hpp:193
@ LineSearchFailed
Definition ImplicitNetworkSolver.hpp:194
@ NonFinite
Definition ImplicitNetworkSolver.hpp:196
@ InitializationFailure
Definition ImplicitNetworkSolver.hpp:192
@ IterationLimit
Definition ImplicitNetworkSolver.hpp:195
@ InvalidInput
Definition ImplicitNetworkSolver.hpp:191
@ Converged
Definition ImplicitNetworkSolver.hpp:190
static LinearResult solveBlockLinear(const Matrix &, const std::vector< double > &rhs, std::size_t cell_blocks, const NativeGmres::Controls &, std::vector< double > &, LinearWorkspace *=nullptr)
Definition NativeBlockIlu.cpp:86
CondensationStatus
Definition ImplicitNetworkSolver.hpp:92
@ MemoryLimit
Definition ImplicitNetworkSolver.hpp:99
@ BlockPivot
Definition ImplicitNetworkSolver.hpp:97
@ InterfaceFailure
Definition ImplicitNetworkSolver.hpp:100
@ UnsupportedStencil
Definition ImplicitNetworkSolver.hpp:96
@ NotAttempted
Definition ImplicitNetworkSolver.hpp:93
@ InvalidInput
Definition ImplicitNetworkSolver.hpp:95
@ Converged
Definition ImplicitNetworkSolver.hpp:94
@ FillLimit
Definition ImplicitNetworkSolver.hpp:98
@ ReconstructionFailure
Definition ImplicitNetworkSolver.hpp:101
LinearMethod
Definition ImplicitNetworkSolver.hpp:174
@ CondensedOnly
Definition ImplicitNetworkSolver.hpp:174
@ FullGmres
Definition ImplicitNetworkSolver.hpp:174
@ CondensedThenGmres
Definition ImplicitNetworkSolver.hpp:174
static bool linearize(const Problem &, const Trial &, double dt, double step, Linearization &)
Definition ImplicitNetworkSolver.cpp:454
std::size_t linearWorkspaceBytes() const
Definition ImplicitNetworkSolver.hpp:247
static LinearResult solveLinear(const Matrix &, const std::vector< double > &rhs, const NativeGmres::Controls &, std::vector< double > &, LinearWorkspace *=nullptr)
Definition ImplicitNetworkSolver.cpp:671
Result solve(const Problem &, double dt, const Controls &, Endpoint &)
Failure leaves Endpoint unchanged; no post-convergence water/Q repairs.
Definition ImplicitNetworkSolver.cpp:872
Regime
Definition ImplicitNetworkSolver.hpp:33
@ BoundedWetSlot
Definition ImplicitNetworkSolver.hpp:33
@ PressurizedOnly
Definition ImplicitNetworkSolver.hpp:33
Preconditioner
Definition ImplicitNetworkSolver.hpp:103
@ BlockIlu0
Definition ImplicitNetworkSolver.hpp:103
@ ScalarIlu0
Definition ImplicitNetworkSolver.hpp:103
static bool initializeHeads(const Problem &, Trial &, double tolerance)
Definition ImplicitNetworkSolver.cpp:804
static LinearResult solveCondensed(const NetworkMeshData &, const Matrix &, const std::vector< double > &rhs, const NativeGmres::Controls &, const CondensationControls &, bool allow_fallback, std::vector< double > &, LinearWorkspace *=nullptr)
Definition NativeConduitCondensation.cpp:934
void clearLinearWorkspace()
Definition ImplicitNetworkSolver.hpp:248
static bool residual(const Problem &, const Trial &, double dt, Evaluation &)
Definition ImplicitNetworkSolver.cpp:395
Definition NativeGmres.hpp:25
Definition AcceptedWaterVolumes.hpp:8
double * y
Definition odesolve.c:37
Definition ImplicitNetworkSolver.hpp:129
bool used
Definition ImplicitNetworkSolver.hpp:130
std::size_t entries
Definition ImplicitNetworkSolver.hpp:132
double minimum_pivot_ratio
Definition ImplicitNetworkSolver.hpp:133
double largest_shift
Definition ImplicitNetworkSolver.hpp:133
int failed_block
Definition ImplicitNetworkSolver.hpp:131
int blocks
Definition ImplicitNetworkSolver.hpp:131
Definition ImplicitNetworkSolver.hpp:135
std::size_t workspace_limit_bytes
Definition ImplicitNetworkSolver.hpp:138
bool tree_interface
Definition ImplicitNetworkSolver.hpp:140
bool reduced_gmres_only
Definition ImplicitNetworkSolver.hpp:139
int dense_limit
Definition ImplicitNetworkSolver.hpp:136
std::size_t max_schur_entries
Definition ImplicitNetworkSolver.hpp:137
Preconditioner preconditioner
Definition ImplicitNetworkSolver.hpp:141
Definition ImplicitNetworkSolver.hpp:144
int eliminated
Definition ImplicitNetworkSolver.hpp:146
BlockIluDiagnostics reduced_block_ilu
Definition ImplicitNetworkSolver.hpp:156
WorkspaceDiagnostics reduced_workspace
Definition ImplicitNetworkSolver.hpp:157
double minimum_leaf_pivot_ratio
Definition ImplicitNetworkSolver.hpp:154
std::size_t core_entries
Definition ImplicitNetworkSolver.hpp:153
double full_tolerance
Definition ImplicitNetworkSolver.hpp:149
double reduced_true_residual
Definition ImplicitNetworkSolver.hpp:149
double minimum_interface_pivot_ratio
Definition ImplicitNetworkSolver.hpp:148
int tree_eliminated
Definition ImplicitNetworkSolver.hpp:152
std::size_t schur_entries
Definition ImplicitNetworkSolver.hpp:147
bool used_tree
Definition ImplicitNetworkSolver.hpp:151
int retained
Definition ImplicitNetworkSolver.hpp:146
CondensationStatus status
Definition ImplicitNetworkSolver.hpp:145
double full_true_residual
Definition ImplicitNetworkSolver.hpp:149
bool used_reduced_gmres
Definition ImplicitNetworkSolver.hpp:150
int unsafe_leaf_pivots
Definition ImplicitNetworkSolver.hpp:152
int core_scalars
Definition ImplicitNetworkSolver.hpp:152
double minimum_block_pivot_ratio
Definition ImplicitNetworkSolver.hpp:148
int failed_cell
Definition ImplicitNetworkSolver.hpp:146
double core_true_residual
Definition ImplicitNetworkSolver.hpp:154
int failed_interface_pivot
Definition ImplicitNetworkSolver.hpp:146
NativeGmres::Result reduced
Definition ImplicitNetworkSolver.hpp:155
bool used_dense
Definition ImplicitNetworkSolver.hpp:150
std::size_t peak_workspace_bytes
Definition ImplicitNetworkSolver.hpp:147
Definition ImplicitNetworkSolver.hpp:175
LinearMethod method
Definition ImplicitNetworkSolver.hpp:182
int max_backtracks
Definition ImplicitNetworkSolver.hpp:176
int max_newton
Definition ImplicitNetworkSolver.hpp:176
double relative_momentum
Definition ImplicitNetworkSolver.hpp:178
Preconditioner preconditioner
Definition ImplicitNetworkSolver.hpp:185
double relative_volume
Definition ImplicitNetworkSolver.hpp:177
double absolute_volume
Definition ImplicitNetworkSolver.hpp:177
double relative_junction
Definition ImplicitNetworkSolver.hpp:179
CondensationControls condensation
Definition ImplicitNetworkSolver.hpp:187
double absolute_momentum
Definition ImplicitNetworkSolver.hpp:178
NativeGmres::Controls linear
Definition ImplicitNetworkSolver.hpp:181
double absolute_junction
Definition ImplicitNetworkSolver.hpp:179
bool reuse_linear_workspace
Definition ImplicitNetworkSolver.hpp:186
double difference_step
Definition ImplicitNetworkSolver.hpp:180
Definition ImplicitNetworkSolver.hpp:75
std::vector< double > area
Definition ImplicitNetworkSolver.hpp:76
std::vector< double > node_volume
Definition ImplicitNetworkSolver.hpp:77
std::vector< FaceReceipt > faces
Definition ImplicitNetworkSolver.hpp:78
Definition ImplicitNetworkSolver.hpp:66
std::vector< FaceReceipt > faces
Definition ImplicitNetworkSolver.hpp:73
std::vector< double > storage
Definition ImplicitNetworkSolver.hpp:72
std::vector< double > volume
Definition ImplicitNetworkSolver.hpp:71
std::vector< double > junction
Definition ImplicitNetworkSolver.hpp:71
std::vector< double > node_volume
Definition ImplicitNetworkSolver.hpp:72
std::vector< double > momentum
Definition ImplicitNetworkSolver.hpp:71
Definition ImplicitNetworkSolver.hpp:62
double correction_right
Definition ImplicitNetworkSolver.hpp:64
double correction_left
Definition ImplicitNetworkSolver.hpp:64
kernels::FaceFlux flux
Definition ImplicitNetworkSolver.hpp:63
Definition ImplicitNetworkSolver.hpp:159
bool fallback
Definition ImplicitNetworkSolver.hpp:166
bool converged() const
Definition ImplicitNetworkSolver.hpp:167
std::size_t preconditioner_bytes
Definition ImplicitNetworkSolver.hpp:162
CondensationDiagnostics condensation
Definition ImplicitNetworkSolver.hpp:163
WorkspaceDiagnostics workspace
Definition ImplicitNetworkSolver.hpp:165
BlockIluDiagnostics block_ilu
Definition ImplicitNetworkSolver.hpp:164
int shifted_pivots
Definition ImplicitNetworkSolver.hpp:161
NativeGmres::Result gmres
Definition ImplicitNetworkSolver.hpp:160
Definition ImplicitNetworkSolver.hpp:86
std::vector< double > row_scale
Definition ImplicitNetworkSolver.hpp:88
std::vector< int > nodes
Definition ImplicitNetworkSolver.hpp:90
std::vector< double > column_scale
Definition ImplicitNetworkSolver.hpp:88
Matrix matrix
Definition ImplicitNetworkSolver.hpp:87
std::vector< double > residual
Definition ImplicitNetworkSolver.hpp:88
Definition ImplicitNetworkSolver.hpp:80
std::vector< double > value
Definition ImplicitNetworkSolver.hpp:83
std::vector< int > column
Definition ImplicitNetworkSolver.hpp:82
bool apply(const double *x, double *y) const
Definition ImplicitNetworkSolver.cpp:658
std::vector< std::size_t > row
Definition ImplicitNetworkSolver.hpp:81
Definition ImplicitNetworkSolver.hpp:34
std::vector< double > old_discharge
Definition ImplicitNetworkSolver.hpp:36
std::vector< double > cell_lateral
Definition ImplicitNetworkSolver.hpp:52
std::vector< double > old_area
Definition ImplicitNetworkSolver.hpp:36
double minimum_wet_depth
Definition ImplicitNetworkSolver.hpp:56
std::vector< double > old_node_volume
Definition ImplicitNetworkSolver.hpp:48
double maximum_depth
Definition ImplicitNetworkSolver.hpp:57
Regime regime
Definition ImplicitNetworkSolver.hpp:53
std::vector< double > initial_depth
Definition ImplicitNetworkSolver.hpp:39
double minimum_slot_excess
Definition ImplicitNetworkSolver.hpp:57
std::vector< double > initial_head
Definition ImplicitNetworkSolver.hpp:42
const NetworkMeshData * mesh
Definition ImplicitNetworkSolver.hpp:35
std::vector< double > fixed_head
Definition ImplicitNetworkSolver.hpp:42
std::vector< double > node_lateral
Definition ImplicitNetworkSolver.hpp:52
Definition ImplicitNetworkSolver.hpp:198
double max_momentum_residual
Definition ImplicitNetworkSolver.hpp:202
int backtracks
Definition ImplicitNetworkSolver.hpp:200
Status status
Definition ImplicitNetworkSolver.hpp:199
double max_volume_residual
Definition ImplicitNetworkSolver.hpp:202
int gmres_iterations
Definition ImplicitNetworkSolver.hpp:200
double max_storage_residual
Definition ImplicitNetworkSolver.hpp:204
LinearResult last_linear
Definition ImplicitNetworkSolver.hpp:205
int newton_iterations
Definition ImplicitNetworkSolver.hpp:200
double max_junction_residual
Definition ImplicitNetworkSolver.hpp:203
double scaled_residual
Definition ImplicitNetworkSolver.hpp:201
bool converged() const
Definition ImplicitNetworkSolver.hpp:207
std::vector< LinearResult > linear_history
Definition ImplicitNetworkSolver.hpp:206
Definition ImplicitNetworkSolver.hpp:59
std::vector< double > head
Definition ImplicitNetworkSolver.hpp:60
std::vector< double > discharge
Definition ImplicitNetworkSolver.hpp:60
std::vector< double > depth
Definition ImplicitNetworkSolver.hpp:60
Definition ImplicitNetworkSolver.hpp:104
bool symbolic_rebuilt
Definition ImplicitNetworkSolver.hpp:105
bool cache_released
Definition ImplicitNetworkSolver.hpp:106
std::size_t retained_bytes
Definition ImplicitNetworkSolver.hpp:107
bool enabled
Definition ImplicitNetworkSolver.hpp:105
bool symbolic_reused
Definition ImplicitNetworkSolver.hpp:105
Definition NativeGmres.hpp:28
Definition NativeGmres.hpp:45
SoA mesh geometry and topology for the FV network solver.
Definition NetworkMeshData.hpp:123
Result of a face flux evaluation.
Definition FvKernels.hpp:259