| 245 | } // solveSystem |
| 246 | |
| 247 | void |
| 248 | PETScLevelSolver::initializeSolverState(const SAMRAIVectorReal<NDIM, double>& x, |
| 249 | const SAMRAIVectorReal<NDIM, double>& b) |
| 250 | { |
| 251 | IBTK_TIMER_START(t_initialize_solver_state); |
| 252 | |
| 253 | // Rudimentary error checking. |
| 254 | #if !defined(NDEBUG) |
| 255 | if (x.getNumberOfComponents() != b.getNumberOfComponents()) |
| 256 | { |
| 257 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 258 | << " vectors must have the same number of components" << std::endl); |
| 259 | } |
| 260 | |
| 261 | const Pointer<PatchHierarchy<NDIM>>& patch_hierarchy = x.getPatchHierarchy(); |
| 262 | if (patch_hierarchy != b.getPatchHierarchy()) |
| 263 | { |
| 264 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 265 | << " vectors must have the same hierarchy" << std::endl); |
| 266 | } |
| 267 | |
| 268 | const int coarsest_ln = x.getCoarsestLevelNumber(); |
| 269 | if (coarsest_ln < 0) |
| 270 | { |
| 271 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 272 | << " coarsest level number must not be negative" << std::endl); |
| 273 | } |
| 274 | if (coarsest_ln != b.getCoarsestLevelNumber()) |
| 275 | { |
| 276 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 277 | << " vectors must have same coarsest level number" << std::endl); |
| 278 | } |
| 279 | |
| 280 | const int finest_ln = x.getFinestLevelNumber(); |
| 281 | if (finest_ln < coarsest_ln) |
| 282 | { |
| 283 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 284 | << " finest level number must be >= coarsest level number" << std::endl); |
| 285 | } |
| 286 | if (finest_ln != b.getFinestLevelNumber()) |
| 287 | { |
| 288 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 289 | << " vectors must have same finest level number" << std::endl); |
| 290 | } |
| 291 | |
| 292 | for (int ln = coarsest_ln; ln <= finest_ln; ++ln) |
| 293 | { |
| 294 | if (!patch_hierarchy->getPatchLevel(ln)) |
| 295 | { |
| 296 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 297 | << " hierarchy level " << ln << " does not exist" << std::endl); |
| 298 | } |
| 299 | } |
| 300 | |
| 301 | if (coarsest_ln != finest_ln) |
| 302 | { |
| 303 | TBOX_ERROR(d_object_name << "::initializeSolverState()\n" |
| 304 | << " coarsest_ln != finest_ln in PETScLevelSolver" << std::endl); |
no test coverage detected