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

pp

parent 6a2bcd55
Branches
Tags
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