libMesh
fe_transformation_base.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2019 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 
18 #include "libmesh/fe_transformation_base.h"
19 #include "libmesh/h1_fe_transformation.h"
20 #include "libmesh/hcurl_fe_transformation.h"
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 MONOMIAL_VEC: // PB: Shouldn't this be L2 conforming?
43  case XYZ: // PB: Shouldn't this be L2 conforming?
44  case RATIONAL_BERNSTEIN:
45  case L2_HIERARCHIC: // PB: Shouldn't this be L2 conforming?
46  case L2_LAGRANGE: // PB: Shouldn't this be L2 conforming?
47  case JACOBI_20_00: // PB: For infinite elements...
48  case JACOBI_30_00: // PB: For infinite elements...
49  return libmesh_make_unique<H1FETransformation<OutputShape>>();
50 
51  // HCurl Conforming Elements
52  case NEDELEC_ONE:
53  return libmesh_make_unique<HCurlFETransformation<OutputShape>>();
54 
55  // HDiv Conforming Elements
56  // L2 Conforming Elements
57 
58  // Other...
59  case SCALAR:
60  // Should never need this for SCALARs
61  return libmesh_make_unique<H1FETransformation<OutputShape>>();
62 
63  default:
64  libmesh_error_msg("Unknown family = " << fe_type.family);
65  }
66 }
67 
68 template class FETransformationBase<Real>;
70 
71 } // namespace libMesh
libMesh::FETransformationBase::build
static std::unique_ptr< FETransformationBase< OutputShape > > build(const FEType &type)
Builds an FETransformation object based on the finite element type.
Definition: fe_transformation_base.C:28
libMesh::CLOUGH
Definition: enum_fe_family.h:53
libMesh::FEType::family
FEFamily family
The type of finite element.
Definition: fe_type.h:203
libMesh::L2_HIERARCHIC
Definition: enum_fe_family.h:40
libMesh::HERMITE
Definition: enum_fe_family.h:54
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
libMesh::JACOBI_20_00
Definition: enum_fe_family.h:49
libMesh::XYZ
Definition: enum_fe_family.h:46
libMesh::MONOMIAL_VEC
Definition: enum_fe_family.h:62
libMesh::SZABAB
Definition: enum_fe_family.h:44
libMesh::JACOBI_30_00
Definition: enum_fe_family.h:50
libMesh::RATIONAL_BERNSTEIN
Definition: enum_fe_family.h:64
libMesh::BERNSTEIN
Definition: enum_fe_family.h:43
libMesh::HIERARCHIC
Definition: enum_fe_family.h:37
libMesh::MONOMIAL
Definition: enum_fe_family.h:39
libMesh::FEType
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:178
libMesh::NEDELEC_ONE
Definition: enum_fe_family.h:61
libMesh::L2_LAGRANGE
Definition: enum_fe_family.h:41
libMesh::LAGRANGE_VEC
Definition: enum_fe_family.h:60
libMesh::FETransformationBase
This class handles the computation of the shape functions in the physical domain.
Definition: fe_base.h:53
libMesh::LAGRANGE
Definition: enum_fe_family.h:36
libMesh::SCALAR
Definition: enum_fe_family.h:58
libMesh::SUBDIVISION
Definition: enum_fe_family.h:55