PRISMS-PF Manual v3.0-pre
All Classes Functions Variables Enumerations Pages
nonuniform_dirichlet.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 nonuniform_dirichlet_h
5#define nonuniform_dirichlet_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
26template <int dim, fieldType field_type = fieldType::SCALAR>
27class nonuniformDirichlet : public dealii::Function<dim, double>
28{
29public:
33 nonuniformDirichlet(const unsigned int &_index,
34 const unsigned int &_boundary_id,
35 const userInputParameters<dim> &_user_inputs);
36
40 double
41 value(const dealii::Point<dim> &p, const unsigned int component = 0) const override;
42
46 void
47 vector_value(const dealii::Point<dim> &p, dealii::Vector<double> &value) const override;
48
49private:
50 const unsigned int index;
51
52 const unsigned int boundary_id;
53
54 const userInputParameters<dim> *user_inputs;
55
56 customNonuniformDirichlet<dim> custom_nonuniform_dirichlet;
57};
58
59template <int dim, fieldType field_type>
61 const unsigned int &_index,
62 const unsigned int &_boundary_id,
63 const userInputParameters<dim> &_user_inputs)
64 : dealii::Function<dim>((field_type == fieldType::VECTOR) ? dim : 1)
65 , index(_index)
66 , boundary_id(_boundary_id)
67 , user_inputs(&_user_inputs)
68{}
69
70template <int dim, fieldType field_type>
71inline double
73 const dealii::Point<dim> &p,
74 [[maybe_unused]] const unsigned int component) const
75{
76 // Initialize passed variables to zero
77 double scalar_value = 0.0;
78 dealii::Vector<double> vector_value(dim);
79
80 // Pass variables to user-facing function to evaluate
81 custom_nonuniform_dirichlet.set_nonuniform_dirichlet(index,
82 boundary_id,
83 0,
84 p,
85 scalar_value,
86 vector_value(0),
87 *user_inputs);
88
89 return scalar_value;
90}
91
92template <int dim, fieldType field_type>
93inline void
95 dealii::Vector<double> &value) const
96{
97 // Initialize passed variables to zero
98 double scalar_value = 0.0;
99 dealii::Vector<double> vector_value(dim);
100
101 // Pass variables to user-facing function to evaluate
102 for (unsigned int i = 0; i < dim; i++)
103 {
104 custom_nonuniform_dirichlet.set_nonuniform_dirichlet(index,
105 boundary_id,
106 i,
107 p,
108 scalar_value,
109 vector_value(i),
110 *user_inputs);
111 }
112
113 value = vector_value;
114}
115
119template <int dim>
121{
122public:
127
132 void
133 set_nonuniform_dirichlet(const unsigned int &index,
134 const unsigned int &boundary_id,
135 const unsigned int &component,
136 const dealii::Point<dim> &point,
137 double &scalar_value,
138 double &vector_component_value,
139 const userInputParameters<dim> &user_inputs) const;
140};
141
142PRISMS_PF_END_NAMESPACE
143
144#endif
Forward declaration of user-facing implementation.
Definition nonuniform_dirichlet.h:121
void set_nonuniform_dirichlet(const unsigned int &index, const unsigned int &boundary_id, 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 nonuniform dirichlet.
customNonuniformDirichlet()=default
Constructor.
Function for user-implemented nonuniform dirichlet boundary condition.
Definition nonuniform_dirichlet.h:28
void vector_value(const dealii::Point< dim > &p, dealii::Vector< double > &value) const override
Vector value.
Definition nonuniform_dirichlet.h:94
nonuniformDirichlet(const unsigned int &_index, const unsigned int &_boundary_id, const userInputParameters< dim > &_user_inputs)
Constructor.
Definition nonuniform_dirichlet.h:60
double value(const dealii::Point< dim > &p, const unsigned int component=0) const override
Scalar value.
Definition nonuniform_dirichlet.h:72
Definition user_input_parameters.h:22