CompressibleMultiphaseOperation< dim, number > Class Template Reference
|
Developer Documentation
|
Operation that performs a full time step for the compressible two-phase Navier-Stokes equations in a cutDG context. More...
#include <multiphase_operation.hpp>
Public Types | |
| using | VectorType = dealii::LinearAlgebra::distributed::Vector< number > |
| using | MappingInfoType = CutUtil::MappingInfoType< dim, number > |
| using | MappingInfoVectorType = CutUtil::MappingInfoVectorType< dim, number > |
| using | ConservedVariablesType = CompressibleFlow::ConservedVariablesType< dim, number > |
| using | DofStateView = CompressibleFlow::DofStateView< dim, number, const ConservedVariablesType > |
| using | CompMultiphaseOperatorVariant = std::variant< CompressibleMultiphaseOperator< dim, number, true, true >, CompressibleMultiphaseOperator< dim, number, true, false >, CompressibleMultiphaseOperator< dim, number, false, true >, CompressibleMultiphaseOperator< dim, number, false, false > > |
Public Member Functions | |
| CompressibleMultiphaseOperation (const ScratchData< dim, dim, number > &scratch_data_in, const CompressibleFlow::OperationData< number > &comp_flow_data_in, const CompressibleFlow::MaterialPhaseData< number > &material_data_gas_in, const CompressibleFlow::MaterialPhaseData< number > &material_data_liquid_in, const PhaseChangeData< number > &phase_change_data_in, const CompressibleFlow::CutSolverData< number > &cut_data_in, const CompressibleFlowPhaseCouplingData< number > &phase_coupling_data_in, const Flow::DarcyDampingData< number > &darcy_damping_data_in, const TimeIntegration::TimeIterator< number > &time_iterator_in, const std::function< void()> &setup_dof_system_in, const VectorType &level_set_in, unsigned int comp_flow_dof_idx_in=dealii::numbers::invalid_unsigned_int, unsigned int level_set_dof_idx_in=dealii::numbers::invalid_unsigned_int, unsigned int comp_flow_quad_idx_in=dealii::numbers::invalid_unsigned_int) | |
| Constructor. | |
| void | reinit () |
| Set up the required internal data structures. | |
| 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. | |
| void | add_external_force (std::shared_ptr< CompressibleFlow::ExternalFlowForce< dim, number > > external_force) |
| Add external fluid forces (e.g. gravity, ...). | |
| number | compute_time_step_size (bool do_print=false) const |
| Compute the maximum time step size. | |
| std::vector< std::complex< number > > | estimate_jacobian_eigenvalues (const number) const |
| void | distribute_dofs (dealii::DoFHandler< dim > &dof_handler) const |
Distribute dofs needed for a finite element type given in CompressibleFlowData. | |
| void | solve (number current_time, number time_step) |
| Solves the compressible two-phase Navier-Stokes equations for a single time step. | |
| void | set_initial_condition (const dealii::Function< dim > &function) |
| Set the initial condition of the solution dof vector. | |
| bool | repartition (VectorType &level_set_in, const std::function< void()> &distribute_level_set_dofs) |
| Repartition the triangulation among the MPI processes with cell weights according to the location of the cells with respect to the level set. | |
| void | set_boundary_conditions (const std::shared_ptr< SimulationCaseBase< dim, number > > &simulation_case, const std::string &operation_name) |
| Set the boundary conditions. | |
| void | attach_output_vectors (GenericDataOut< dim, number > &data_out) const |
| Attach the solution to the passed data out object. | |
| const VectorType & | get_solution () const |
| Constant getter function for the current solution vector. | |
| VectorType & | get_solution () |
| Getter function for the current solution vector. | |
| VectorType & | get_solution_in_primitive_variables () const |
| Getter function for the current solution vector in primitive variables (pressure, velocity, temperature). | |
| const dealii::DoFHandler< dim > & | get_dof_handler () const |
| Constant getter function for the DoFHandler. | |
Static Public Member Functions | |
| 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. | |
Private Member Functions | |
| void | adapt_to_new_interface_position () |
| Adapt the dof layout, solution vector, and discretization to a new interface position, which is defined by the zero-level-set-isosurface. | |
| void | classify_cells () const |
| Classify cells according to the current state of the level-set field. | |
| number | compute_convective_time_step_limit () const |
| Compute the convective time step limit for the current mesh and flow field. | |
| number | compute_viscous_time_step_limit (const std::pair< number, number > &min_density) const |
| Compute the viscous time step limit for the current mesh and flow field. | |
| std::pair< number, number > | compute_minimum_density () const |
| Compute the minimum density currently occurring in the flow field. | |
| void | compute_intersected_quadrature () |
| Compute the quadrature rules for intersected elements, intersected faces and phase surfaces. | |
Private Attributes | |
| CompressibleFlow::MultiphaseOperationScratchData< dim, number > | multiphase_scratch_data |
| Scratch data for multiphase case. | |
| const TimeIntegration::TimeIterator< number > & | time_iterator |
| Time iterator. | |
| const unsigned int | level_set_dof_idx |
| DoF index associated to the level set field. | |
| const VectorType & | level_set |
| Reference to the level-set field used to represent the interface between phases. | |
| VectorType | rhs |
| Right-hand side vector. | |
| VectorType | solution_primitive_variables |
| Solution vector in primitive variable formulation (pressure, velocity, temperature) | |
| std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > | mesh_classifier |
| std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > | mesh_classifier_old |
| CutUtil::SolutionTransferOperator< dim, number > | cut_solution_transfer |
| std::function< void()> | setup_dof_system |
| Function to set up the DoF system. | |
| std::function< void(VectorType &)> | reinit_vector |
| Function for DoF vector reinitialization. | |
| dealii::FESystem< dim > | fe_point_temp |
| FESystem object, required by FEPointEvaluation. | |
| const unsigned int | n_dofs_per_cell |
| Number of DoFs per cell. | |
| MappingInfoType | mapping_info_surface |
| Mapping information for integration over phase interfaces. | |
| MappingInfoVectorType | mapping_info_cells |
| Mapping information for integration over cut cells. | |
| MappingInfoVectorType | mapping_info_faces |
| Mapping information for integration over cut faces. | |
| CompMultiphaseOperatorVariant | cmp_operator |
| Compressible multiphase operator object. | |
| Preconditioner< dim, VectorType, number > | preconditioner |
| Preconditioner for the linear solver. | |
| bool | preconditioner_update_flag = false |
| Boolean indicator whether the preconditioner needs to be updated before the next solve. | |
| unsigned int | n_steps_performed = 0 |
| std::unique_ptr< CutUtil::PartitionWeights< dim > > | partition_weights |
Detailed Description
class MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >
Operation that performs a full time step for the compressible two-phase Navier-Stokes equations in a cutDG context.
Member Typedef Documentation
◆ CompMultiphaseOperatorVariant
| using MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::CompMultiphaseOperatorVariant = std::variant<CompressibleMultiphaseOperator<dim, number, true, true>, CompressibleMultiphaseOperator<dim, number, true, false>, CompressibleMultiphaseOperator<dim, number, false, true>, CompressibleMultiphaseOperator<dim, number, false, false> > |
◆ ConservedVariablesType
| using MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::ConservedVariablesType = CompressibleFlow::ConservedVariablesType<dim, number> |
◆ DofStateView
| using MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::DofStateView = CompressibleFlow::DofStateView<dim, number, const ConservedVariablesType> |
◆ MappingInfoType
| using MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::MappingInfoType = CutUtil::MappingInfoType<dim, number> |
◆ MappingInfoVectorType
| using MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::MappingInfoVectorType = CutUtil::MappingInfoVectorType<dim, number> |
◆ VectorType
| using MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::VectorType = dealii::LinearAlgebra::distributed::Vector<number> |
Constructor & Destructor Documentation
◆ CompressibleMultiphaseOperation()
|
explicit |
Constructor.
Initializes all internal data structures required to simulate compressible multiphase Navier-Stokes flows using a cutDG approach.
- Parameters
-
scratch_data_in Reference to the used ScratchData object. comp_flow_data_in Reference to the compressible flow data struct used. material_data_gas_in Reference to the material data struct for the gas phase. material_data_liquid_in Reference to the material data struct for the liquid phase. phase_change_data_in Reference to the phase change data struct for liquid-gas and solid-liquid phase transitions. cut_data_in Reference to the data object with cut-related parameters. phase_coupling_data_in Reference to the struct for phase coupling parameters. darcy_damping_data_in Reference to the struct for darcy damping parameters. time_iterator_in Reference to the used time stepping. setup_dof_system_in Reinit_matrix_free function, which is registered. level_set_in level-set dof vector. comp_flow_dof_idx_in Index of the used dof handler for solution in scratch_data_in.level_set_dof_idx_in Index of the used dof handler for level-set in scratch_data_in.comp_flow_quad_idx_in Index of the used quadrature object in scratch_data_in.
- Note
- This constructor assumes that explicit time stepping is used. Only one solution is stored in the history, and ghost-penalty stabilization is enabled.
Member Function Documentation
◆ adapt_to_new_interface_position()
|
private |
Adapt the dof layout, solution vector, and discretization to a new interface position, which is defined by the zero-level-set-isosurface.
The function first classifies the cells according to the current interface position and checks whether any cell changed its location with respect to the level set. The new non-matching quadrature rules for intersected cells, intersected faces and the phase interface are computed in all cases.
If the DoF layout is unchanged, i.e. no cell changed its location with respect to the level set, the existing DoF numbering and partitioning, MatrixFree object, solution vector and preconditioner data structures remain valid and are reused. Only the cut geometry-dependent quadrature rules are recomputed.
If the DoF layout changed, the following additional steps are performed:
- adapt DoFHandler and solution vectors according to new interface position, extrapolate new DoF values via ghost-penalty extrapolation
- reinit matrix-free object, rhs and solution vectors
- reinitialize the preconditioner's data structures
◆ add_external_force()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::add_external_force | ( | std::shared_ptr< CompressibleFlow::ExternalFlowForce< dim, number > > | external_force | ) |
Add external fluid forces (e.g. gravity, ...).
- Parameters
-
external_force A provided shared pointer to an external force definition.
◆ attach_output_vectors()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::attach_output_vectors | ( | GenericDataOut< dim, number > & | data_out | ) | const |
Attach the solution to the passed data out object.
The solution is added in conservative variable formulation (density, momentum, energy density) and primitive variable formulation (pressure, velocity, temperature).
- Parameters
-
data_out Object to which the solution vector is attached.
◆ classify_cells()
|
private |
Classify cells according to the current state of the level-set field.
◆ compute_convective_time_step_limit()
|
private |
Compute the convective time step limit for the current mesh and flow field.
- Returns
- Maximum convective time step size.
◆ compute_intersected_quadrature()
|
private |
Compute the quadrature rules for intersected elements, intersected faces and phase surfaces.
◆ compute_minimum_density()
|
private |
Compute the minimum density currently occurring in the flow field.
- Returns
- A pair of minimum densities in the liquid and gas phase.
◆ compute_time_step_size()
| number MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::compute_time_step_size | ( | bool | do_print = false | ) | const |
Compute the maximum time step size.
The maximum time step size arises from the convective and viscous time step limits. Optionally, it is printed to the console.
- Parameters
-
do_print If true, the time step limit is printed to the console.
- Returns
- The computed maximum time step size.
◆ compute_viscous_time_step_limit()
|
private |
Compute the viscous time step limit for the current mesh and flow field.
- Parameters
-
min_density A pair of minimum densities in the liquid and gas phase.
- Returns
- Maximum viscous time step size.
◆ create_cut_flow_operator_variant()
|
inlinestatic |
Create and return the appropriate compressible multiphase operator variant.
This static factory method instantiates and returns the correct variant of the CompressibleMultiphaseOperator based on whether the gas and liquid phases are viscous. The returned operator is used for applying the cut-cell method for compressible multiphase Navier-Stokes equations.
- Parameters
-
is_viscous_gas Boolean indicating if the gas phase has viscosity. is_viscous_liquid Boolean indicating if the liquid phase has viscosity. multiphase_scratch_data Reference to the scratch data used for the operator. mapping_info_surface_in Mapping information for integration over phase interfaces. mapping_info_cells_in Mapping information for integration over cut cells. mapping_info_faces_in Mapping information for integration over cut faces.
- Returns
- A variant of the
CompressibleMultiphaseOperatorwith the appropriate template specialization selected based on the viscosity configuration.
◆ distribute_dofs()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::distribute_dofs | ( | dealii::DoFHandler< dim > & | dof_handler | ) | const |
Distribute dofs needed for a finite element type given in CompressibleFlowData.
A FECollection is created to distinguish between liquid phase, gas phase and intersected elements.
- Parameters
-
dof_handler Reference to the used DoFHandler object.
◆ estimate_jacobian_eigenvalues()
|
inline |
Estimate the eigenvalues of the Jacobian matrix.
- Parameters
-
time_step The current time step size.
- Returns
- A vector of complex eigenvalues.
- Exceptions
-
Eigenvalue computation is currently not implemented and is only there for compatibility with the type-erased interface in CompressibleFlowOperation.
◆ get_dof_handler()
| const dealii::DoFHandler< dim > & MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::get_dof_handler | ( | ) | const |
Constant getter function for the DoFHandler.
◆ get_solution() [1/2]
| dealii::LinearAlgebra::distributed::Vector< number > & MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::get_solution | ( | ) |
Getter function for the current solution vector.
◆ get_solution() [2/2]
| const dealii::LinearAlgebra::distributed::Vector< number > & MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::get_solution | ( | ) | const |
Constant getter function for the current solution vector.
◆ get_solution_in_primitive_variables()
| dealii::LinearAlgebra::distributed::Vector< number > & MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::get_solution_in_primitive_variables | ( | ) | const |
Getter function for the current solution vector in primitive variables (pressure, velocity, temperature).
◆ reinit()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::reinit | ( | ) |
Set up the required internal data structures.
After a call to this function the solve() function of the class can be utilized.
◆ repartition()
| bool MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::repartition | ( | VectorType & | level_set_in, |
| const std::function< void()> & | distribute_level_set_dofs | ||
| ) |
Repartition the triangulation among the MPI processes with cell weights according to the location of the cells with respect to the level set.
The weight of each cell (liquid, gas or intersected) is evaluated with the current cell classification, which corresponds to the current DoF layout. After the repartitioning, the level set and the solution vector are transferred to the new partitioning and all DoF-dependent data structures are rebuilt:
- the DoFs of the level-set field are redistributed (
distribute_level_set_dofs) and the level set is transferred, - the cells are reclassified, the DoFs of the flow field are redistributed and the partitioning and the MatrixFree object are recreated (setup_dof_system),
- the solution, rhs and primitive-variable vectors, the penalty parameters, the non-matching quadrature rules (MappingInfo objects) and the preconditioner are reinitialized (reinit()),
- the solution vector is transferred,
- both mesh classifiers are updated.
The cached cell weights stay connected to the triangulation afterwards and are transferred in every change of the triangulation, so that the implicit repartitioning in Triangulation::execute_coarsening_and_refinement(), which is triggered by the solution transfer for a moved interface, reproduces the current partitioning, also after adaptive mesh refinement (see CutUtil::PartitionWeights).
- Parameters
-
level_set_in Level-set vector. distribute_level_set_dofs Function that distributes the DoFs of the level-set DoFHandler and reinitializes level_set_inaccording to the new partitioning.
- Note
- Repartitioning is skipped when only a single MPI process is used.
◆ set_body_force()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::set_body_force | ( | std::unique_ptr< dealii::Function< dim > > | body_force_in | ) |
Set a body force, e.g. gravity, specified by the passed function.
- Parameters
-
body_force_in Function specifying the body force.
- Note
- The function simply passes the parameters to the corresponding operator function.
◆ set_boundary_conditions()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::set_boundary_conditions | ( | const std::shared_ptr< SimulationCaseBase< dim, number > > & | simulation_case, |
| const std::string & | operation_name | ||
| ) |
Set the boundary conditions.
- Parameters
-
simulation_case Pointer to the considered simulation case class. operation_name String for the name of the considered operation.
- Note
- The function simply passes the parameters to the set_boundary_conditions function in the CompressibleFlowBoundaryConditions class.
◆ set_initial_condition()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::set_initial_condition | ( | const dealii::Function< dim > & | function | ) |
Set the initial condition of the solution dof vector.
- Parameters
-
function Given function for initial condition.
◆ solve()
| void MeltPoolDG::Multiphase::CompressibleMultiphaseOperation< dim, number >::solve | ( | number | current_time, |
| number | time_step | ||
| ) |
Solves the compressible two-phase Navier-Stokes equations for a single time step.
- Parameters
-
current_time Current time at t^n. time_step Current time step size.
Member Data Documentation
◆ cmp_operator
|
private |
Compressible multiphase operator object.
◆ cut_solution_transfer
|
private |
Solution transfer object for the interpolation between function spaces at two subsequent time steps with moving phase interfaces.
◆ fe_point_temp
|
private |
FESystem object, required by FEPointEvaluation.
◆ level_set
|
private |
Reference to the level-set field used to represent the interface between phases.
◆ level_set_dof_idx
|
private |
DoF index associated to the level set field.
◆ mapping_info_cells
|
private |
Mapping information for integration over cut cells.
◆ mapping_info_faces
|
private |
Mapping information for integration over cut faces.
◆ mapping_info_surface
|
private |
Mapping information for integration over phase interfaces.
◆ mesh_classifier
|
private |
Mesh classifier, which contains information if a cell is in the gas phase, liquid phase or cut. It corresponds to the current level set position.
◆ mesh_classifier_old
|
private |
Mesh classifier, which contains information if a cell is in the gas phase, liquid phase or cut. It corresponds to the level set position at the previous time step.
◆ multiphase_scratch_data
|
private |
Scratch data for multiphase case.
◆ n_dofs_per_cell
|
private |
Number of DoFs per cell.
◆ n_steps_performed
|
private |
Counter variable for the number of performed time steps, used to determine when to update the preconditioner
◆ partition_weights
|
private |
Cached cell weights for the repartitioning of the triangulation; created at the first call of repartition()
◆ preconditioner
|
private |
Preconditioner for the linear solver.
◆ preconditioner_update_flag
|
private |
Boolean indicator whether the preconditioner needs to be updated before the next solve.
◆ reinit_vector
|
private |
Function for DoF vector reinitialization.
◆ rhs
|
private |
Right-hand side vector.
◆ setup_dof_system
|
private |
Function to set up the DoF system.
◆ solution_primitive_variables
|
mutableprivate |
Solution vector in primitive variable formulation (pressure, velocity, temperature)
◆ time_iterator
|
private |
Time iterator.
The documentation for this class was generated from the following files:
- include/meltpooldg/compressible_flow/multiphase_operation.hpp
- source/compressible_flow/multiphase_operation.cpp
Generated by