Skip to content
Snippets Groups Projects
Commit c2a7e0d7 authored by Axel Modave's avatar Axel Modave
Browse files

pp

parent 6a2bcd55
No related branches found
No related tags found
No related merge requests found
......@@ -18,8 +18,7 @@ void eigenSolver::_try(int ierr) const
CHKERRABORT(PETSC_COMM_WORLD, ierr);
}
eigenSolver::eigenSolver(dofManager<double> *manager, std::string A,
std::string B, bool hermitian)
eigenSolver::eigenSolver(dofManager<double> *manager, std::string A, std::string B, bool hermitian)
: _A(0), _B(0), _hermitian(hermitian)
{
if (A.size()) {
......@@ -32,7 +31,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){}
eigenSolver::eigenSolver(linearSystemPETSc<double> *A, linearSystemPETSc<double> *B,
bool hermitian) : _A(A), _B(B), _hermitian(hermitian) {}
bool eigenSolver::solve(int numEigenValues, std::string which, std::string method, double tolVal, int iterMax)
{
......@@ -189,7 +189,6 @@ bool eigenSolver::solve(int numEigenValues, std::string which, std::string metho
}
void eigenSolver::normalize_mode(double scale) {
Msg::Info("Normalize all eigenvectors");
for (unsigned int i=0; i<_eigenVectors.size(); i++) {
......@@ -199,19 +198,15 @@ void eigenSolver::normalize_mode(double scale){
double normval = std::abs(val);
if (normval>norm)
norm = normval;
};
}
if (norm==0) {
Msg::Error("zero eigenvector");
return;
};
}
for (unsigned int j=0; j<_eigenVectors[i].size(); j++) {
_eigenVectors[i][j] *= (scale/norm);
};
};
};
}
}
}
#endif
......@@ -30,20 +30,26 @@ class eigenSolver{
bool hermitian=true);
bool solve(int numEigenValues=0, std::string which="", std::string method="krylovschur",
double tolVal=1.e-7, int iterMax=20);
int getNumEigenValues() {return _eigenValues.size();}
std::complex<double> getEigenValue(int num){ return _eigenValues[num]; }
std::vector<std::complex<double> > &getEigenVector(int num){ return _eigenVectors[num]; }
void clear()
{
_eigenValues.clear();
_eigenVectors.clear();
};
std::complex<double> getEigenVectorComp(int num, int com)
{
int getNumberEigenvectors() {return _eigenVectors.size();}
std::complex<double> getEigenValue(int num) {
return _eigenValues[num];
}
std::complex<double> getEigenVectorComp(int num, int com) {
return _eigenVectors[num][com];
};
int getNumberEigenvectors() {return _eigenVectors.size();};
std::vector<std::complex<double> > &getEigenVector(int num) {
return _eigenVectors[num];
}
void normalize_mode(double scale=1.);
void clear() {
_eigenValues.clear();
_eigenVectors.clear();
};
};
#else
......@@ -58,18 +64,17 @@ class eigenSolver{
std::string B="", bool hermitian=false) {}
eigenSolver(linearSystemPETSc<double> *A, linearSystemPETSc<double>* B=NULL,
bool hermitian=false) {}
bool solve(int numEigenValues=0, std::string which="")
{
bool solve(int=0, std::string="", std::string="", double=0, int=0) {
Msg::Error("Eigen solver requires SLEPc");
return false;
}
int getNumEigenValues() {return 0;}
int getNumberEigenvectors() {return 0;}
std::complex<double> getEigenValue(int num) {return 0.;}
std::complex<double> getEigenVectorComp(int num, int com) {return 0.;}
std::vector<std::complex<double> > &getEigenVector(int num) {return _dummy;}
void normalize_mode(double scale=1.) {}
void clear() {}
std::complex<double> getEigenVectorComp(int num, int com) { return 0.; }
int getNumberEigenvectors() {return 0;};
void normalize_mode(double scale=1.) {};
};
#endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment