Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

hp1D/linearForm.hh
Go to the documentation of this file.
00001 /* Linear form for hp 1D FEM
00002  */
00003 
00004 #pragma once
00005 
00006 #include <memory>
00007 #include "basics/typedefs.hh"
00008 #include "function/linearForm.hh"
00009 #include "formula.hh"
00010 
00011 namespace concepts {
00012   // forward declarations
00013   template<class F>
00014   class Formula;
00015 
00016   class BoundaryConditions;
00017 }
00018 
00019 namespace hp1D {
00020 
00021   using concepts::Real;
00022 
00023   // *************************************************************** Neumann **
00024 
00036   class Neumann : public concepts::Neumann<Real> {
00037   public:
00042     Neumann(const concepts::BoundaryConditions* bc); 
00043     virtual ~Neumann();
00044 
00052     void operator()(const concepts::Element<Real>& elm,
00053                     concepts::ElementMatrix<Real>& em);
00054   }; 
00055 
00056   // ***************************************************************** Riesz **
00057 
00064   template<class F = Real>
00065   class Riesz : public concepts::LinearForm<F>, public LinearFormHelper<0,F> {
00066   public:
00070     Riesz(const concepts::ElementFormulaContainer<F> frm,
00071           const concepts::BoundaryConditions* bc = 0); 
00072     virtual ~Riesz();
00073 
00080     void operator()(const concepts::Element<Real>& elm,
00081                     concepts::ElementMatrix<F>& em);
00082   protected:
00083     virtual std::ostream& info(std::ostream& os) const;
00084   private:
00086     Neumann neumann_;
00087   };
00088 
00089 
00090   // ********************************************** LinearFormGradInterp_Grad **
00091 
00100   template<typename F = Real>
00101   class LinearFormGradInterp_Grad : public concepts::LinearForm<F>,
00102                                     public LinearFormHelper<1,F> {
00103   public:
00108     LinearFormGradInterp_Grad(const concepts::ElementFormulaContainer<F> frm); 
00109     virtual ~LinearFormGradInterp_Grad();
00110 
00118     void operator()(const concepts::Element<Real>& elm,
00119                     concepts::ElementMatrix<F>& em);
00120   protected:
00121     virtual std::ostream& info(std::ostream& os) const;
00122   };
00123 
00124   // ********************************************** GradLinearForm **
00125 
00134   template<typename F = Real>
00135   class GradLinearForm : public concepts::LinearForm<F>,
00136                          public LinearFormHelper<1,F> {
00137   public:
00142     GradLinearForm (const concepts::ElementFormulaContainer<F> frm); 
00143     virtual ~GradLinearForm();
00144 
00152     void operator()(const concepts::Element<Real>& elm,
00153                     concepts::ElementMatrix<F>& em);
00154   protected:
00155     virtual std::ostream& info(std::ostream& os) const;
00156   };
00157 
00158 } // namespace hp1D

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)