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
42
43#include <memory>
44#include <variant>
45
47{
52 template <int dim, typename number>
54 {
55 public:
56 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
59
61 std::variant<CutDGOperator<dim, number, true>, CutDGOperator<dim, number, false>>;
79 explicit CutDGOperation(
80 const ScratchData<dim, dim, number> &scratch_data_in,
81 const OperationData<number> &comp_flow_data_in,
82 const MaterialPhaseData<number> &material_data_in,
83 const CutSolverData<number> &cut_data_in,
84 const TimeIntegration::TimeIterator<number> &time_iterator_in,
85 const std::function<void()> &setup_dof_system_in,
86 const VectorType &level_set_in,
87 unsigned int comp_flow_dof_idx_in = dealii::numbers::invalid_unsigned_int,
88 unsigned int level_set_dof_idx_in = dealii::numbers::invalid_unsigned_int,
89 unsigned int comp_flow_quad_idx_in = dealii::numbers::invalid_unsigned_int);
90
96 void
97 reinit();
98
106 void
107 set_body_force(std::unique_ptr<dealii::Function<dim>> body_force_in);
108
119 number
120 compute_time_step_size(bool do_print = false) const;
121
130 void
131 distribute_dofs(dealii::DoFHandler<dim> &dof_handler) const;
132
139 void
140 solve(number current_time, number time_step);
141
147 void
148 set_initial_condition(const dealii::Function<dim> &function);
149
155 void
156 set_inflow_field_unfitted_boundary(std::shared_ptr<dealii::Function<dim>> &inflow_function);
157
163 void
164 set_unfitted_object_velocity(std::shared_ptr<dealii::Function<dim>> &velocity_function);
165
175 void
176 set_boundary_conditions(const std::shared_ptr<SimulationCaseBase<dim, number>> &simulation_case,
177 const std::string &operation_name);
178
188 void
190
194 const VectorType &
195 get_solution() const;
196
200 VectorType &
201 get_solution();
202
206 const dealii::DoFHandler<dim> &
207 get_dof_handler() const;
208
226 bool is_viscous,
228 const MappingInfoType &mapping_info_surface_in,
229 const MappingInfoVectorType &mapping_info_cells_in,
230 const MappingInfoVectorType &mapping_info_faces_in)
231 {
232 if (is_viscous)
234 mapping_info_surface_in,
235 mapping_info_cells_in,
236 mapping_info_faces_in);
237 else
239 mapping_info_surface_in,
240 mapping_info_cells_in,
241 mapping_info_faces_in);
242 }
243
244 private:
247
250
252 const unsigned int level_set_dof_idx;
253
256
259
263 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier;
264
268 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier_old;
269
273
275 std::function<void()> setup_dof_system;
276
278 std::function<void(VectorType &)> reinit_vector;
279
281 dealii::FESystem<dim> fe_point_temp;
282
284 const unsigned int n_dofs_per_cell;
285
288
291
294
297
300
312 void
314
318 void
319 classify_cells() const;
320
326 number
328
334 number
336
341 void
343 };
344
346 template <int dim, typename number>
347 const dealii::LinearAlgebra::distributed::Vector<number> &
349 {
350 return flow_scratch_data.solution_history.get_current_solution();
351 }
352
353 template <int dim, typename number>
354 dealii::LinearAlgebra::distributed::Vector<number> &
356 {
357 return flow_scratch_data.solution_history.get_current_solution();
358 }
359
360 template <int dim, typename number>
361 const dealii::DoFHandler<dim> &
363 {
364 return flow_scratch_data.scratch_data.get_dof_handler(flow_scratch_data.dof_idx);
365 }
366
367} // namespace MeltPoolDG::CompressibleFlow
Operation that performs a full time step for the compressible single-phase Navier-Stokes equations in...
Definition cutdg_operation.hpp:54
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:282
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier_old
Definition cutdg_operation.hpp:268
void set_initial_condition(const dealii::Function< dim > &function)
Set the initial condition of the solution dof vector.
Definition cutdg_operation.cpp:249
CutUtil::SolutionTransferOperator< dim, number > cut_solution_transfer
Definition cutdg_operation.hpp:272
const TimeIntegration::TimeIterator< number > & time_iterator
Time iterator.
Definition cutdg_operation.hpp:249
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:307
void distribute_dofs(dealii::DoFHandler< dim > &dof_handler) const
Distribute dofs needed for a finite element type given in CompressibleFlowData.
Definition cutdg_operation.cpp:191
void classify_cells() const
Classify cells according to the current state of the level-set field.
Definition cutdg_operation.cpp:300
OperationScratchData< dim, number > flow_scratch_data
Scratch data for compressible flows.
Definition cutdg_operation.hpp:246
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:225
number compute_minimum_density() const
Compute the minimum density currently occurring in the flow field.
Definition cutdg_operation.cpp:342
dealii::FESystem< dim > fe_point_temp
FESystem object, required by FEPointEvaluation.
Definition cutdg_operation.hpp:281
const unsigned int n_dofs_per_cell
Number of DoFs per cell.
Definition cutdg_operation.hpp:284
OutputManager< dim, number > output_manager
Object containing the data post processor for the different output options.
Definition cutdg_operation.hpp:299
std::function< void(VectorType &)> reinit_vector
Function for DoF vector reinitialization.
Definition cutdg_operation.hpp:278
MappingInfoVectorType mapping_info_cells
Mapping information for integration over cut cells.
Definition cutdg_operation.hpp:290
const VectorType & get_solution() const
Constant getter function for the current solution vector.
Definition cutdg_operation.hpp:348
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:291
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:122
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const
Attach the solution to the passed data out object.
Definition cutdg_operation.cpp:211
std::variant< CutDGOperator< dim, number, true >, CutDGOperator< dim, number, false > > CutFlowOperatorVariant
Definition cutdg_operation.hpp:61
MappingInfoVectorType mapping_info_faces
Mapping information for integration over cut faces.
Definition cutdg_operation.hpp:293
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:131
std::function< void()> setup_dof_system
Function to set up the DoF system.
Definition cutdg_operation.hpp:275
CutUtil::MappingInfoVectorType< dim, number > MappingInfoVectorType
Definition cutdg_operation.hpp:58
const VectorType & level_set
Reference to the level-set field used to represent the immersed boundary.
Definition cutdg_operation.hpp:255
MappingInfoType mapping_info_surface
Mapping information for integration over immersed boundaries.
Definition cutdg_operation.hpp:287
void reinit()
Set up the required internal data structures.
Definition cutdg_operation.cpp:172
void compute_intersected_quadrature()
Compute the quadrature rules for intersected elements, intersected faces and immersed phase boundarie...
Definition cutdg_operation.cpp:416
number compute_convective_time_step_limit() const
Compute the convective time step limit for the current mesh and flow field.
Definition cutdg_operation.cpp:434
number compute_time_step_size(bool do_print=false) const
Compute the maximum time step size.
Definition cutdg_operation.cpp:139
CutFlowOperatorVariant cut_flow_operator
Compressible flow operator object.
Definition cutdg_operation.hpp:296
VectorType rhs
Right-hand side vector.
Definition cutdg_operation.hpp:258
CutUtil::MappingInfoType< dim, number > MappingInfoType
Definition cutdg_operation.hpp:57
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier
Definition cutdg_operation.hpp:263
void solve(number current_time, number time_step)
Solves the compressible Navier-Stokes equations for a single time step.
Definition cutdg_operation.cpp:222
const dealii::DoFHandler< dim > & get_dof_handler() const
Constant getter function for the DoFHandler.
Definition cutdg_operation.hpp:362
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition cutdg_operation.hpp:56
const unsigned int level_set_dof_idx
DoF index associated to the level set field.
Definition cutdg_operation.hpp:252
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
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:176
Collection of material parameters for a specific fluid phase.
Definition material.hpp:119
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
Definition output_post_processor.hpp:318