$extrastylesheet
fe_transformation_base.h
Go to the documentation of this file.
00001 // The libMesh Finite Element Library.
00002 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
00003 
00004 // This library is free software; you can redistribute it and/or
00005 // modify it under the terms of the GNU Lesser General Public
00006 // License as published by the Free Software Foundation; either
00007 // version 2.1 of the License, or (at your option) any later version.
00008 
00009 // This library is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // Lesser General Public License for more details.
00013 
00014 // You should have received a copy of the GNU Lesser General Public
00015 // License along with this library; if not, write to the Free Software
00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018 #ifndef LIBMESH_FE_TRANSFORMATION_BASE_H
00019 #define LIBMESH_FE_TRANSFORMATION_BASE_H
00020 
00021 #include "libmesh/fe_base.h"
00022 #include "libmesh/fe_type.h"
00023 
00024 namespace libMesh
00025 {
00026 
00027 //Forward Declarations
00028 template< typename T > class FEGenericBase;
00029 template< typename T > class H1FETransformation;
00030 template< typename T > class HCurlFETransformation;
00031 
00040 template< typename OutputShape >
00041 class FETransformationBase
00042 {
00043 public:
00044 
00045   FETransformationBase(){}
00046   virtual ~FETransformationBase(){}
00047 
00051   static UniquePtr<FETransformationBase<OutputShape> > build( const FEType& type );
00052 
00057   virtual void map_phi( const unsigned int dim,
00058                         const Elem* const elem,
00059                         const std::vector<Point>& qp,
00060                         const FEGenericBase<OutputShape>& fe,
00061                         std::vector<std::vector<OutputShape> >& phi ) const = 0;
00062 
00067   virtual void map_dphi( const unsigned int dim,
00068                          const Elem* const elem,
00069                          const std::vector<Point>& qp,
00070                          const FEGenericBase<OutputShape>& fe,
00071                          std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputGradient> >& dphi,
00072                          std::vector<std::vector<OutputShape> >& dphidx,
00073                          std::vector<std::vector<OutputShape> >& dphidy,
00074                          std::vector<std::vector<OutputShape> >& dphidz  ) const = 0;
00075 
00076 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
00077 
00081   virtual void map_d2phi( const unsigned int dim,
00082                           const Elem* const elem,
00083                           const std::vector<Point>& qp,
00084                           const FEGenericBase<OutputShape>& fe,
00085                           std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputTensor> >& d2phi,
00086                           std::vector<std::vector<OutputShape> >& d2phidx2,
00087                           std::vector<std::vector<OutputShape> >& d2phidxdy,
00088                           std::vector<std::vector<OutputShape> >& d2phidxdz,
00089                           std::vector<std::vector<OutputShape> >& d2phidy2,
00090                           std::vector<std::vector<OutputShape> >& d2phidydz,
00091                           std::vector<std::vector<OutputShape> >& d2phidz2  ) const = 0;
00092 #endif //LIBMESH_ENABLE_SECOND_DERIVATIVES
00093 
00094 
00099   virtual void map_curl( const unsigned int dim,
00100                          const Elem* const elem,
00101                          const std::vector<Point>& qp,
00102                          const FEGenericBase<OutputShape>& fe,
00103                          std::vector<std::vector<OutputShape> >& curl_phi ) const = 0;
00104 
00109   virtual void map_div( const unsigned int dim,
00110                         const Elem* const elem,
00111                         const std::vector<Point>& qp,
00112                         const FEGenericBase<OutputShape>& fe,
00113                         std::vector<std::vector<typename FEGenericBase<OutputShape>::OutputDivergence> >& div_phi ) const = 0;
00114 
00115 }; // class FETransformationBase
00116 
00117 }
00118 
00119 #endif // LIBMESH_FE_TRANSFORMATION_BASE_H