fe_transformation_base.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2018 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
21 #include "libmesh/fe_type.h"
22 #include "libmesh/auto_ptr.h" // libmesh_make_unique
23 
24 namespace libMesh
25 {
26 
27 template<typename OutputShape>
28 std::unique_ptr<FETransformationBase<OutputShape>> FETransformationBase<OutputShape>::build( const FEType & fe_type )
29 {
30  switch (fe_type.family)
31  {
32  // H1 Conforming Elements
33  case LAGRANGE:
34  case HIERARCHIC:
35  case BERNSTEIN:
36  case SZABAB:
37  case CLOUGH: // PB: Really H2
38  case HERMITE: // PB: Really H2
39  case SUBDIVISION:
40  case LAGRANGE_VEC:
41  case MONOMIAL: // PB: Shouldn't this be L2 conforming?
42  case XYZ: // PB: Shouldn't this be L2 conforming?
43  case L2_HIERARCHIC: // PB: Shouldn't this be L2 conforming?
44  case L2_LAGRANGE: // PB: Shouldn't this be L2 conforming?
45  case JACOBI_20_00: // PB: For infinite elements...
46  case JACOBI_30_00: // PB: For infinite elements...
47  return libmesh_make_unique<H1FETransformation<OutputShape>>();
48 
49  // HCurl Conforming Elements
50  case NEDELEC_ONE:
51  return libmesh_make_unique<HCurlFETransformation<OutputShape>>();
52 
53  // HDiv Conforming Elements
54  // L2 Conforming Elements
55 
56  // Other...
57  case SCALAR:
58  // Should never need this for SCALARs
59  return libmesh_make_unique<H1FETransformation<OutputShape>>();
60 
61  default:
62  libmesh_error_msg("Unknown family = " << fe_type.family);
63  }
64 }
65 
66 template class FETransformationBase<Real>;
68 
69 } // namespace libMesh
Manages the family, order, etc. parameters for a given FE.
Definition: fe_type.h:179
FEFamily family
Definition: fe_type.h:204
static std::unique_ptr< FETransformationBase< OutputShape > > build(const FEType &type)