22#ifndef INCLUDE_EXADG_OPERATORS_FINITE_ELEMENT_H_
23#define INCLUDE_EXADG_OPERATORS_FINITE_ELEMENT_H_
26#include <deal.II/fe/fe_dgq.h>
27#include <deal.II/fe/fe_q.h>
28#include <deal.II/fe/fe_simplex_p.h>
29#include <deal.II/fe/fe_system.h>
32#include <exadg/grid/grid_data.h>
33#include <exadg/utilities/exceptions.h>
44std::shared_ptr<dealii::FiniteElement<dim>>
47 unsigned int const n_components,
48 unsigned int const degree)
50 std::shared_ptr<dealii::FiniteElement<dim>> fe;
58 if(element_type == ElementType::Hypercube)
60 fe = std::make_shared<dealii::FESystem<dim>>(dealii::FE_DGQ<dim>(degree), n_components);
62 else if(element_type == ElementType::Simplex)
65 std::make_shared<dealii::FESystem<dim>>(dealii::FE_SimplexDGP<dim>(degree), n_components);
69 AssertThrow(
false, ExcNotImplemented());
74 if(element_type == ElementType::Hypercube)
76 fe = std::make_shared<dealii::FESystem<dim>>(dealii::FE_Q<dim>(degree), n_components);
78 else if(element_type == ElementType::Simplex)
80 fe = std::make_shared<dealii::FESystem<dim>>(dealii::FE_SimplexP<dim>(degree), n_components);
84 AssertThrow(
false, ExcNotImplemented());
92get_dofs_per_element(ExaDG::ElementType
const element_type,
94 unsigned int const n_components,
95 unsigned int const degree,
96 unsigned int const dim)
98 unsigned int scalar_dofs_per_element = 1;
100 unsigned int n_points_1d = degree;
105 if(element_type == ElementType::Hypercube)
107 scalar_dofs_per_element = dealii::Utilities::pow(n_points_1d, dim);
109 else if(element_type == ElementType::Simplex)
111 for(
unsigned int d = 0; d < dim; ++d)
112 scalar_dofs_per_element = (scalar_dofs_per_element * (n_points_1d + d)) / (d + 1);
116 AssertThrow(
false, ExcNotImplemented());
119 return scalar_dofs_per_element * n_components;
std::shared_ptr< dealii::FiniteElement< dim > > create_finite_element(ElementType const &element_type, bool const is_dg, unsigned int const n_components, unsigned int const degree)
Definition finite_element.h:45