include/meltpooldg/utilities/fe_util.hpp Source File

Developer Documentation: include/meltpooldg/utilities/fe_util.hpp Source File
Developer Documentation
fe_util.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/exceptions.h>
4#include <deal.II/base/quadrature.h>
5
6#include <deal.II/dofs/dof_handler.h>
7
8#include <deal.II/fe/fe_dgq.h>
9#include <deal.II/fe/fe_q.h>
10#include <deal.II/fe/fe_q_iso_q1.h>
11#include <deal.II/fe/fe_simplex_p.h>
12#include <deal.II/fe/fe_system.h>
13#include <deal.II/fe/mapping.h>
14
16
17#include <memory>
18
20{
21 template <int dim, unsigned int n_components = 1>
22 void
23 distribute_dofs(const FiniteElementData &fe_data, dealii::DoFHandler<dim> &dof_handler)
24 {
25 if constexpr (n_components == 1)
26 {
27 switch (fe_data.type)
28 {
29 case FiniteElementType::FE_Q: {
30 dof_handler.distribute_dofs(dealii::FE_Q<dim>(fe_data.degree));
31 break;
32 }
33 case FiniteElementType::FE_SimplexP: {
34 dof_handler.distribute_dofs(dealii::FE_SimplexP<dim>(fe_data.degree));
35 break;
36 }
37 case FiniteElementType::FE_Q_iso_Q1: {
38 dof_handler.distribute_dofs(dealii::FE_Q_iso_Q1<dim>(fe_data.degree));
39 break;
40 }
41 case FiniteElementType::FE_DGQ: {
42 dof_handler.distribute_dofs(dealii::FE_DGQ<dim>(fe_data.degree));
43 break;
44 }
45 case FiniteElementType::not_initialized:
46 DEAL_II_ASSERT_UNREACHABLE();
47 default:
48 DEAL_II_NOT_IMPLEMENTED();
49 }
50 }
51 else
52 {
53 switch (fe_data.type)
54 {
55 case FiniteElementType::FE_Q: {
56 dof_handler.distribute_dofs(
57 dealii::FESystem<dim>(dealii::FE_Q<dim>(fe_data.degree), n_components));
58 break;
59 }
60 case FiniteElementType::FE_SimplexP: {
61 dof_handler.distribute_dofs(
62 dealii::FESystem<dim>(dealii::FE_SimplexP<dim>(fe_data.degree), n_components));
63 break;
64 }
65 case FiniteElementType::FE_Q_iso_Q1: {
66 dof_handler.distribute_dofs(
67 dealii::FESystem<dim>(dealii::FE_Q_iso_Q1<dim>(fe_data.degree), n_components));
68 break;
69 }
70 case FiniteElementType::FE_DGQ: {
71 dof_handler.distribute_dofs(
72 dealii::FESystem<dim>(dealii::FE_DGQ<dim>(fe_data.degree), n_components));
73 break;
74 }
75 case FiniteElementType::not_initialized:
76 DEAL_II_ASSERT_UNREACHABLE();
77 default:
78 DEAL_II_NOT_IMPLEMENTED();
79 }
80 }
81 }
82
83 template <int dim>
84 std::shared_ptr<dealii::Mapping<dim>>
85 create_mapping(const FiniteElementData &fe_data);
86
87 template <int dim>
88 dealii::Quadrature<dim>
90} // namespace MeltPoolDG::FiniteElementUtils
Definition fe_util.hpp:20
std::shared_ptr< dealii::Mapping< dim > > create_mapping(const FiniteElementData &fe_data)
Definition fe_util.cpp:18
dealii::Quadrature< dim > create_quadrature(const FiniteElementData &fe_data)
Definition fe_util.cpp:40
void distribute_dofs(const FiniteElementData &fe_data, dealii::DoFHandler< dim > &dof_handler)
Definition fe_util.hpp:23
Definition finite_element_data.hpp:12
int degree
Definition finite_element_data.hpp:14
FiniteElementType type
Definition finite_element_data.hpp:13