From 202734783dd3f0249075ac3c45ce5c8a94490df9 Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Mon, 17 Oct 2016 17:46:11 +0200 Subject: [PATCH] Restrict the possible options for eigenvalues in (P)Arpack --- include/deal.II/lac/arpack_solver.h | 15 ++++++++++++++- include/deal.II/lac/parpack_solver.h | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) 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) { -- 2.39.5