include/meltpooldg/utilities/functions.hpp Source File

Developer Documentation: include/meltpooldg/utilities/functions.hpp Source File
Developer Documentation
functions.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/exceptions.h>
4#include <deal.II/base/function.h>
5#include <deal.II/base/point.h>
6#include <deal.II/base/symmetric_tensor.h>
7#include <deal.II/base/tensor.h>
8
9#include <memory>
10
11
13{
20 template <int dim, typename number>
21 class ChangedSignFunction : public dealii::Function<dim, number>
22 {
23 public:
24 ChangedSignFunction(const std::shared_ptr<dealii::Function<dim, number>> fu_)
25 : dealii::Function<dim, number>(fu_->n_components, fu_->get_time())
26 , fu(fu_)
27 {
28 AssertThrow(fu, dealii::ExcMessage("The input function does not exist. Abort ..."));
29 }
30
31 number
32 value(const dealii::Point<dim> &point, const unsigned int component) const override
33 {
34 return -fu->value(point, component);
35 }
36
37 dealii::Tensor<1, dim, number>
38 gradient(const dealii::Point<dim> &point, const unsigned int component) const override
39 {
40 return -fu->gradient(point, component);
41 }
42
43 dealii::SymmetricTensor<2, dim, number>
44 hessian(const dealii::Point<dim> &point, const unsigned int component) const override
45 {
46 return -fu->hessian(point, component);
47 }
48
49 void
50 set_time(const number new_time) override
51 {
52 fu->set_time(new_time);
53 }
54
55 void
56 advance_time(const number delta_t) override
57 {
58 fu->advance_time(delta_t);
59 }
60
61 private:
62 const std::shared_ptr<dealii::Function<dim, number>> fu;
63 };
64
71 template <int dim, typename number>
72 class NComponentFunction : public dealii::Function<dim>
73 {
74 public:
75 NComponentFunction(const dealii::Function<dim> &function_in,
76 const unsigned int n_components = 2)
77 : dealii::Function<dim>(n_components)
78 , function(function_in)
79 {}
80
81 number
82 value(const dealii::Point<dim> &p, const unsigned int /* component */) const override
83 {
84 return function.value(p);
85 }
86
87 private:
88 const dealii::Function<dim> &function;
89 };
90
97 template <int dim, typename number>
98 class EmbeddedComponentsFunction : public dealii::Function<dim, number>
99 {
100 public:
101 EmbeddedComponentsFunction(const dealii::Function<dim, number> &base_function,
102 const unsigned int n_components,
103 const unsigned int start_component)
104 : dealii::Function<dim, number>(n_components)
106 , start(start_component)
107 {
108 Assert(start + base_function.n_components <= n_components,
109 dealii::ExcMessage(
110 "The base function does not fit into the specified number of components."));
111 }
112
113 number
114 value(const dealii::Point<dim> &p, const unsigned int component = 0) const override
115 {
116 if (component >= start and component < start + base_function.n_components)
117 {
118 return base_function.value(p, component - start);
119 }
120 else
121 return 0.0;
122 }
123
124 private:
125 const dealii::Function<dim, number> &base_function;
126 const unsigned int start;
127 };
128
135 template <int dim, typename number>
136 class ExtractedComponentsFunction : public dealii::Function<dim, number>
137 {
138 public:
139 ExtractedComponentsFunction(const dealii::Function<dim, number> &base_function,
140 const unsigned int start_component,
141 const unsigned int n_components)
142 : dealii::Function<dim, number>(n_components)
144 , start(start_component)
146 {
147 Assert(start + n_components <= base_function.n_components,
148 dealii::ExcMessage(
149 "The extracted function does not fit into the specified number of components."));
150 }
151
152 number
153 value(const dealii::Point<dim> &p, const unsigned int component = 0) const override
154 {
155 AssertIndexRange(component, n_components);
156 return base_function.value(p, start + component);
157 }
158
159 private:
160 const dealii::Function<dim, number> &base_function;
161 const unsigned int start;
162 const unsigned int n_components;
163 };
164} // namespace MeltPoolDG::Functions
Wrapper function that flips the sign of another function.
Definition functions.hpp:22
const std::shared_ptr< dealii::Function< dim, number > > fu
Definition functions.hpp:62
void advance_time(const number delta_t) override
Definition functions.hpp:56
void set_time(const number new_time) override
Definition functions.hpp:50
dealii::Tensor< 1, dim, number > gradient(const dealii::Point< dim > &point, const unsigned int component) const override
Definition functions.hpp:38
ChangedSignFunction(const std::shared_ptr< dealii::Function< dim, number > > fu_)
Definition functions.hpp:24
number value(const dealii::Point< dim > &point, const unsigned int component) const override
Definition functions.hpp:32
dealii::SymmetricTensor< 2, dim, number > hessian(const dealii::Point< dim > &point, const unsigned int component) const override
Definition functions.hpp:44
Embeds a function into a higher-dimensional component space.
Definition functions.hpp:99
const unsigned int start
Definition functions.hpp:126
number value(const dealii::Point< dim > &p, const unsigned int component=0) const override
Definition functions.hpp:114
const dealii::Function< dim, number > & base_function
Definition functions.hpp:125
EmbeddedComponentsFunction(const dealii::Function< dim, number > &base_function, const unsigned int n_components, const unsigned int start_component)
Definition functions.hpp:101
Extracts a subset of components from a multi-component function.
Definition functions.hpp:137
ExtractedComponentsFunction(const dealii::Function< dim, number > &base_function, const unsigned int start_component, const unsigned int n_components)
Definition functions.hpp:139
const unsigned int n_components
Definition functions.hpp:162
const dealii::Function< dim, number > & base_function
Definition functions.hpp:160
number value(const dealii::Point< dim > &p, const unsigned int component=0) const override
Definition functions.hpp:153
const unsigned int start
Definition functions.hpp:161
Adapter to create a two-component function from a scalar function.
Definition functions.hpp:73
number value(const dealii::Point< dim > &p, const unsigned int) const override
Definition functions.hpp:82
NComponentFunction(const dealii::Function< dim > &function_in, const unsigned int n_components=2)
Definition functions.hpp:75
const dealii::Function< dim > & function
Definition functions.hpp:88
Definition functions.hpp:13
Definition dealii_tensor.hpp:10