MCPcopy Create free account
hub / github.com/IBAMR/IBAMR / initializeSolverState

Method initializeSolverState

ibtk/src/solvers/impls/PETScNewtonKrylovSolver.cpp:237–367  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235}
236
237void
238PETScNewtonKrylovSolver::initializeSolverState(const SAMRAIVectorReal<NDIM, double>& x,
239 const SAMRAIVectorReal<NDIM, double>& b)
240{
241 IBTK_TIMER_START(t_initialize_solver_state);
242
243 int ierr;
244
245#if !defined(NDEBUG)
246 if (x.getNumberOfComponents() != b.getNumberOfComponents())
247 {
248 TBOX_ERROR(d_object_name << "::initializeSolverState()\n"
249 << " vectors must have the same number of components" << std::endl);
250 }
251
252 const Pointer<PatchHierarchy<NDIM>>& patch_hierarchy = x.getPatchHierarchy();
253 if (patch_hierarchy != b.getPatchHierarchy())
254 {
255 TBOX_ERROR(d_object_name << "::initializeSolverState()\n"
256 << " vectors must have the same hierarchy" << std::endl);
257 }
258
259 const int coarsest_ln = x.getCoarsestLevelNumber();
260 if (coarsest_ln < 0)
261 {
262 TBOX_ERROR(d_object_name << "::initializeSolverState()\n"
263 << " coarsest level number must not be negative" << std::endl);
264 }
265 if (coarsest_ln != b.getCoarsestLevelNumber())
266 {
267 TBOX_ERROR(d_object_name << "::initializeSolverState()\n"
268 << " vectors must have same coarsest level number" << std::endl);
269 }
270
271 const int finest_ln = x.getFinestLevelNumber();
272 if (finest_ln < coarsest_ln)
273 {
274 TBOX_ERROR(d_object_name << "::initializeSolverState()\n"
275 << " finest level number must be >= coarsest level number" << std::endl);
276 }
277 if (finest_ln != b.getFinestLevelNumber())
278 {
279 TBOX_ERROR(d_object_name << "::initializeSolverState()\n"
280 << " vectors must have same finest level number" << std::endl);
281 }
282
283 for (int ln = coarsest_ln; ln <= finest_ln; ++ln)
284 {
285 if (!patch_hierarchy->getPatchLevel(ln))
286 {
287 TBOX_ERROR(d_object_name << "::initializeSolverState()\n"
288 << " hierarchy level " << ln << " does not exist" << std::endl);
289 }
290 }
291#endif
292 // Deallocate the solver state if the solver is already initialized.
293 if (d_is_initialized)
294 {

Callers

nothing calls this directly

Calls 6

getPatchLevelMethod · 0.80
resetWrappedKSPMethod · 0.80
getPatchHierarchyMethod · 0.45
getFinestLevelNumberMethod · 0.45

Tested by

no test coverage detected