include/meltpooldg/compressible_flow/operation_scratch_data.hpp Source File

Developer Documentation: include/meltpooldg/compressible_flow/operation_scratch_data.hpp Source File
Developer Documentation
operation_scratch_data.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/aligned_vector.h>
4#include <deal.II/base/vectorization.h>
5
6#include <deal.II/dofs/dof_handler.h>
7
8#include <deal.II/fe/fe.h>
9
10#include <deal.II/matrix_free/matrix_free.h>
11
21
23{
30 template <int dim, typename number>
32 {
33 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
34
48 explicit OperationScratchData(const OperationData<number> &flow_data_in,
49 const MaterialPhaseData<number> &material_data_in,
50 const ScratchData<dim, dim, number> &scratch_data_in,
51 const unsigned int dof_idx_in,
52 const unsigned int quad_idx_in,
53 const CutSolverData<number> *cut_data_in = nullptr)
54 : flow_data(flow_data_in)
55 , scratch_data(scratch_data_in)
56 , material(material_data_in)
57 , cut(cut_data_in)
58 , dof_idx(dof_idx_in)
59 , quad_idx(quad_idx_in)
60 {
61 if (material.number_of_species == 1)
62 {
63 is_viscous = material.dynamic_viscosity > 0.;
64 }
65 else
66 {
67 for (unsigned int species = 0; species < material.number_of_species; ++species)
68 {
69 if (material.species_data[species].dynamic_viscosity > 0.)
70 {
71 is_viscous = true;
72 break;
73 }
74 }
75 }
76
77 if (flow_data.domain_representation_type == "cut")
78 AssertThrow(
79 cut_data_in != nullptr,
80 dealii::ExcMessage(
81 "A CompressibleFlowCutData object has to be provided to the constructor of "
82 "CompressibleFlowScratchData in the case of domain_representation_type = 'cut'."));
83 }
84
87
90
93
95 const CutSolverData<number> *cut = nullptr;
96
98 const unsigned int dof_idx = 0;
99
101 const unsigned int quad_idx = 0;
102
104 bool is_viscous = false;
105
108
110 dealii::AlignedVector<dealii::VectorizedArray<number>> interior_penalty_parameter;
111
114
116 std::unique_ptr<dealii::Function<dim>> body_force;
117
127 void
128 reinit(const unsigned solution_history_size)
129 {
130 solution_history.resize(solution_history_size);
131 solution_history.apply(
132 [&scratch_data = scratch_data, comp_flow_dof_idx = dof_idx](VectorType &v) {
133 scratch_data.initialize_dof_vector(v, comp_flow_dof_idx);
134 });
135
136 if (is_viscous)
139 flow_data.domain_representation_type,
140 dof_idx);
141 }
142 };
143
150 template <int dim, typename number>
152 {
153 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
154
171 const OperationData<number> &flow_data_in,
172 const MaterialPhaseData<number> &material_data_gas_in,
173 const MaterialPhaseData<number> &material_data_liquid_in,
174 const Multiphase::PhaseChangeData<number> &phase_change_data_in,
175 const CutSolverData<number> &cut_data_in,
176 const Multiphase::CompressibleFlowPhaseCouplingData<number> &phase_coupling_data_in,
177 const Flow::DarcyDampingData<number> &darcy_damping_data_in,
178 const ScratchData<dim, dim, number> &scratch_data_in,
179 const unsigned int dof_idx_in,
180 const unsigned int quad_idx_in)
181 : flow_data(flow_data_in)
182 , scratch_data(scratch_data_in)
183 , material_gas(material_data_gas_in)
184 , material_liquid(material_data_liquid_in)
185 , phase_change(phase_change_data_in)
186 , cut(cut_data_in)
187 , phase_coupling(phase_coupling_data_in)
188 , darcy_damping(darcy_damping_data_in)
189 , dof_idx(dof_idx_in)
190 , quad_idx(quad_idx_in)
191 {
192 is_viscous = material_gas.dynamic_viscosity > 0. or material_liquid.dynamic_viscosity > 0.;
193 }
194
197
200
203
206
209
212
215
218
220 const unsigned int dof_idx = 0;
221
223 const unsigned int quad_idx = 0;
224
226 bool is_viscous = false;
227
230
232 dealii::AlignedVector<dealii::VectorizedArray<number>> interior_penalty_parameter;
233
236
238 std::unique_ptr<dealii::Function<dim>> body_force;
239
249 void
250 reinit(const unsigned solution_history_size)
251 {
252 solution_history.resize(solution_history_size);
253 solution_history.apply(
254 [&scratch_data = scratch_data, comp_flow_dof_idx = dof_idx](VectorType &v) {
255 scratch_data.initialize_dof_vector(v, comp_flow_dof_idx);
256 });
257
258 if (is_viscous)
261 flow_data.domain_representation_type,
262 dof_idx);
263 }
264 };
265} // namespace MeltPoolDG::CompressibleFlow
Helper class taking care of all boundary condition related computations for the compressible flow sol...
Definition boundary_conditions.hpp:93
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
void initialize_dof_vector(VectorType &vec, const unsigned int dof_idx) const
Initialize a distributed vector for a given DoF index.
Definition scratch_data.cpp:272
dealii::MatrixFree< dim, number, VectorizedArrayType > & get_matrix_free()
Access the internal MatrixFree object (non-const).
Definition scratch_data.cpp:424
Definition solution_history.hpp:21
This file contains various functions that can be used to set and evaluate boundary conditions for the...
Definition boundary_condition_functions.hpp:17
void calculate_penalty_parameter(dealii::AlignedVector< dealii::VectorizedArray< Number > > &array_penalty_parameter, const dealii::MatrixFree< dim, Number > &matrix_free, const std::string &domain_representation_type, const unsigned int dof_index=0, const Number scaling_factor=1.0)
This function computes the local values of the internal penalty parameter used in the viscous numeric...
Definition utils.hpp:305
Collection of cut-related solver parameters required by the cut single-phase and multiphase compressi...
Definition operation_data.hpp:211
Collection of material parameters for a specific fluid phase.
Definition material.hpp:140
Scratch data structure for compressible multiphase flow solvers.
Definition operation_scratch_data.hpp:152
const Flow::DarcyDampingData< number > darcy_damping
Parameters for darcy damping in the solid domain and mushy zone.
Definition operation_scratch_data.hpp:217
const Multiphase::CompressibleFlowPhaseCouplingData< number > phase_coupling
Parameters for the coupling of two compressible (or nearly incompressible) phases.
Definition operation_scratch_data.hpp:214
TimeIntegration::SolutionHistory< VectorType > solution_history
Solution history object.
Definition operation_scratch_data.hpp:235
BoundaryConditions< dim, number > boundary_conditions
Object taking care of all boundary condition related computations.
Definition operation_scratch_data.hpp:229
const unsigned int dof_idx
DoF index within the matrix-free object.
Definition operation_scratch_data.hpp:220
void reinit(const unsigned solution_history_size)
Set up the internal data structures.
Definition operation_scratch_data.hpp:250
const OperationData< number > flow_data
General parameters for the compressible Navier-Stokes operators.
Definition operation_scratch_data.hpp:196
std::unique_ptr< dealii::Function< dim > > body_force
Pointer to the body force function.
Definition operation_scratch_data.hpp:238
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition operation_scratch_data.hpp:153
bool is_viscous
Boolean variable indicating whether viscosity is present.
Definition operation_scratch_data.hpp:226
const MaterialPhaseData< number > material_liquid
Material parameters for the liquid phase.
Definition operation_scratch_data.hpp:205
dealii::AlignedVector< dealii::VectorizedArray< number > > interior_penalty_parameter
Penalty parameter for the Symmetric Interior Penalty Galerkin (SIPG) method.
Definition operation_scratch_data.hpp:232
const MaterialPhaseData< number > material_gas
Material parameters for the gas phase.
Definition operation_scratch_data.hpp:202
const ScratchData< dim, dim, number > & scratch_data
Mapping-, finite-element-, and quadrature-related parameters.
Definition operation_scratch_data.hpp:199
const Multiphase::PhaseChangeData< number > phase_change
Parameters related to liquid-gas and solid-liquid phase transitions.
Definition operation_scratch_data.hpp:208
const CutSolverData< number > cut
Cut-related parameters.
Definition operation_scratch_data.hpp:211
MultiphaseOperationScratchData(const OperationData< number > &flow_data_in, const MaterialPhaseData< number > &material_data_gas_in, const MaterialPhaseData< number > &material_data_liquid_in, const Multiphase::PhaseChangeData< number > &phase_change_data_in, const CutSolverData< number > &cut_data_in, const Multiphase::CompressibleFlowPhaseCouplingData< number > &phase_coupling_data_in, const Flow::DarcyDampingData< number > &darcy_damping_data_in, const ScratchData< dim, dim, number > &scratch_data_in, const unsigned int dof_idx_in, const unsigned int quad_idx_in)
Constructor.
Definition operation_scratch_data.hpp:170
const unsigned int quad_idx
Quadrature index within the matrix-free object.
Definition operation_scratch_data.hpp:223
Collection of parameters required by the compressible Navier-Stokes operator.
Definition operation_data.hpp:35
Scratch data structure for compressible single-phase flow solvers.
Definition operation_scratch_data.hpp:32
const OperationData< number > flow_data
General parameters for the compressible Navier-Stokes operators.
Definition operation_scratch_data.hpp:86
const ScratchData< dim, dim, number > & scratch_data
Mapping-, finite-element-, and quadrature-related parameters.
Definition operation_scratch_data.hpp:89
const MaterialPhaseData< number > material
Material parameters.
Definition operation_scratch_data.hpp:92
const unsigned int dof_idx
DoF index within the matrix-free object.
Definition operation_scratch_data.hpp:98
const unsigned int quad_idx
Quadrature index within the matrix-free object.
Definition operation_scratch_data.hpp:101
std::unique_ptr< dealii::Function< dim > > body_force
Pointer to the body force function.
Definition operation_scratch_data.hpp:116
const CutSolverData< number > * cut
Cut-related parameters (only relevant for cut applications)
Definition operation_scratch_data.hpp:95
void reinit(const unsigned solution_history_size)
Set up the internal data structures.
Definition operation_scratch_data.hpp:128
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition operation_scratch_data.hpp:33
OperationScratchData(const OperationData< number > &flow_data_in, const MaterialPhaseData< number > &material_data_in, const ScratchData< dim, dim, number > &scratch_data_in, const unsigned int dof_idx_in, const unsigned int quad_idx_in, const CutSolverData< number > *cut_data_in=nullptr)
Constructor.
Definition operation_scratch_data.hpp:48
dealii::AlignedVector< dealii::VectorizedArray< number > > interior_penalty_parameter
Penalty parameter for the Symmetric Interior Penalty Galerkin (SIPG) method.
Definition operation_scratch_data.hpp:110
BoundaryConditions< dim, number > boundary_conditions
Object taking care of all boundary condition related computations.
Definition operation_scratch_data.hpp:107
TimeIntegration::SolutionHistory< VectorType > solution_history
Solution history object.
Definition operation_scratch_data.hpp:113
bool is_viscous
Boolean variable indicating whether viscosity is present.
Definition operation_scratch_data.hpp:104
Collection of parameters for Darcy damping.
Definition darcy_damping_data.hpp:16
Data structure, which contains parameters specifically for the phase coupling of compressible multiph...
Definition phase_coupling_data.hpp:23
Collection of parameters related to liquid-gas and solid-liquid phase transitions.
Definition phase_change_data.hpp:12