NGSolve  4.9
fem/scalarfe.hpp
00001 #ifndef FILE_SCALARFE
00002 #define FILE_SCALARFE
00003 
00004 /*********************************************************************/
00005 /* File:   scalarfe.hpp                                              */
00006 /* Author: Joachim Schoeberl                                         */
00007 /* Date:   25. Mar. 2000                                             */
00008 /*********************************************************************/
00009 
00010 namespace ngfem
00011 {
00012 
00013 
00018   template <int D>
00019   class NGS_DLL_HEADER ScalarFiniteElement : public FiniteElement
00020   {
00021   public:
00023     ScalarFiniteElement () { ; } // dimspace = D; }
00025     ScalarFiniteElement (ELEMENT_TYPE aeltype, 
00026                          int andof = 0, int aorder = 0)
00027       : FiniteElement (aeltype, andof, aorder) 
00028     { ; }
00029 
00031     virtual ~ScalarFiniteElement () { ; }
00032 
00034     virtual string ClassName() const { return "ScalarFiniteElement"; }
00035 
00040     const FlatVector<> GetShape (const IntegrationPoint & ip, 
00041                                  LocalHeap & lh) const
00042     {
00043       FlatVector<> shape(ndof, lh);
00044       CalcShape (ip, shape);
00045       return shape;
00046     }
00047 
00052     const FlatMatrixFixWidth<D> 
00053     GetDShape (const IntegrationPoint & ip, LocalHeap & lh) const
00054     {
00055       FlatMatrixFixWidth<D> dshape(ndof, lh);
00056       CalcDShape (ip, dshape);
00057       return dshape;
00058     }
00059 
00060 
00062     virtual void CalcShape (const IntegrationPoint & ip, 
00063                             FlatVector<> shape) const = 0;
00064   
00066     virtual void CalcDShape (const IntegrationPoint & ip, 
00067                              FlatMatrixFixWidth<D> dshape) const;
00068 
00070     virtual void CalcMappedDShape (const MappedIntegrationPoint<D,D> & mip, 
00071                                    FlatMatrixFixWidth<D> dshape) const;
00072 
00073 
00074 
00075 
00080     const FlatMatrix<> GetDDShape (const IntegrationPoint & ip, LocalHeap & lh) const
00081     {
00082       FlatMatrix<> ddshape(ndof, D*D, lh);
00083       CalcDDShape (ip, ddshape);
00084       return ddshape;
00085     }
00086 
00088     virtual void CalcDDShape (const IntegrationPoint & ip, 
00089                               FlatMatrix<> ddshape) const;
00090 
00091 
00092 
00097     virtual double Evaluate (const IntegrationPoint & ip, FlatVector<> x) const;
00098 
00103     virtual Vec<D> EvaluateGrad (const IntegrationPoint & ip, FlatVector<> x) const;
00104 
00105     
00110     virtual void Evaluate (const IntegrationRule & ir, FlatVector<> coefs, FlatVector<> values) const;
00111 
00116     virtual void EvaluateGrad (const IntegrationRule & ir, FlatVector<> coefs, FlatMatrixFixWidth<D> values) const;
00117 
00118 
00123     virtual void EvaluateTrans (const IntegrationRule & ir, FlatVector<> values, FlatVector<> coefs) const;
00124 
00125 
00130     virtual void EvaluateGradTrans (const IntegrationRule & ir, FlatMatrixFixWidth<D> values, FlatVector<> coefs) const;
00131 
00132 
00133 
00135     virtual void EvaluateShapeGrid (const IntegrationRuleTP<D> & ir,
00136                                     const FlatVector<double> coefs,
00137                                     FlatVector<double> gridvalues,
00138                                     LocalHeap & lh) const;
00139                         
00141     virtual void EvaluateShapeGridTrans (const IntegrationRuleTP<D> & ir,
00142                                          const FlatVector<double> gridvalues,
00143                                          FlatVector<double> coefs,
00144                                          LocalHeap & lh) const;
00145                         
00147     virtual void EvaluateDShapeGrid (const IntegrationRuleTP<D> & ir,
00148                                      const FlatVector<double> coefs,
00149                                      FlatMatrixFixWidth<D> gridvalues,
00150                                      LocalHeap & lh) const;
00151                         
00153     virtual void EvaluateDShapeGridTrans (const IntegrationRuleTP<D> & ir,
00154                                           const FlatMatrixFixWidth<D> gridvalues,
00155                                           FlatVector<double> coefs,
00156                                           LocalHeap & lh) const;
00157   };
00158 
00159 
00160 }
00161 
00162 #endif