$extrastylesheet
fe_macro.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 
00019 #ifndef LIBMESH_FE_MACRO_H
00020 #define LIBMESH_FE_MACRO_H
00021 
00022 
00023 
00024 
00031 #define INSTANTIATE_MAPS(_dim,_type)                                    \
00032   template Point FE<_dim,_type>::map(const Elem*,const Point&);         \
00033   template Point FE<_dim,_type>::map_xi(const Elem*,const Point&);      \
00034   template Point FE<_dim,_type>::map_eta(const Elem*,const Point&);     \
00035   template Point FE<_dim,_type>::map_zeta(const Elem*,const Point&);    \
00036   template void  FE<_dim,_type>::inverse_map(const Elem*,const std::vector<Point>&,std::vector<Point>&,Real,bool); \
00037   template Point FE<_dim,_type>::inverse_map(const Elem*,const Point&,Real,bool)
00038 
00039 #define INSTANTIATE_SUBDIVISION_MAPS                                    \
00040   template Point FE<2,SUBDIVISION>::map(const Elem*,const Point&);      \
00041   template Point FE<2,SUBDIVISION>::map_xi(const Elem*,const Point&);   \
00042   template Point FE<2,SUBDIVISION>::map_eta(const Elem*,const Point&);  \
00043   template Point FE<2,SUBDIVISION>::map_zeta(const Elem*,const Point&)
00044 
00045 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
00046 
00047 #define INSTANTIATE_SUBDIVISION_FE                                      \
00048   template unsigned int FE<2,SUBDIVISION>::n_shape_functions () const;  \
00049   template void         FE<2,SUBDIVISION>::attach_quadrature_rule (QBase*); \
00050   template unsigned int FE<2,SUBDIVISION>::n_quadrature_points () const; \
00051   template void         FE<2,SUBDIVISION>::reinit(const Elem*,const std::vector<Point>* const,const std::vector<Real>* const); \
00052   template void         FE<2,SUBDIVISION>::init_base_shape_functions(const std::vector<Point>&, const Elem*); \
00053   template void         FE<2,SUBDIVISION>::init_shape_functions(const std::vector<Point>&, const Elem*)
00054 
00055 #else // LIBMESH_ENABLE_INFINITE_ELEMENTS
00056 
00057 #define INSTANTIATE_SUBDIVISION_FE                                      \
00058   template unsigned int FE<2,SUBDIVISION>::n_shape_functions () const;  \
00059   template void         FE<2,SUBDIVISION>::attach_quadrature_rule (QBase*); \
00060   template unsigned int FE<2,SUBDIVISION>::n_quadrature_points () const; \
00061   template void         FE<2,SUBDIVISION>::reinit(const Elem*,const std::vector<Point>* const,const std::vector<Real>* const); \
00062   template void         FE<2,SUBDIVISION>::init_shape_functions(const std::vector<Point>&, const Elem*)
00063 
00064 #endif // LIBMESH_ENABLE_INFINITE_ELEMENTS
00065 
00066 
00067 #ifndef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
00068 
00069 #define INSTANTIATE_FE(_dim)   template class FE< (_dim), CLOUGH>;      \
00070   template class FE< (_dim), HERMITE>;                                  \
00071   template class FE< (_dim), HIERARCHIC>;                               \
00072   template class FE< (_dim), L2_HIERARCHIC>;                            \
00073   template class FE< (_dim), LAGRANGE>;                                 \
00074   template class FE< (_dim), LAGRANGE_VEC>;                             \
00075   template class FE< (_dim), L2_LAGRANGE>;                              \
00076   template class FE< (_dim), MONOMIAL>;                                 \
00077   template class FE< (_dim), SCALAR>;                                   \
00078   template class FE< (_dim), XYZ>;                                      \
00079   template class FE< (_dim), NEDELEC_ONE>
00080 
00081 #define INSTANTIATE_ALL_MAPS(_dim)              \
00082   INSTANTIATE_MAPS(_dim,CLOUGH);                \
00083   INSTANTIATE_MAPS(_dim,HERMITE);               \
00084   INSTANTIATE_MAPS(_dim,HIERARCHIC);            \
00085   INSTANTIATE_MAPS(_dim,L2_HIERARCHIC);         \
00086   INSTANTIATE_MAPS(_dim,LAGRANGE);              \
00087   INSTANTIATE_MAPS(_dim,LAGRANGE_VEC);          \
00088   INSTANTIATE_MAPS(_dim,L2_LAGRANGE);           \
00089   INSTANTIATE_MAPS(_dim,MONOMIAL);              \
00090   INSTANTIATE_MAPS(_dim,SCALAR);                \
00091   INSTANTIATE_MAPS(_dim,XYZ);                   \
00092   INSTANTIATE_MAPS(_dim,NEDELEC_ONE)
00093 
00094 #else //LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
00095 
00096 #define INSTANTIATE_FE(_dim)   template class FE< (_dim), CLOUGH>;      \
00097   template class FE< (_dim), HERMITE>;                                  \
00098   template class FE< (_dim), HIERARCHIC>;                               \
00099   template class FE< (_dim), L2_HIERARCHIC>;                            \
00100   template class FE< (_dim), LAGRANGE>;                                 \
00101   template class FE< (_dim), LAGRANGE_VEC>;                             \
00102   template class FE< (_dim), L2_LAGRANGE>;                              \
00103   template class FE< (_dim), MONOMIAL>;                                 \
00104   template class FE< (_dim), SCALAR>;                                   \
00105   template class FE< (_dim), BERNSTEIN>;                                \
00106   template class FE< (_dim), SZABAB>;                                   \
00107   template class FE< (_dim), XYZ>;                                      \
00108   template class FE< (_dim), NEDELEC_ONE>
00109 
00110 #define INSTANTIATE_ALL_MAPS(_dim)              \
00111   INSTANTIATE_MAPS(_dim,CLOUGH);                \
00112   INSTANTIATE_MAPS(_dim,HERMITE);               \
00113   INSTANTIATE_MAPS(_dim,HIERARCHIC);            \
00114   INSTANTIATE_MAPS(_dim,L2_HIERARCHIC);         \
00115   INSTANTIATE_MAPS(_dim,LAGRANGE);              \
00116   INSTANTIATE_MAPS(_dim,LAGRANGE_VEC);          \
00117   INSTANTIATE_MAPS(_dim,L2_LAGRANGE);           \
00118   INSTANTIATE_MAPS(_dim,MONOMIAL);              \
00119   INSTANTIATE_MAPS(_dim,SCALAR);                \
00120   INSTANTIATE_MAPS(_dim,BERNSTEIN);             \
00121   INSTANTIATE_MAPS(_dim,SZABAB);                \
00122   INSTANTIATE_MAPS(_dim,XYZ);                   \
00123   INSTANTIATE_MAPS(_dim,NEDELEC_ONE)
00124 
00125 #endif //LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
00126 
00127 #endif // LIBMESH_FE_MACRO_H