PRISMS-PF Manual
Loading...
Searching...
No Matches
pde_operator_base.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2026 PRISMS Center at the University of Michigan
2// SPDX-License-Identifier: GNU Lesser General Public Version 2.1
3
4#pragma once
5
6#include <deal.II/base/exceptions.h>
7
11#include <prismspf/core/types.h>
12
14
15#include <prismspf/config.h>
16
18
19template <unsigned int dim, unsigned int degree, typename number>
20class SolveContext;
21
25template <unsigned int dim, unsigned int degree, typename number>
27{
28public:
29 using SizeType = dealii::VectorizedArray<number>;
30
34 explicit PDEOperatorBase(const UserInputParameters<dim> &_user_inputs,
35 const PhaseFieldTools<dim> &_pf_tools)
36 : user_inputs(&_user_inputs)
37 , pf_tools(&_pf_tools)
38 {}
39
43 virtual ~PDEOperatorBase() = default;
44
48 virtual void
49 set_initial_condition([[maybe_unused]] const unsigned int &index,
50 [[maybe_unused]] const unsigned int &component,
51 [[maybe_unused]] const dealii::Point<dim> &point,
52 [[maybe_unused]] number &scalar_value,
53 [[maybe_unused]] number &vector_component_value) const
54 {}
55
60 virtual void
61 set_dirichlet([[maybe_unused]] const unsigned int &index,
62 [[maybe_unused]] const unsigned int &boundary_id,
63 [[maybe_unused]] const unsigned int &component,
64 [[maybe_unused]] const dealii::Point<dim> &point,
65 [[maybe_unused]] const SimulationTimer &sim_timer,
66 [[maybe_unused]] number &scalar_value,
67 [[maybe_unused]] number &vector_component_value) const
68 {
69 this->set_initial_condition(index,
70 component,
71 point,
72 scalar_value,
73 vector_component_value);
74 }
75
79 virtual void
80 compute_rhs([[maybe_unused]] FieldContainer<dim, degree, number> &variable_list,
81 [[maybe_unused]] const SimulationTimer &sim_timer,
82 [[maybe_unused]] unsigned int solver_id) const
83 {}
84
88 virtual void
89 compute_lhs([[maybe_unused]] FieldContainer<dim, degree, number> &variable_list,
90 [[maybe_unused]] const SimulationTimer &sim_timer,
91 [[maybe_unused]] unsigned int solver_id) const
92 {}
93
98 virtual void
99 pre_solve_block([[maybe_unused]] SolveContext<dim, degree, number> &solve_context,
100 [[maybe_unused]] unsigned int solver_id)
101 {}
102
107 virtual void
109 [[maybe_unused]] unsigned int solver_id)
110 {}
111
115 [[nodiscard]] const UserInputParameters<dim> &
117 {
118 Assert(user_inputs != nullptr, dealii::StandardExceptions::ExcNotInitialized());
119 return *user_inputs;
120 }
121
125 [[nodiscard]] const PhaseFieldTools<dim> &
127 {
128 Assert(pf_tools != nullptr, dealii::StandardExceptions::ExcNotInitialized());
129 return *pf_tools;
130 }
131
135 void
136 set_user_stop(bool flag)
137 {
138 user_stop = flag;
139 }
140
144 bool
146 {
147 return user_stop;
148 }
149
150private:
155
160
164 bool user_stop = false;
165};
166
167PRISMS_PF_END_NAMESPACE
This class permits the access of a subset of indexed fields and gives an error if any non-allowed fie...
Definition field_container.h:47
PDEOperatorBase(const UserInputParameters< dim > &_user_inputs, const PhaseFieldTools< dim > &_pf_tools)
Constructor.
Definition pde_operator_base.h:34
dealii::VectorizedArray< number > SizeType
Definition pde_operator_base.h:29
void set_user_stop(bool flag)
Set user triggered stop.
Definition pde_operator_base.h:136
const UserInputParameters< dim > * user_inputs
The user-inputs.
Definition pde_operator_base.h:154
virtual void compute_rhs(FieldContainer< dim, degree, number > &variable_list, const SimulationTimer &sim_timer, unsigned int solver_id) const
User-implemented class for the RHS of explicit equations.
Definition pde_operator_base.h:80
const PhaseFieldTools< dim > * pf_tools
Phase field tools.
Definition pde_operator_base.h:159
bool get_user_stop()
Get user triggered stop.
Definition pde_operator_base.h:145
const UserInputParameters< dim > & get_user_inputs() const
Get the user inputs (constant reference).
Definition pde_operator_base.h:116
virtual ~PDEOperatorBase()=default
Destructor.
const PhaseFieldTools< dim > & get_pf_tools() const
Get the phase field tools (constant reference).
Definition pde_operator_base.h:126
virtual void post_solve_block(SolveContext< dim, degree, number > &solve_context, unsigned int solver_id)
Function called right after a solve block.Gives access to all the internal classes,...
Definition pde_operator_base.h:108
bool user_stop
User triggered stop.
Definition pde_operator_base.h:164
virtual void set_initial_condition(const unsigned int &index, const unsigned int &component, const dealii::Point< dim > &point, number &scalar_value, number &vector_component_value) const
User-implemented class for the setting initial conditions.
Definition pde_operator_base.h:49
virtual void compute_lhs(FieldContainer< dim, degree, number > &variable_list, const SimulationTimer &sim_timer, unsigned int solver_id) const
User-implemented class for the RHS of nonexplicit equations.
Definition pde_operator_base.h:89
virtual void pre_solve_block(SolveContext< dim, degree, number > &solve_context, unsigned int solver_id)
Function called right before a solve block. Gives access to all the internal classes,...
Definition pde_operator_base.h:99
virtual void set_dirichlet(const unsigned int &index, const unsigned int &boundary_id, const unsigned int &component, const dealii::Point< dim > &point, const SimulationTimer &sim_timer, number &scalar_value, number &vector_component_value) const
User-implemented function for setting Dirichlet boundary conditions. Default behavior is to call init...
Definition pde_operator_base.h:61
Definition simulation_timer.h:13
This class provides context for a solver with ptrs to all the relevant dependencies.
Definition solve_context.h:34
Definition user_input_parameters.h:28
Definition conditional_ostreams.cc:20
This class contains mutable utilities for phase field problems.
Definition phase_field_tools.h:21