From 0fd98e81b153e36441e94af6bcc395194e9a52e8 Mon Sep 17 00:00:00 2001 From: Van Dung Nguyen <vandung.nguyen@ulg.ac.be> Date: Tue, 17 May 2011 07:03:50 +0000 Subject: [PATCH] eigenSolver add constructor passed by linearSystem --- Solver/eigenSolver.cpp | 8 +++++--- Solver/eigenSolver.h | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Solver/eigenSolver.cpp b/Solver/eigenSolver.cpp index 8305f9bddb..d683eb5ae0 100644 --- a/Solver/eigenSolver.cpp +++ b/Solver/eigenSolver.cpp @@ -16,7 +16,7 @@ eigenSolver::eigenSolver(dofManager<double> *manager, std::string A, { if(A.size()){ _A = dynamic_cast<linearSystemPETSc<double>*>(manager->getLinearSystem(A)); - if(!_A) Msg::Error("Could not find PETSc system '%s'", A.c_str()); + if(!_A) Msg::Error("Could not find PETSc system '%s' ffffd", A.c_str()); } if(B.size()){ _B = dynamic_cast<linearSystemPETSc<double>*>(manager->getLinearSystem(B)); @@ -24,6 +24,8 @@ eigenSolver::eigenSolver(dofManager<double> *manager, std::string A, } } +eigenSolver::eigenSolver(linearSystemPETSc<double> *A,linearSystemPETSc<double> *B, bool hermitian) : _A(A), _B(B), _hermitian(hermitian){} + bool eigenSolver::solve(int numEigenValues, std::string which) { if(!_A) return false; @@ -53,8 +55,8 @@ bool eigenSolver::solve(int numEigenValues, std::string which) // set some default options _try(EPSSetDimensions(eps, numEigenValues, PETSC_DECIDE, PETSC_DECIDE)); - _try(EPSSetTolerances(eps, 1.e-7, 20));//1.e-6 50 - //_try(EPSSetType(eps, EPSKRYLOVSCHUR)); //default + //_try(EPSSetTolerances(eps, 1.e-7, 20));//1.e-6 50 + _try(EPSSetType(eps, EPSKRYLOVSCHUR)); //default _try(EPSSetType(eps, EPSARNOLDI)); //_try(EPSSetType(eps, EPSARPACK)); //_try(EPSSetType(eps, EPSPOWER)); diff --git a/Solver/eigenSolver.h b/Solver/eigenSolver.h index 7465fb1e19..46c701b9de 100644 --- a/Solver/eigenSolver.h +++ b/Solver/eigenSolver.h @@ -26,7 +26,8 @@ class eigenSolver{ void _try(int ierr) const { CHKERRABORT(PETSC_COMM_WORLD, ierr); } public: eigenSolver(dofManager<double> *manager, std::string A, - std::string B="", bool hermitian=false); + std::string B="", bool hermitian=true); + eigenSolver(linearSystemPETSc<double> *A,linearSystemPETSc<double>* B = NULL, bool hermitian=false); bool solve(int numEigenValues=0, std::string which=""); int getNumEigenValues(){ return _eigenValues.size(); } std::complex<double> getEigenValue(int num){ return _eigenValues[num]; } -- GitLab