static
int
convergence_test (EPS eps,
+#ifdef PETSC_USE_64BIT_INDICES
+ const PetscInt iteration,
+#else
const int iteration,
- const PetscScalar residual_norm,
+#endif
+ const PetscReal residual_norm,
EPSConvergedReason *reason,
void *solver_control);
if (n_converged > n_eigenvectors)
n_converged = n_eigenvectors;
+ AssertThrow (n_converged == n_eigenvectors, ExcSLEPcWrappersUsageError());
AssertThrow (vr.size() >= 1, ExcSLEPcWrappersUsageError());
vr.resize (n_converged, vr.front());
if (n_converged > n_eigenvectors)
n_converged = n_eigenvectors;
-
- // TODO: Fix this properly
- if (n_converged < n_eigenvectors)
- {}
+ AssertThrow (n_converged == n_eigenvectors, ExcSLEPcWrappersUsageError());
AssertThrow (vr.size() >= 1, ExcSLEPcWrappersUsageError());
vr.resize (n_converged, vr.front());
// use them. The key is to use local ranges etc., which still needs to be
// implemented.
#ifdef DEAL_II_USE_PETSC
+#ifndef DEAL_II_USE_PETSC_COMPLEX
VECTOR_FUNCTIONS(PETScWrappers::Vector);
VECTOR_FUNCTIONS(PETScWrappers::BlockVector);
VECTOR_FUNCTIONS(PETScWrappers::MPI::Vector);
VECTOR_FUNCTIONS(PETScWrappers::MPI::BlockVector);
#endif
+#endif
#ifdef DEAL_II_USE_TRILINOS
VECTOR_FUNCTIONS(TrilinosWrappers::Vector);
int
SolverBase::convergence_test (EPS /*eps*/,
- const int iteration,
- const PetscScalar residual_norm,
- EPSConvergedReason *reason,
- void *solver_control_x)
+#ifdef PETSC_USE_64BIT_INDICES
+ const PetscInt iteration,
+#else
+ const int iteration,
+#endif
+ const PetscReal residual_norm,
+ EPSConvergedReason *reason,
+ void *solver_control_x)
{
SolverControl &solver_control
= *reinterpret_cast<SolverControl*>(solver_control_x);