PRISMS-PF Manual v3.0-pre
All Classes Functions Variables Enumerations Pages
initial_conditions.h
1// SPDX-FileCopyrightText: © 2025 PRISMS Center at the University of Michigan
2// SPDX-License-Identifier: GNU Lesser General Public Version 2.1
3
4#ifndef initial_conditions_h
5#define initial_conditions_h
6
7#include <deal.II/base/function.h>
8#include <deal.II/base/point.h>
9#include <deal.II/lac/vector.h>
10
11#include <prismspf/config.h>
12#include <prismspf/core/type_enums.h>
13#include <prismspf/user_inputs/user_input_parameters.h>
14
15PRISMS_PF_BEGIN_NAMESPACE
16
20template <int dim>
22
28template <int dim>
29class initialCondition : public dealii::Function<dim, double>
30{
31public:
35 initialCondition(const unsigned int &_index,
36 const fieldType &field_type,
37 const userInputParameters<dim> &_user_inputs);
38
42 void
43 vector_value(const dealii::Point<dim> &p, dealii::Vector<double> &value) const override;
44
45private:
46 const unsigned int index;
47
48 const userInputParameters<dim> *user_inputs;
49
50 customInitialCondition<dim> custom_initial_condition;
51};
52
53template <int dim>
54initialCondition<dim>::initialCondition(const unsigned int &_index,
55 const fieldType &field_type,
56 const userInputParameters<dim> &_user_inputs)
57 : dealii::Function<dim>((field_type == fieldType::VECTOR) ? dim : 1)
58 , index(_index)
59 , user_inputs(&_user_inputs)
60{}
61
62template <int dim>
63inline void
64initialCondition<dim>::vector_value(const dealii::Point<dim> &p,
65 dealii::Vector<double> &value) const
66{
67 // Initialize passed variables to zero
68 dealii::Vector<double> vector_value(dim);
69
70 // Pass variables to user-facing function to evaluate
71 for (unsigned int i = 0; i < dim; i++)
72 {
73 custom_initial_condition.set_initial_condition(index,
74 i,
75 p,
76 vector_value(0),
77 vector_value(i),
78 *user_inputs);
79 }
80
81 value = vector_value;
82}
83
87template <int dim>
89{
90public:
95
100 void
101 set_initial_condition(const unsigned int &index,
102 const unsigned int &component,
103 const dealii::Point<dim> &point,
104 double &scalar_value,
105 double &vector_component_value,
106 const userInputParameters<dim> &user_inputs) const;
107};
108
109PRISMS_PF_END_NAMESPACE
110
111#endif
Forward declaration of user-facing implementation.
Definition initial_conditions.h:89
customInitialCondition()=default
Constructor.
void set_initial_condition(const unsigned int &index, const unsigned int &component, const dealii::Point< dim > &point, double &scalar_value, double &vector_component_value, const userInputParameters< dim > &user_inputs) const
Function that passes the value/vector and point that are set in the initial condition.
Function for user-implemented initial conditions. These are only ever calculated for explicit time de...
Definition initial_conditions.h:30
initialCondition(const unsigned int &_index, const fieldType &field_type, const userInputParameters< dim > &_user_inputs)
Constructor.
Definition initial_conditions.h:54
void vector_value(const dealii::Point< dim > &p, dealii::Vector< double > &value) const override
Scalar/Vector value.
Definition initial_conditions.h:64
Definition user_input_parameters.h:22