include/meltpooldg/cut/solution_transfer.hpp Source File

Developer Documentation: include/meltpooldg/cut/solution_transfer.hpp Source File
Developer Documentation
solution_transfer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/conditional_ostream.h>
4
5#include <deal.II/dofs/dof_handler.h>
6
7#include <deal.II/grid/tria.h>
8
9#include <deal.II/lac/affine_constraints.h>
10#include <deal.II/lac/la_parallel_vector.h>
11
12#include <deal.II/non_matching/mesh_classifier.h>
13
16
17#include <functional>
18#include <vector>
19
20
21namespace MeltPoolDG::CutUtil
22{
36 template <int dim, typename Number>
38 {
39 public:
40 using VectorType = dealii::LinearAlgebra::distributed::Vector<Number>;
41
50 const bool is_two_phase,
51 const int verbosity = 0);
52
79 void
80 reinit(dealii::DoFHandler<dim> &cut_dof_handler,
81 dealii::Triangulation<dim> &tria,
82 const VectorType &cut_solution,
83 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier_old,
84 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier,
85 const std::function<void(VectorType &)> &reinit_cut_vector,
86 const std::function<void()> &setup_dof_system,
87 const AttachDoFHandlerAndVectorsType<dim, VectorType> &attach_vectors = {});
88
113 void
114 reinit(dealii::DoFHandler<dim> &cut_dof_handler,
115 dealii::Triangulation<dim> &tria,
116 const std::vector<const VectorType *> &cut_solutions,
117 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier_old,
118 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier,
119 const std::function<void(VectorType &)> &reinit_cut_vector,
120 const std::function<void()> &setup_dof_system,
121 const AttachDoFHandlerAndVectorsType<dim, VectorType> &attach_vectors = {});
122
128 const std::vector<VectorType> &
130 {
131 return new_solutions;
132 }
133
139 std::vector<VectorType> &
141 {
142 return new_solutions;
143 }
144
155 const VectorType &
157 {
158 Assert(
159 new_solutions.size() == 1,
160 dealii::ExcMessage(
161 "This function assumes that only one cut solution vector was attached, which is not the case."));
162 return new_solutions[0];
163 }
164
175 VectorType &
177 {
178 Assert(
179 new_solutions.size() == 1,
180 dealii::ExcMessage(
181 "This function assumes that only one cut solution vector was attached, which is not the case."));
182 return new_solutions[0];
183 }
184
185 private:
187 std::vector<VectorType> new_solutions;
188
190 unsigned int fe_degree;
191
195
197 bool is_dg;
198
201
203 const bool is_two_phase;
204
206 const unsigned int verbosity;
207
209 dealii::ConditionalOStream pcout;
210
231 void
233 dealii::DoFHandler<dim> &cut_dof_handler,
234 dealii::Triangulation<dim> &tria,
235 const std::vector<const VectorType *> &cut_solutions,
236 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier_old,
237 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier,
238 const std::function<void(VectorType &)> &reinit_cut_vector,
239 const std::function<void()> &setup_dof_system,
240 const AttachDoFHandlerAndVectorsType<dim, VectorType> &attach_vectors = {});
241
254 const dealii::DoFHandler<dim> &cut_dof_handler,
255 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier,
256 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier_old) const;
257
268 dealii::AffineConstraints<Number>
269 create_constraints_gp_extrapolation(const dealii::DoFHandler<dim> &cut_dof_handler,
270 const VectorType &flags_dofs_gp_extrapolation) const;
271
280 void
282 const dealii::DoFHandler<dim> &cut_dof_handler,
283 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier,
284 const dealii::NonMatching::MeshClassifier<dim> &mesh_classifier_old,
285 const std::function<void(VectorType &)> &reinit_vector);
286 };
287} // namespace MeltPoolDG::CutUtil
Operator for the solution transfer in moving boundary/interface simulations.
Definition solution_transfer.hpp:38
dealii::ConditionalOStream pcout
Stream object for conditional output.
Definition solution_transfer.hpp:209
const VectorType & get_updated_solution() const
Getter function for the transferred solution vector (const. version).
Definition solution_transfer.hpp:156
void transfer_solution_constant_dofs(dealii::DoFHandler< dim > &cut_dof_handler, dealii::Triangulation< dim > &tria, const std::vector< const VectorType * > &cut_solutions, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier_old, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier, const std::function< void(VectorType &)> &reinit_cut_vector, const std::function< void()> &setup_dof_system, const AttachDoFHandlerAndVectorsType< dim, VectorType > &attach_vectors={})
Update FE-index and distribute DoFs according to the new state with the moved interface.
Definition solution_transfer.cpp:197
const std::vector< VectorType > & get_updated_solutions() const
Getter function for multiple transferred solution vectors (const. version).
Definition solution_transfer.hpp:129
const bool is_two_phase
Boolean indicator whether a two-phase case is considered.
Definition solution_transfer.hpp:203
VectorType & get_updated_solution()
Getter function for the transferred solution vector (non-const. version).
Definition solution_transfer.hpp:176
void reinit(dealii::DoFHandler< dim > &cut_dof_handler, dealii::Triangulation< dim > &tria, const VectorType &cut_solution, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier_old, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier, const std::function< void(VectorType &)> &reinit_cut_vector, const std::function< void()> &setup_dof_system, const AttachDoFHandlerAndVectorsType< dim, VectorType > &attach_vectors={})
Reinit function for the solution transfer according to the new immersed interface position.
Definition solution_transfer.cpp:175
dealii::AffineConstraints< Number > create_constraints_gp_extrapolation(const dealii::DoFHandler< dim > &cut_dof_handler, const VectorType &flags_dofs_gp_extrapolation) const
Create constraints for the known DoFs that do not need to be ghost-penalty extrapolated.
Definition solution_transfer.cpp:517
VectorType mark_dofs_for_gp_extrapolation(const dealii::DoFHandler< dim > &cut_dof_handler, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier_old) const
Mark the unknown DoFs, which need to be ghost-penalty extrapolated.
Definition solution_transfer.cpp:375
bool is_dg
Boolean indicator whether DG is used.
Definition solution_transfer.hpp:197
std::vector< VectorType > new_solutions
Collection of extrapolated solution vectors.
Definition solution_transfer.hpp:187
void extrapolate_solution_new_dofs(const dealii::DoFHandler< dim > &cut_dof_handler, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier, const dealii::NonMatching::MeshClassifier< dim > &mesh_classifier_old, const std::function< void(VectorType &)> &reinit_vector)
Assemble and solve system for ghost-penalty extrapolation, apply constraints.
Definition solution_transfer.cpp:600
unsigned int fe_degree
Finite element degree.
Definition solution_transfer.hpp:190
const unsigned int verbosity
Verbosity level for output (0: nothing(=default), 1: something, 2: some more details)
Definition solution_transfer.hpp:206
dealii::LinearAlgebra::distributed::Vector< Number > VectorType
Definition solution_transfer.hpp:40
std::vector< VectorType > & get_updated_solutions()
Getter function for multiple transferred solution vectors (non-const. version).
Definition solution_transfer.hpp:140
const GhostPenaltyData< Number > ghost_penalty
Ghost-penalty parameters for stabilization of cut elements.
Definition solution_transfer.hpp:200
unsigned int n_components_per_phase
Definition solution_transfer.hpp:194
Definition amr.hpp:15
std::function< void(DoFHandlerAndVectorDataType< dim, VectorType > &)> AttachDoFHandlerAndVectorsType
Definition attach_vectors.hpp:21
Collection of parameters for the ghost-penalty stabilization of cutFEM and cutDG applications.
Definition cut_data.hpp:13