*/
void
set_initial_vector
- (const PETScWrappers::VectorBase &this_initial_vector);
+ (const PETScWrappers::VectorBase &this_initial_vector) DEAL_II_DEPRECATED;
+
+ /**
+ * Set the initial vector space for the solver.
+ */
+ template <typename Vector>
+ void
+ set_initial_space
+ (const std::vector<Vector> &initial_vectors);
/**
* Set the spectral transformation to be used.
const PETScWrappers::MatrixBase *opB;
/**
- * An initial vector used to "feed" some SLEPc solvers.
+ * An initial vector space used in SLEPc solvers.
*/
- const PETScWrappers::VectorBase *initial_vector;
+ std::vector<Vec> initial_vectors;
/**
* Pointer to an an object that describes transformations that can be
real_eigenvectors[index], imag_eigenvectors[index]);
}
+ template <typename Vector>
+ void
+ SolverBase::set_initial_space(const std::vector<Vector> &vectors)
+ {
+ initial_vectors.resize(vectors.size());
+ for (unsigned int i = 0; i < initial_vectors.size(); i++)
+ {
+ initial_vectors[i] = vectors[i];
+ }
+ }
+
}
DEAL_II_NAMESPACE_CLOSE
set_problem (EPS_GNHEP),
opA (NULL),
opB (NULL),
- initial_vector (NULL),
transformation (NULL)
{}
void
SolverBase::set_initial_vector (const PETScWrappers::VectorBase &this_initial_vector)
{
- initial_vector = (&this_initial_vector);
+ initial_vectors.resize(1);
+ initial_vectors[0] = this_initial_vector;
}
void
AssertThrow (ierr == 0, ExcSLEPcError(ierr));
// set the initial vector(s) if any
- if (initial_vector && initial_vector->size() != 0)
+ if (initial_vectors.size() != 0)
{
#if DEAL_II_PETSC_VERSION_LT(3,1,0)
- ierr = EPSSetInitialVector (solver_data->eps, *initial_vector);
+ ierr = EPSSetInitialVector (solver_data->eps, &initial_vectors[0]);
#else
- Vec this_vector = *initial_vector;
- ierr = EPSSetInitialSpace (solver_data->eps, 1, &this_vector);
+ ierr = EPSSetInitialSpace (solver_data->eps, initial_vectors.size(), &initial_vectors[0]);
#endif
AssertThrow (ierr == 0, ExcSLEPcError(ierr));