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

Method initializeStokesSolver

src/IB/CIBSaddlePointSolver.cpp:633–777  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

631} // initializeKSP
632
633void
634CIBSaddlePointSolver::initializeStokesSolver(const SAMRAIVectorReal<NDIM, double>& sol_vec,
635 const SAMRAIVectorReal<NDIM, double>& rhs_vec)
636{
637 Pointer<PatchHierarchy<NDIM>> patch_hier = sol_vec.getPatchHierarchy();
638 const int coarsest_ln = sol_vec.getCoarsestLevelNumber();
639 const int finest_ln = sol_vec.getFinestLevelNumber();
640
641 // Set the nullspace of the LInv and subdomain solvers
642 const double rho = d_ins_integrator->getStokesSpecifications()->getRho();
643 const bool has_velocity_nullspace = d_normalize_velocity && IBTK::abs_equal_eps(rho, 0.0);
644 const bool has_pressure_nullspace = d_normalize_pressure;
645
646 for (const auto& nul_vec : d_nul_vecs)
647 {
648 if (nul_vec) free_vector_components(*nul_vec);
649 }
650 const int n_nul_vecs = (has_pressure_nullspace ? 1 : 0) + (has_velocity_nullspace ? NDIM : 0);
651 d_nul_vecs.resize(n_nul_vecs);
652
653 for (const auto& U_nul_vec : d_U_nul_vecs)
654 {
655 if (U_nul_vec) free_vector_components(*U_nul_vec);
656 }
657 const int n_U_nul_vecs = (has_velocity_nullspace ? NDIM : 0);
658 d_U_nul_vecs.resize(n_U_nul_vecs);
659
660 if (has_velocity_nullspace)
661 {
662 for (unsigned int k = 0; k < NDIM; ++k)
663 {
664 d_nul_vecs[k] = sol_vec.cloneVector(d_object_name + "::nul_vec_U_" + std::to_string(k));
665 d_nul_vecs[k]->allocateVectorData(d_current_time);
666 d_nul_vecs[k]->setToScalar(0.0);
667
668 SAMRAIVectorReal<NDIM, double> svr_u(
669 d_object_name + "::U_nul_vec_U_" + std::to_string(k), patch_hier, coarsest_ln, finest_ln);
670 svr_u.addComponent(sol_vec.getComponentVariable(0),
671 sol_vec.getComponentDescriptorIndex(0),
672 sol_vec.getControlVolumeIndex(0));
673
674 d_U_nul_vecs[k] = svr_u.cloneVector(svr_u.getName());
675 d_U_nul_vecs[k]->allocateVectorData(d_current_time);
676 d_U_nul_vecs[k]->setToScalar(0.0);
677 for (int ln = coarsest_ln; ln <= finest_ln; ++ln)
678 {
679 Pointer<PatchLevel<NDIM>> level = patch_hier->getPatchLevel(ln);
680 for (PatchLevel<NDIM>::Iterator p(level); p; p++)
681 {
682 Pointer<Patch<NDIM>> patch = level->getPatch(p());
683 Pointer<SideData<NDIM, double>> nul_data =
684 patch->getPatchData(d_nul_vecs[k]->getComponentDescriptorIndex(0));
685 nul_data->getArrayData(k).fillAll(1.0);
686 Pointer<SideData<NDIM, double>> U_nul_data =
687 patch->getPatchData(d_U_nul_vecs[k]->getComponentDescriptorIndex(0));
688 U_nul_data->getArrayData(k).fillAll(1.0);
689 }
690 }

Callers

nothing calls this directly

Calls 15

abs_equal_epsFunction · 0.85
free_vector_componentsFunction · 0.85
getRhoMethod · 0.80
getPatchLevelMethod · 0.80
getLinearSolverMethod · 0.80
getPreconditionerMethod · 0.80
getPatchHierarchyMethod · 0.45
getFinestLevelNumberMethod · 0.45

Tested by

no test coverage detected