else
set_option_value("-pc_bddc_symmetric", "false");
if (additional_data.coords.size() > 0)
+# if DEAL_II_PETSC_VERSION_GTE(3, 9, 0)
{
set_option_value("-pc_bddc_corner_selection", "true");
// Convert coords vector to PETSc data array
ierr = PCSetCoordinates(pc, 0, 0, NULL);
AssertThrow(ierr == 0, ExcPETScError(ierr));
}
+# else
+ {
+ AssertThrow(false, ExcMessage("Corner selection in BDDC is only available with PETSc 3.9.0 or newer");
+ }
+# endif
ierr = PCSetFromOptions(pc);
PETScWrappers::PreconditionBDDC<2> preconditioner;
PETScWrappers::PreconditionBDDC<2>::AdditionalData data;
- // Now we setup the dof coordinates
+// Now we setup the dof coordinates if a sufficiently new PETSc is used
+#if DEAL_II_PETSC_VERSION_GTE(3, 9, 0)
std::map<types::global_dof_index, Point<2>> dof_2_point;
DoFTools::map_dofs_to_support_points(MappingQ1<2>(),
dof_handler,
{
coords[d2p.first] = d2p.second;
}
+ data.coords = coords;
+#endif
+ data.use_vertices = true;
preconditioner.initialize(system_matrix, data);
check_solver_within_range(solver.solve(system_matrix,