$extrastylesheet
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