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_L2PROJECTOR_H
00032 #define SUNDANCE_L2PROJECTOR_H
00033 
00034 #include "SundanceDefs.hpp"
00035 #include "SundanceMesh.hpp"
00036 #include "SundanceExpr.hpp"
00037 #include "SundanceDiscreteFunction.hpp"
00038 #include "SundanceDiscreteSpace.hpp"
00039 #include "SundanceLinearProblem.hpp"
00040 #include "SundanceCoordinateSystem.hpp"
00041 #include "PlayaLinearOperatorDecl.hpp"
00042 #include "PlayaLinearSolverDecl.hpp"
00043 #include "PlayaVectorDecl.hpp"
00044 #include "PlayaVectorType.hpp"
00045 
00046 namespace Sundance
00047 {
00048 using namespace Playa;
00049 using namespace Teuchos;
00050 
00051 
00052 
00053 
00054 class L2Projector
00055 {
00056 public:
00057 
00058   L2Projector(){;}
00059 
00060   L2Projector(const DiscreteSpace& space, 
00061     const Expr& expr);
00062 
00063   L2Projector(const DiscreteSpace& space, 
00064     const Expr& expr,
00065     const QuadratureFamily& quad);
00066 
00067   L2Projector(const DiscreteSpace& space, 
00068     const Expr& expr,
00069     const LinearSolver<double>& solver);
00070 
00071   L2Projector(const DiscreteSpace& space, 
00072     const Expr& expr,
00073     const LinearSolver<double>& solver,
00074     const QuadratureFamily& quad);
00075 
00076   L2Projector(const DiscreteSpace& space, 
00077     const CoordinateSystem& coordSys,
00078     const Expr& expr);
00079 
00080   L2Projector(const DiscreteSpace& space, 
00081     const CoordinateSystem& coordSys,
00082     const Expr& expr,
00083     const LinearSolver<double>& solver);
00084 
00085 
00086   Expr project() const {return prob_.solve(solver_);}
00087 
00088 
00089   const LinearProblem& prob() const {return prob_;}
00090 
00091 private:
00092 
00093   void init(const DiscreteSpace& space,       
00094     const CoordinateSystem& coordSys,
00095     const Expr& expr,
00096     const LinearSolver<double>& solver,
00097     const QuadratureFamily& quad);
00098     
00099   LinearProblem prob_;
00100 
00101   LinearSolver<double> solver_;
00102     
00103 };
00104 }
00105 
00106 
00107 #endif