include/meltpooldg/compressible_flow/multiphase_operation.hpp Source File

Developer Documentation: include/meltpooldg/compressible_flow/multiphase_operation.hpp Source File
Developer Documentation
multiphase_operation.hpp
Go to the documentation of this file.
1
23#pragma once
24
25#include <deal.II/base/function.h>
26
27#include <deal.II/fe/fe_system.h>
28
29#include <deal.II/non_matching/mesh_classifier.h>
30
43
44#include <memory>
45#include <variant>
46
48{
53 template <int dim, typename number>
55 {
56 public:
57 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
60
62 std::variant<CompressibleMultiphaseOperator<dim, number, true, true>,
66
93 const ScratchData<dim, dim, number> &scratch_data_in,
94 const CompressibleFlow::OperationData<number> &comp_flow_data_in,
95 const CompressibleFlow::MaterialPhaseData<number> &material_data_gas_in,
96 const CompressibleFlow::MaterialPhaseData<number> &material_data_liquid_in,
97 const PhaseChangeData<number> &phase_change_data_in,
99 const CompressibleFlowPhaseCouplingData<number> &phase_coupling_data_in,
100 const Flow::DarcyDampingData<number> &darcy_damping_data_in,
101 const TimeIntegration::TimeIterator<number> &time_iterator_in,
102 const std::function<void()> &setup_dof_system_in,
103 const VectorType &level_set_in,
104 unsigned int comp_flow_dof_idx_in = dealii::numbers::invalid_unsigned_int,
105 unsigned int level_set_dof_idx_in = dealii::numbers::invalid_unsigned_int,
106 unsigned int comp_flow_quad_idx_in = dealii::numbers::invalid_unsigned_int);
107
113 void
114 reinit();
115
123 void
124 set_body_force(std::unique_ptr<dealii::Function<dim>> body_force_in);
125
131 void
133 std::shared_ptr<CompressibleFlow::ExternalFlowForce<dim, number>> external_force);
134
145 number
146 compute_time_step_size(bool do_print = false) const;
147
156 void
157 distribute_dofs(dealii::DoFHandler<dim> &dof_handler) const;
158
165 void
166 solve(number current_time, number time_step);
167
173 void
174 set_initial_condition(const dealii::Function<dim> &function);
175
185 void
186 set_boundary_conditions(const std::shared_ptr<SimulationCaseBase<dim, number>> &simulation_case,
187 const std::string &operation_name);
188
197 void
199
203 const VectorType &
204 get_solution() const;
205
209 VectorType &
210 get_solution();
211
216 VectorType &
218
222 const dealii::DoFHandler<dim> &
223 get_dof_handler() const;
224
244 bool is_viscous_gas,
245 bool is_viscous_liquid,
247 const MappingInfoType &mapping_info_surface_in,
248 const MappingInfoVectorType &mapping_info_cells_in,
249 const MappingInfoVectorType &mapping_info_faces_in)
250 {
251 if (is_viscous_gas and is_viscous_liquid)
253 mapping_info_surface_in,
254 mapping_info_cells_in,
255 mapping_info_faces_in);
256 else if (is_viscous_gas and (not is_viscous_liquid))
258 mapping_info_surface_in,
259 mapping_info_cells_in,
260 mapping_info_faces_in);
261 else if ((not is_viscous_gas) and is_viscous_liquid)
263 mapping_info_surface_in,
264 mapping_info_cells_in,
265 mapping_info_faces_in);
266 else
268 mapping_info_surface_in,
269 mapping_info_cells_in,
270 mapping_info_faces_in);
271 }
272
273 private:
276
279
281 const unsigned int level_set_dof_idx;
282
285
288
291
294 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier;
295
298 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier_old;
299
303
305 std::function<void()> setup_dof_system;
306
308 std::function<void(VectorType &)> reinit_vector;
309
311 dealii::FESystem<dim> fe_point_temp;
312
314 const unsigned int n_dofs_per_cell;
315
318
321
324
327
339 void
341
345 void
346 classify_cells() const;
347
353 number
355
361 std::pair<number, number>
363
368 void
370 };
371
372 // inlined functions
373 template <int dim, typename number>
374 const dealii::LinearAlgebra::distributed::Vector<number> &
376 {
377 return multiphase_scratch_data.solution_history.get_current_solution();
378 }
379
380 template <int dim, typename number>
381 dealii::LinearAlgebra::distributed::Vector<number> &
383 {
384 return multiphase_scratch_data.solution_history.get_current_solution();
385 }
386
387 template <int dim, typename number>
388 dealii::LinearAlgebra::distributed::Vector<number> &
390 {
391 update_primitive_variables_solution<dim, number>(solution_primitive_variables,
392 get_solution(),
393 multiphase_scratch_data.scratch_data,
394 multiphase_scratch_data.dof_idx,
395 multiphase_scratch_data.quad_idx,
396 &multiphase_scratch_data.material_liquid,
397 &multiphase_scratch_data.material_gas);
398 return solution_primitive_variables;
399 }
400
401 template <int dim, typename number>
402 const dealii::DoFHandler<dim> &
404 {
405 return multiphase_scratch_data.scratch_data.get_dof_handler(multiphase_scratch_data.dof_idx);
406 }
407
408} // namespace MeltPoolDG::Multiphase
Operator for the solution transfer in moving boundary/interface simulations.
Definition solution_transfer.hpp:38
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Operation that performs a full time step for the compressible two-phase Navier-Stokes equations in a ...
Definition multiphase_operation.hpp:55
std::function< void(VectorType &)> reinit_vector
Function for DoF vector reinitialization.
Definition multiphase_operation.hpp:308
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier_old
Definition multiphase_operation.hpp:298
void set_initial_condition(const dealii::Function< dim > &function)
Set the initial condition of the solution dof vector.
Definition multiphase_operation.cpp:362
const unsigned int level_set_dof_idx
DoF index associated to the level set field.
Definition multiphase_operation.hpp:281
MappingInfoVectorType mapping_info_faces
Mapping information for integration over cut faces.
Definition multiphase_operation.hpp:323
void set_body_force(std::unique_ptr< dealii::Function< dim > > body_force_in)
Set a body force, e.g. gravity, specified by the passed function.
Definition multiphase_operation.cpp:138
std::variant< CompressibleMultiphaseOperator< dim, number, true, true >, CompressibleMultiphaseOperator< dim, number, true, false >, CompressibleMultiphaseOperator< dim, number, false, true >, CompressibleMultiphaseOperator< dim, number, false, false > > CompMultiphaseOperatorVariant
Definition multiphase_operation.hpp:65
dealii::FESystem< dim > fe_point_temp
FESystem object, required by FEPointEvaluation.
Definition multiphase_operation.hpp:311
std::pair< number, number > compute_minimum_density() const
Compute the minimum density currently occurring in the flow field.
Definition multiphase_operation.cpp:420
CompMultiphaseOperatorVariant cmp_operator
Compressible multiphase operator object.
Definition multiphase_operation.hpp:326
VectorType & get_solution_in_primitive_variables() const
Getter function for the current solution vector in primitive variables (pressure, velocity,...
Definition multiphase_operation.hpp:389
number compute_convective_time_step_limit() const
Compute the convective time step limit for the current mesh and flow field.
Definition multiphase_operation.cpp:547
VectorType solution_primitive_variables
Solution vector in primitive variable formulation (pressure, velocity, temperature)
Definition multiphase_operation.hpp:290
void solve(number current_time, number time_step)
Solves the compressible two-phase Navier-Stokes equations for a single time step.
Definition multiphase_operation.cpp:332
MappingInfoVectorType mapping_info_cells
Mapping information for integration over cut cells.
Definition multiphase_operation.hpp:320
void reinit()
Set up the required internal data structures.
Definition multiphase_operation.cpp:282
MappingInfoType mapping_info_surface
Mapping information for integration over phase interfaces.
Definition multiphase_operation.hpp:317
number compute_time_step_size(bool do_print=false) const
Compute the maximum time step size.
Definition multiphase_operation.cpp:226
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier
Definition multiphase_operation.hpp:294
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const
Attach the solution to the passed data out object.
Definition multiphase_operation.cpp:155
static CompMultiphaseOperatorVariant create_cut_flow_operator_variant(bool is_viscous_gas, bool is_viscous_liquid, CompressibleFlow::MultiphaseOperationScratchData< dim, number > &multiphase_scratch_data, const MappingInfoType &mapping_info_surface_in, const MappingInfoVectorType &mapping_info_cells_in, const MappingInfoVectorType &mapping_info_faces_in)
Create and return the appropriate compressible multiphase operator variant.
Definition multiphase_operation.hpp:243
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition multiphase_operation.hpp:57
const VectorType & get_solution() const
Constant getter function for the current solution vector.
Definition multiphase_operation.hpp:375
void classify_cells() const
Classify cells according to the current state of the level-set field.
Definition multiphase_operation.cpp:375
CutUtil::MappingInfoVectorType< dim, number > MappingInfoVectorType
Definition multiphase_operation.hpp:59
void add_external_force(std::shared_ptr< CompressibleFlow::ExternalFlowForce< dim, number > > external_force)
Add external fluid forces (e.g. gravity, ...).
Definition multiphase_operation.cpp:147
CutUtil::MappingInfoType< dim, number > MappingInfoType
Definition multiphase_operation.hpp:58
CutUtil::SolutionTransferOperator< dim, number > cut_solution_transfer
Definition multiphase_operation.hpp:302
const unsigned int n_dofs_per_cell
Number of DoFs per cell.
Definition multiphase_operation.hpp:314
void distribute_dofs(dealii::DoFHandler< dim > &dof_handler) const
Distribute dofs needed for a finite element type given in CompressibleFlowData.
Definition multiphase_operation.cpp:308
CompressibleFlow::MultiphaseOperationScratchData< dim, number > multiphase_scratch_data
Scratch data for multiphase case.
Definition multiphase_operation.hpp:275
const TimeIntegration::TimeIterator< number > & time_iterator
Time iterator.
Definition multiphase_operation.hpp:278
std::function< void()> setup_dof_system
Function to set up the DoF system.
Definition multiphase_operation.hpp:305
const dealii::DoFHandler< dim > & get_dof_handler() const
Constant getter function for the DoFHandler.
Definition multiphase_operation.hpp:403
VectorType rhs
Right-hand side vector.
Definition multiphase_operation.hpp:287
const VectorType & level_set
Reference to the level-set field used to represent the interface between phases.
Definition multiphase_operation.hpp:284
void adapt_to_new_interface_position()
Adapt the dof layout and solution vector to a new interface position, which is defined by the zero-le...
Definition multiphase_operation.cpp:382
void set_boundary_conditions(const std::shared_ptr< SimulationCaseBase< dim, number > > &simulation_case, const std::string &operation_name)
Set the boundary conditions.
Definition multiphase_operation.cpp:128
void compute_intersected_quadrature()
Compute the quadrature rules for intersected elements, intersected faces and phase surfaces.
Definition multiphase_operation.cpp:529
Operator for the matrix-free of a compressible multiphase flow cutDG formulation.
Definition multiphase_operator.hpp:26
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
Base class for managing a simulation case in a parallel computing environment.
Definition simulation_case_base.hpp:44
Definition time_iterator.hpp:15
std::vector< std::shared_ptr< MappingInfoType< dim, number > > > MappingInfoVectorType
Definition util.hpp:56
dealii::NonMatching::MappingInfo< dim, dim, dealii::VectorizedArray< number > > MappingInfoType
Definition util.hpp:53
A collection of functions for the computation of the interface terms for compressible two-phase flows...
Definition multiphase_interface_kernels.hpp:31
Collection of cut-related solver parameters required by the cut single-phase and multiphase compressi...
Definition operation_data.hpp:176
An abstract interface for defining external forces acting on the fluid that must be evaluated and inc...
Definition utils.hpp:117
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
Collection of parameters required by the compressible Navier-Stokes operator.
Definition operation_data.hpp:35
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