doi = {10.1007/978-3-031-07312-0_7},
url = {https://doi.org/10.1007/978-3-031-07312-0_7}
}
+
+@misc{Barnafi2022,
+ doi = {10.48550/ARXIV.2208.06191},
+ url = {https://arxiv.org/abs/2208.06191},
+ author = {Barnafi, Nicolás A. and Pavarino, Luca F. and Scacchi, Simone},
+ title = {A comparative study of scalable multilevel preconditioners for cardiac mechanics},
+ publisher = {arXiv},
+ year = {2022},
+}
-New: The PetscWrappers::PreconditionBDDC preconditioner has been implemented. It requires a special matrix type (IS), which is initialized with the new function PetscWrappers::reinit_IS.
+New: The PetscWrappers::PreconditionBDDC preconditioner has been implemented. It requires a special matrix type (IS), which is initialized with the new function PetscWrappers::reinit.
<br>
(Nicolas Barnafi, 2022/05/10)
* <li> A coarse solver: Continuity between each subdomain is imposed in a small number of DoFs, referred to as <em>primal DoFs</em>. This solver solves such problem.
* </ul>
*
- * The size of the primal space is determined through the @p AdditionalData parameters.
+ * The size of the primal space is determined through the @p AdditionalData parameters. A thorough study of the performance of this solver in the context of cardiac mechanics, together with further details on this interface, is available in @cite Barnafi2022.
*
* @ingroup PETScWrappers
*/
using PreconditionerBase DEAL_II_DEPRECATED = PreconditionBase;
} // namespace PETScWrappers
-template class PETScWrappers::PreconditionBDDC<2>;
-template class PETScWrappers::PreconditionBDDC<3>;
DEAL_II_NAMESPACE_CLOSE
PetscErrorCode ierr = PCSetType(pc, const_cast<char *>(PCBDDC));
AssertThrow(ierr == 0, ExcPETScError(ierr));
+ // The matrix must be of IS type. We check for this to avoid the PETSc error
+ // in order to suggest the correct matrix reinit method.
+ {
+ MatType current_type;
+ ierr = MatGetType(matrix, ¤t_type);
+ AssertThrow(ierr == 0, ExcPETScError(ierr));
+ AssertThrow(
+ strcmp(current_type, MATIS) == 0,
+ ExcMessage(
+ "Matrix must be of IS type. For this, the variant of reinit that includes the active dofs must be used."));
+ }
+
+
std::stringstream ssStream;
if (additional_data.use_vertices)
} // namespace PETScWrappers
+template class PETScWrappers::PreconditionBDDC<2>;
+template class PETScWrappers::PreconditionBDDC<3>;
+
DEAL_II_NAMESPACE_CLOSE
#endif // DEAL_II_WITH_PETSC