00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef SUNDANCE_LINEAREIGENPROBLEM_H
00032 #define SUNDANCE_LINEAREIGENPROBLEM_H
00033
00034 #include "SundanceDefs.hpp"
00035 #include "SundanceLinearProblem.hpp"
00036 #include "SundanceEigensolution.hpp"
00037 #include "SundanceFunctionalEvaluator.hpp"
00038 #include "PlayaEigensolver.hpp"
00039
00040 namespace Sundance
00041 {
00042 using namespace Sundance;
00043 using namespace Sundance;
00044 using namespace Sundance;
00045 using namespace Sundance;
00046 using namespace Sundance;
00047 using namespace Teuchos;
00048 using namespace Playa;
00049
00050
00051
00052
00053
00054 class LinearEigenproblem
00055 {
00056 public:
00057
00058 LinearEigenproblem(){}
00059
00060 LinearEigenproblem(
00061 const Mesh& mesh, const Expr& eqn,
00062 const Expr& v, const Expr& u,
00063 const VectorType<double>& vecType) ;
00064
00065 LinearEigenproblem(
00066 const Mesh& mesh, const Expr& eqn,
00067 const Expr& v, const Expr& u,
00068 const VectorType<double>& vecType,
00069 bool lumpMass) ;
00070
00071 LinearEigenproblem(
00072 const Mesh& mesh, const Expr& eqn,
00073 const Expr& massExpr,
00074 const Expr& v, const Expr& u,
00075 const VectorType<double>& vecType,
00076 bool lumpMass) ;
00077
00078
00079 Eigensolution solve(const Eigensolver<double>& solver) const ;
00080
00081
00082 LinearOperator<double> getK() const {return kProb_.getOperator();}
00083
00084
00085 LinearOperator<double> getM() const {return mProb_.getOperator();}
00086
00087
00088 private:
00089
00090 Array<Expr> makeEigenfunctions(Array<Vector<double> >& ev) const ;
00091
00092
00093 LinearProblem makeMassProb(
00094 const Mesh& mesh,
00095 const Expr& massExpr,
00096 const Expr& v, const Expr& u,
00097 const VectorType<double>& vecType) const ;
00098
00099
00100 LinearOperator<double>
00101 lumpedOperator(const LinearOperator<double>& M) const ;
00102
00103 bool lumpMass_;
00104 LinearProblem kProb_;
00105 LinearProblem mProb_;
00106 LinearOperator<double> M_;
00107 LinearOperator<double> MUnlumped_;
00108 DiscreteSpace discSpace_;
00109 };
00110
00111
00112
00113
00114 }
00115
00116
00117 #endif