From: Daniel Arndt Date: Mon, 17 Oct 2016 15:46:11 +0000 (+0200) Subject: Restrict the possible options for eigenvalues in (P)Arpack X-Git-Tag: v8.5.0-rc1~558^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F3257%2Fhead;p=dealii.git Restrict the possible options for eigenvalues in (P)Arpack --- diff --git a/include/deal.II/lac/arpack_solver.h b/include/deal.II/lac/arpack_solver.h index c2b1ce06fb..b3507eb7c3 100644 --- a/include/deal.II/lac/arpack_solver.h +++ b/include/deal.II/lac/arpack_solver.h @@ -311,7 +311,20 @@ AdditionalData (const unsigned int number_of_arnoldi_vectors, number_of_arnoldi_vectors(number_of_arnoldi_vectors), eigenvalue_of_interest(eigenvalue_of_interest), symmetric(symmetric) -{} +{ + //Check for possible options for symmetric problems + if (symmetric) + { + Assert(eigenvalue_of_interest!=largest_real_part, + ExcMessage("'largest real part' can only be used for non-symmetric problems!")); + Assert(eigenvalue_of_interest!=smallest_real_part, + ExcMessage("'smallest real part' can only be used for non-symmetric problems!")); + Assert(eigenvalue_of_interest!=largest_imaginary_part, + ExcMessage("'largest imaginary part' can only be used for non-symmetric problems!")); + Assert(eigenvalue_of_interest!=smallest_imaginary_part, + ExcMessage("'smallest imaginary part' can only be used for non-symmetric problems!")); + } +} inline diff --git a/include/deal.II/lac/parpack_solver.h b/include/deal.II/lac/parpack_solver.h index 9a276aa9ee..d89d16c4f5 100644 --- a/include/deal.II/lac/parpack_solver.h +++ b/include/deal.II/lac/parpack_solver.h @@ -496,7 +496,20 @@ AdditionalData (const unsigned int number_of_arnoldi_vectors, number_of_arnoldi_vectors(number_of_arnoldi_vectors), eigenvalue_of_interest(eigenvalue_of_interest), symmetric(symmetric) -{} +{ + //Check for possible options for symmetric problems + if (symmetric) + { + Assert(eigenvalue_of_interest!=largest_real_part, + ExcMessage("'largest real part' can only be used for non-symmetric problems!")); + Assert(eigenvalue_of_interest!=smallest_real_part, + ExcMessage("'smallest real part' can only be used for non-symmetric problems!")); + Assert(eigenvalue_of_interest!=largest_imaginary_part, + ExcMessage("'largest imaginary part' can only be used for non-symmetric problems!")); + Assert(eigenvalue_of_interest!=smallest_imaginary_part, + ExcMessage("'smallest imaginary part' can only be used for non-symmetric problems!")); + } +} template PArpackSolver::PArpackSolver (SolverControl &control, @@ -657,7 +670,6 @@ void PArpackSolver::solve // "LI" largest imaginary part // "SI" smallest imaginary part // "BE" both ends of spectrum simultaneous - char which[3]; switch (additional_data.eigenvalue_of_interest) {