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
22
24{
31 template <int dim, typename number>
33 {
34 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
35
49 explicit OperationScratchData(const OperationData<number> &flow_data_in,
50 const MaterialPhaseData<number> &material_data_in,
51 const ScratchData<dim, dim, number> &scratch_data_in,
52 const unsigned int dof_idx_in,
53 const unsigned int quad_idx_in,
54 const CutSolverData<number> *cut_data_in = nullptr)
55 : flow_data(flow_data_in)
56 , scratch_data(scratch_data_in)
57 , material(material_data_in)
58 , cut(cut_data_in)
59 , dof_idx(dof_idx_in)
60 , quad_idx(quad_idx_in)
61 {
62 if (material.data.number_of_species == 1)
63 {
64 is_viscous = material.data.dynamic_viscosity > 0.;
65 }
66 else
67 {
68 for (unsigned int species = 0; species < material.data.number_of_species; ++species)
69 {
70 if (material.data.species_data[species].dynamic_viscosity > 0.)
71 {
72 is_viscous = true;
73 break;
74 }
75 }
76 }
77
78 if (flow_data.domain_representation_type == "cut")
79 AssertThrow(
80 cut_data_in != nullptr,
81 dealii::ExcMessage(
82 "A CompressibleFlowCutData object has to be provided to the constructor of "
83 "CompressibleFlowScratchData in the case of domain_representation_type = 'cut'."));
84 }
85
88
91
94
96 const CutSolverData<number> *cut = nullptr;
97
99 const unsigned int dof_idx = 0;
100
102 const unsigned int quad_idx = 0;
103
105 bool is_viscous = false;
106
109
111 dealii::AlignedVector<dealii::VectorizedArray<number>> interior_penalty_parameter;
112
115
117 std::unique_ptr<dealii::Function<dim>> body_force;
118
128 void
129 reinit(const unsigned solution_history_size)
130 {
131 solution_history.resize(solution_history_size);
132 solution_history.apply(
133 [&scratch_data = scratch_data, comp_flow_dof_idx = dof_idx](VectorType &v) {
134 scratch_data.initialize_dof_vector(v, comp_flow_dof_idx);
135 });
136
137 if (is_viscous)
140 flow_data.domain_representation_type,
141 dof_idx);
142 }
143 };
144
151 template <int dim, typename number>
153 {
154 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
155
172 const OperationData<number> &flow_data_in,
173 const MaterialPhaseData<number> &material_data_gas_in,
174 const MaterialPhaseData<number> &material_data_liquid_in,
175 const Multiphase::PhaseChangeData<number> &phase_change_data_in,
176 const CutSolverData<number> &cut_data_in,
177 const Multiphase::CompressibleFlowPhaseCouplingData<number> &phase_coupling_data_in,
178 const Flow::DarcyDampingData<number> &darcy_damping_data_in,
179 const ScratchData<dim, dim, number> &scratch_data_in,
180 const unsigned int dof_idx_in,
181 const unsigned int quad_idx_in)
182 : flow_data(flow_data_in)
183 , scratch_data(scratch_data_in)
184 , material_gas(material_data_gas_in)
185 , material_liquid(material_data_liquid_in)
186 , phase_change(phase_change_data_in)
187 , cut(cut_data_in)
188 , phase_coupling(phase_coupling_data_in)
189 , darcy_damping(darcy_damping_data_in)
190 , dof_idx(dof_idx_in)
191 , quad_idx(quad_idx_in)
192 {
193 is_viscous =
194 material_gas.data.dynamic_viscosity > 0. or material_liquid.data.dynamic_viscosity > 0.;
195 }
196
199
202
205
208
211
214
217
220
222 const unsigned int dof_idx = 0;
223
225 const unsigned int quad_idx = 0;
226
228 bool is_viscous = false;
229
232
234 dealii::AlignedVector<dealii::VectorizedArray<number>> interior_penalty_parameter;
235
238
240 std::unique_ptr<dealii::Function<dim>> body_force;
241
251 void
252 reinit(const unsigned solution_history_size)
253 {
254 solution_history.resize(solution_history_size);
255 solution_history.apply(
256 [&scratch_data = scratch_data, comp_flow_dof_idx = dof_idx](VectorType &v) {
257 scratch_data.initialize_dof_vector(v, comp_flow_dof_idx);
258 });
259
260 if (is_viscous)
263 flow_data.domain_representation_type,
264 dof_idx);
265 }
266 };
267} // namespace MeltPoolDG::CompressibleFlow
Helper class taking care of all boundary condition related computations for the compressible flow sol...
Definition boundary_conditions.hpp:94
A class which provides all relevant material properties for a specific phase.
Definition material_data.hpp:18
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:220
Collection of cut-related solver parameters required by the cut single-phase and multiphase compressi...
Definition operation_data.hpp:176
Collection of material parameters for a specific fluid phase.
Definition material.hpp:119
Scratch data structure for compressible multiphase flow solvers.
Definition operation_scratch_data.hpp:153
const Flow::DarcyDampingData< number > darcy_damping
Parameters for darcy damping in the solid domain and mushy zone.
Definition operation_scratch_data.hpp:219
const Multiphase::CompressibleFlowPhaseCouplingData< number > phase_coupling
Parameters for the coupling of two compressible (or nearly incompressible) phases.
Definition operation_scratch_data.hpp:216
TimeIntegration::SolutionHistory< VectorType > solution_history
Solution history object.
Definition operation_scratch_data.hpp:237
BoundaryConditions< dim, number > boundary_conditions
Object taking care of all boundary condition related computations.
Definition operation_scratch_data.hpp:231
const unsigned int dof_idx
DoF index within the matrix-free object.
Definition operation_scratch_data.hpp:222
void reinit(const unsigned solution_history_size)
Set up the internal data structures.
Definition operation_scratch_data.hpp:252
const Material< dim, number > material_gas
Material parameters and thermodynamic relations for the gas phase.
Definition operation_scratch_data.hpp:204
const OperationData< number > flow_data
General parameters for the compressible Navier-Stokes operators.
Definition operation_scratch_data.hpp:198
std::unique_ptr< dealii::Function< dim > > body_force
Pointer to the body force function.
Definition operation_scratch_data.hpp:240
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition operation_scratch_data.hpp:154
bool is_viscous
Boolean variable indicating whether viscosity is present.
Definition operation_scratch_data.hpp:228
dealii::AlignedVector< dealii::VectorizedArray< number > > interior_penalty_parameter
Penalty parameter for the Symmetric Interior Penalty Galerkin (SIPG) method.
Definition operation_scratch_data.hpp:234
const Material< dim, number > material_liquid
Material parameters and thermodynamic relations for the liquid phase.
Definition operation_scratch_data.hpp:207
const ScratchData< dim, dim, number > & scratch_data
Mapping-, finite-element-, and quadrature-related parameters.
Definition operation_scratch_data.hpp:201
const Multiphase::PhaseChangeData< number > phase_change
Parameters related to liquid-gas and solid-liquid phase transitions.
Definition operation_scratch_data.hpp:210
const CutSolverData< number > cut
Cut-related parameters.
Definition operation_scratch_data.hpp:213
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:171
const unsigned int quad_idx
Quadrature index within the matrix-free object.
Definition operation_scratch_data.hpp:225
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:33
const OperationData< number > flow_data
General parameters for the compressible Navier-Stokes operators.
Definition operation_scratch_data.hpp:87
const ScratchData< dim, dim, number > & scratch_data
Mapping-, finite-element-, and quadrature-related parameters.
Definition operation_scratch_data.hpp:90
const unsigned int dof_idx
DoF index within the matrix-free object.
Definition operation_scratch_data.hpp:99
const unsigned int quad_idx
Quadrature index within the matrix-free object.
Definition operation_scratch_data.hpp:102
std::unique_ptr< dealii::Function< dim > > body_force
Pointer to the body force function.
Definition operation_scratch_data.hpp:117
const CutSolverData< number > * cut
Cut-related parameters (only relevant for cut applications)
Definition operation_scratch_data.hpp:96
void reinit(const unsigned solution_history_size)
Set up the internal data structures.
Definition operation_scratch_data.hpp:129
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition operation_scratch_data.hpp:34
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:49
dealii::AlignedVector< dealii::VectorizedArray< number > > interior_penalty_parameter
Penalty parameter for the Symmetric Interior Penalty Galerkin (SIPG) method.
Definition operation_scratch_data.hpp:111
BoundaryConditions< dim, number > boundary_conditions
Object taking care of all boundary condition related computations.
Definition operation_scratch_data.hpp:108
const Material< dim, number > material
Material parameters and thermodynamic relations.
Definition operation_scratch_data.hpp:93
TimeIntegration::SolutionHistory< VectorType > solution_history
Solution history object.
Definition operation_scratch_data.hpp:114
bool is_viscous
Boolean variable indicating whether viscosity is present.
Definition operation_scratch_data.hpp:105
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