include/meltpooldg/compressible_flow/cutdg_operation.hpp Source File

Developer Documentation: include/meltpooldg/compressible_flow/cutdg_operation.hpp Source File
Developer Documentation
cutdg_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
64 std::variant<CutDGOperator<dim, number, true>, CutDGOperator<dim, number, false>>;
82 explicit CutDGOperation(
83 const ScratchData<dim, dim, number> &scratch_data_in,
84 const OperationData<number> &comp_flow_data_in,
85 const MaterialPhaseData<number> &material_data_in,
86 const CutSolverData<number> &cut_data_in,
87 const TimeIntegration::TimeIterator<number> &time_iterator_in,
88 const std::function<void()> &setup_dof_system_in,
89 const VectorType &level_set_in,
90 unsigned int comp_flow_dof_idx_in = dealii::numbers::invalid_unsigned_int,
91 unsigned int level_set_dof_idx_in = dealii::numbers::invalid_unsigned_int,
92 unsigned int comp_flow_quad_idx_in = dealii::numbers::invalid_unsigned_int);
93
99 void
100 reinit();
101
109 void
110 set_body_force(std::unique_ptr<dealii::Function<dim>> body_force_in);
111
122 number
123 compute_time_step_size(bool do_print = false) const;
124
133 void
134 distribute_dofs(dealii::DoFHandler<dim> &dof_handler) const;
135
142 void
143 solve(number current_time, number time_step);
144
150 void
151 set_initial_condition(const dealii::Function<dim> &function);
152
158 void
159 set_inflow_field_unfitted_boundary(std::shared_ptr<dealii::Function<dim>> &inflow_function);
160
166 void
167 set_unfitted_object_velocity(std::shared_ptr<dealii::Function<dim>> &velocity_function);
168
178 void
179 set_boundary_conditions(const std::shared_ptr<SimulationCaseBase<dim, number>> &simulation_case,
180 const std::string &operation_name);
181
192 std::vector<std::complex<number>>
193 estimate_jacobian_eigenvalues(const number /*time_step*/) const
194 {
195 AssertThrow(false,
196 dealii::ExcMessage("Eigenvalue estimation is not implemented for "
197 "CutDGOperation."));
198 return {};
199 }
200
210 void
212
216 const VectorType &
217 get_solution() const;
218
222 VectorType &
223 get_solution();
224
228 const dealii::DoFHandler<dim> &
229 get_dof_handler() const;
230
248 bool is_viscous,
250 const MappingInfoType &mapping_info_surface_in,
251 const MappingInfoVectorType &mapping_info_cells_in,
252 const MappingInfoVectorType &mapping_info_faces_in)
253 {
254 if (is_viscous)
256 mapping_info_surface_in,
257 mapping_info_cells_in,
258 mapping_info_faces_in);
259 else
261 mapping_info_surface_in,
262 mapping_info_cells_in,
263 mapping_info_faces_in);
264 }
265
266 private:
269
272
274 const unsigned int level_set_dof_idx;
275
278
281
285 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier;
286
290 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier_old;
291
295
297 std::function<void()> setup_dof_system;
298
300 std::function<void(VectorType &)> reinit_vector;
301
303 dealii::FESystem<dim> fe_point_temp;
304
306 const unsigned int n_dofs_per_cell;
307
310
313
316
319
322
334 void
336
340 void
341 classify_cells() const;
342
348 number
350
356 number
358
363 void
365 };
366
368 template <int dim, typename number>
369 const dealii::LinearAlgebra::distributed::Vector<number> &
371 {
372 return flow_scratch_data.solution_history.get_current_solution();
373 }
374
375 template <int dim, typename number>
376 dealii::LinearAlgebra::distributed::Vector<number> &
378 {
379 return flow_scratch_data.solution_history.get_current_solution();
380 }
381
382 template <int dim, typename number>
383 const dealii::DoFHandler<dim> &
385 {
386 return flow_scratch_data.scratch_data.get_dof_handler(flow_scratch_data.dof_idx);
387 }
388
389} // namespace MeltPoolDG::CompressibleFlow
Operation that performs a full time step for the compressible single-phase Navier-Stokes equations in...
Definition cutdg_operation.hpp:55
void set_inflow_field_unfitted_boundary(std::shared_ptr< dealii::Function< dim > > &inflow_function)
Set the inflow field function in the case of an unfitted inflow boundary.
Definition cutdg_operation.cpp:283
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier_old
Definition cutdg_operation.hpp:290
void set_initial_condition(const dealii::Function< dim > &function)
Set the initial condition of the solution dof vector.
Definition cutdg_operation.cpp:250
CutUtil::SolutionTransferOperator< dim, number > cut_solution_transfer
Definition cutdg_operation.hpp:294
const TimeIntegration::TimeIterator< number > & time_iterator
Time iterator.
Definition cutdg_operation.hpp:271
std::vector< std::complex< number > > estimate_jacobian_eigenvalues(const number) const
Definition cutdg_operation.hpp:193
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 cutdg_operation.cpp:308
void distribute_dofs(dealii::DoFHandler< dim > &dof_handler) const
Distribute dofs needed for a finite element type given in CompressibleFlowData.
Definition cutdg_operation.cpp:192
void classify_cells() const
Classify cells according to the current state of the level-set field.
Definition cutdg_operation.cpp:301
OperationScratchData< dim, number > flow_scratch_data
Scratch data for compressible flows.
Definition cutdg_operation.hpp:268
static CutFlowOperatorVariant create_cut_flow_operator_variant(bool is_viscous, OperationScratchData< dim, number > &flow_scratch_data, const MappingInfoType &mapping_info_surface_in, const MappingInfoVectorType &mapping_info_cells_in, const MappingInfoVectorType &mapping_info_faces_in)
Factory function to create a variant of the CutDGCompressibleFlowOperator depending on viscosity.
Definition cutdg_operation.hpp:247
number compute_minimum_density() const
Compute the minimum density currently occurring in the flow field.
Definition cutdg_operation.cpp:343
dealii::FESystem< dim > fe_point_temp
FESystem object, required by FEPointEvaluation.
Definition cutdg_operation.hpp:303
const unsigned int n_dofs_per_cell
Number of DoFs per cell.
Definition cutdg_operation.hpp:306
OutputManager< dim, number > output_manager
Object containing the data post processor for the different output options.
Definition cutdg_operation.hpp:321
std::function< void(VectorType &)> reinit_vector
Function for DoF vector reinitialization.
Definition cutdg_operation.hpp:300
MappingInfoVectorType mapping_info_cells
Mapping information for integration over cut cells.
Definition cutdg_operation.hpp:312
const VectorType & get_solution() const
Constant getter function for the current solution vector.
Definition cutdg_operation.hpp:370
void set_unfitted_object_velocity(std::shared_ptr< dealii::Function< dim > > &velocity_function)
Set the velocity function in the case of an unfitted (rigid) moving object.
Definition cutdg_operation.cpp:292
void set_boundary_conditions(const std::shared_ptr< SimulationCaseBase< dim, number > > &simulation_case, const std::string &operation_name)
Set the (standard compressible flow, i.e. non-cut specific) boundary conditions.
Definition cutdg_operation.cpp:123
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const
Attach the solution to the passed data out object.
Definition cutdg_operation.cpp:212
std::variant< CutDGOperator< dim, number, true >, CutDGOperator< dim, number, false > > CutFlowOperatorVariant
Definition cutdg_operation.hpp:64
MappingInfoVectorType mapping_info_faces
Mapping information for integration over cut faces.
Definition cutdg_operation.hpp:315
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 cutdg_operation.cpp:132
std::function< void()> setup_dof_system
Function to set up the DoF system.
Definition cutdg_operation.hpp:297
CutUtil::MappingInfoVectorType< dim, number > MappingInfoVectorType
Definition cutdg_operation.hpp:59
const VectorType & level_set
Reference to the level-set field used to represent the immersed boundary.
Definition cutdg_operation.hpp:277
MappingInfoType mapping_info_surface
Mapping information for integration over immersed boundaries.
Definition cutdg_operation.hpp:309
void reinit()
Set up the required internal data structures.
Definition cutdg_operation.cpp:173
ConservedVariablesType< dim, number > ConservedVariables
Definition cutdg_operation.hpp:61
void compute_intersected_quadrature()
Compute the quadrature rules for intersected elements, intersected faces and immersed phase boundarie...
Definition cutdg_operation.cpp:417
number compute_convective_time_step_limit() const
Compute the convective time step limit for the current mesh and flow field.
Definition cutdg_operation.cpp:435
number compute_time_step_size(bool do_print=false) const
Compute the maximum time step size.
Definition cutdg_operation.cpp:140
CutFlowOperatorVariant cut_flow_operator
Compressible flow operator object.
Definition cutdg_operation.hpp:318
VectorType rhs
Right-hand side vector.
Definition cutdg_operation.hpp:280
CutUtil::MappingInfoType< dim, number > MappingInfoType
Definition cutdg_operation.hpp:58
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier
Definition cutdg_operation.hpp:285
void solve(number current_time, number time_step)
Solves the compressible Navier-Stokes equations for a single time step.
Definition cutdg_operation.cpp:223
const dealii::DoFHandler< dim > & get_dof_handler() const
Constant getter function for the DoFHandler.
Definition cutdg_operation.hpp:384
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition cutdg_operation.hpp:57
const unsigned int level_set_dof_idx
DoF index associated to the level set field.
Definition cutdg_operation.hpp:274
Operator for the matrix-free evaluation of a compressible single-phase flow cutDG formulation.
Definition cutdg_operator.hpp:23
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
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
This file contains various functions that can be used to set and evaluate boundary conditions for the...
Definition boundary_condition_functions.hpp:17
dealii::Tensor< 1, n_conserved_variables< dim, n_species >, VectorizedArrayType > ConservedVariablesType
Definition data_types.hpp:45
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
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
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
Definition output_post_processor.hpp:318