4#include <deal.II/base/function.h>
5#include <deal.II/dofs/dof_handler.h>
6#include <deal.II/lac/vector.h>
7#include <deal.II/numerics/vector_tools.h>
15 using namespace dealii;
19 template <u
int dim,
typename NumberType>
class FunctionFromLambda :
public Function<dim, NumberType>
21 using FUN = std::function<void(
const Point<dim> &, Vector<NumberType> &)>;
25 virtual void vector_value(
const Point<dim> &p, Vector<NumberType> &values)
const override {
fun(p, values); }
55 template <
typename Model>
void interpolate(
const Model &model)
57 std::vector<uint> block_structure{0};
58 block_structure.push_back(Model::Components::count_variables());
59 m_data = (block_structure);
60 if (
m_data.n_blocks() > 1) model.initial_condition_variables(
m_data.block(1));
68 virtual BlockVector<NumberType> &
data()
override {
return m_data; }
69 virtual const BlockVector<NumberType> &
data()
const override {
return m_data; }
100 template <
typename Discretization>
106 static constexpr uint dim = Discretization::dim;
127 m_data = (block_structure);
129 if constexpr (Model::Components::count_fe_functions() > 0) {
130 auto interpolating_function = [&model](
const auto &p,
auto &values) { model.initial_condition(p, values); };
133 VectorTools::interpolate(
dof_handler, initial_condition_function,
m_data.block(0));
135 if (
m_data.n_blocks() > 1) model.initial_condition_variables(
m_data.block(1));
143 virtual BlockVector<NumberType> &
data()
override {
return m_data; }
144 virtual const BlockVector<NumberType> &
data()
const override {
return m_data; }
171 template <
typename Discretization>
A class to set up initial data for whatever discretization we have chosen. Also used to switch/manage...
Definition abstract_data.hh:18
A class to set up initial data for whatever discretization we have chosen. Also used to switch/manage...
Definition data.hh:102
void interpolate(const Model &model)
Interpolates the initial condition from a numerical model.
Definition data.hh:124
virtual BlockVector< NumberType > & data() override
Obtain the data vector holding both spatial (block 0) and variable (block 1) data.
Definition data.hh:143
virtual Vector< NumberType > & spatial_data() override
Obtain the spatial data vector.
Definition data.hh:151
virtual const BlockVector< NumberType > & data() const override
Definition data.hh:144
virtual const Vector< NumberType > & spatial_data() const override
Definition data.hh:152
typename Discretization::Components Components
Definition data.hh:105
typename Discretization::NumberType NumberType
Definition data.hh:104
const DoFHandler< dim > & dof_handler
Definition data.hh:164
static constexpr uint dim
Definition data.hh:106
const Discretization & discretization
Definition data.hh:163
virtual Vector< NumberType > & variable_data() override
Obtain the variable data vector.
Definition data.hh:159
virtual const Vector< NumberType > & variable_data() const override
Definition data.hh:160
FlowingVariables(const Discretization &discretization)
Construct a new Flowing Variables object.
Definition data.hh:113
BlockVector< NumberType > m_data
Definition data.hh:165
A class to set up initial data for whatever discretization we have chosen. Also used to switch/manage...
Definition data.hh:40
void interpolate(const Model &model)
Interpolates the initial condition from a numerical model.
Definition data.hh:55
virtual Vector< NumberType > & variable_data() override
Obtain the variable data vector.
Definition data.hh:84
virtual const Vector< NumberType > & spatial_data() const override
Definition data.hh:77
virtual Vector< NumberType > & spatial_data() override
Obtain the spatial data vector.
Definition data.hh:76
BlockVector< NumberType > m_data
Definition data.hh:88
virtual const BlockVector< NumberType > & data() const override
Definition data.hh:69
virtual const Vector< NumberType > & variable_data() const override
Definition data.hh:85
FlowingVariables()
Construct a new Flowing Variables object.
Definition data.hh:47
virtual BlockVector< NumberType > & data() override
Obtain the data vector holding both spatial (block 0) and variable (block 1) data.
Definition data.hh:68
NT NumberType
Definition data.hh:42
FUN fun
Definition data.hh:28
virtual void vector_value(const Point< dim > &p, Vector< NumberType > &values) const override
Definition data.hh:25
std::function< void(const Point< dim > &, Vector< NumberType > &)> FUN
Definition data.hh:21
FunctionFromLambda(FUN &&fun_, uint components)
Definition data.hh:24
Definition complex_math.hh:14
unsigned int uint
Definition utils.hh:22