LevelSetOperation< dim, number > Class Template Reference

Developer Documentation: MeltPoolDG::LevelSet::LevelSetOperation< dim, number > Class Template Reference
Developer Documentation
MeltPoolDG::LevelSet::LevelSetOperation< dim, number > Class Template Reference

#include <level_set_operation.hpp>

Inheritance diagram for MeltPoolDG::LevelSet::LevelSetOperation< dim, number >:
[legend]
Collaboration diagram for MeltPoolDG::LevelSet::LevelSetOperation< dim, number >:
[legend]

Public Member Functions

 LevelSetOperation (const ScratchData< dim, dim, number > &scratch_data_in, const TimeIntegration::TimeIterator< number > &time_stepping, const BoundaryConditionManager< dim, number > &bc_manager, const TimeIntegration::TimeSteppingData< number > &time_stepping_data, const LevelSetData< number > &ls, const VectorType &advection_velocity, const unsigned int ls_dof_idx_in, const unsigned int ls_hanging_nodes_dof_idx_in, const unsigned int ls_quad_idx_in, const unsigned int reinit_dof_idx_in, const unsigned int curv_dof_idx_in, const std::array< unsigned int, dim > normal_dof_indices_per_block_in, const unsigned int normal_no_bc_dof_idx_in, const unsigned int vel_dof_idx, const unsigned int ls_zero_bc_idx)
 
void setup_constraints (ScratchData< dim, dim, number > &mutable_scratch_data, const PeriodicBoundaryConditions< dim > &pbc, const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &ls_dirichlet_bc_in, const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &normal_x_dirichlet_bc_in, const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &normal_y_dirichlet_bc_in, const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &normal_z_dirichlet_bc_in) final
 
void set_initial_condition (const dealii::Function< dim > &initial_field_function_level_set, const bool is_signed_distance_initial_field_function=false) override
 
void set_inflow_outflow_bc (const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > inflow_outflow_bc) override
 
void set_level_set_user_rhs (const VectorType &level_set_user_rhs) override
 Sets the user-defined right-hand side (RHS) vector for the level set equation.
 
void set_wetting_boundary_condition_ids (std::vector< dealii::types::boundary_id > &&) final
 Sets the boundary IDs where wetting boundary conditions should be applied.
 
void reinit () override
 
void distribute_constraints () override
 
void init_time_advance () override
 
void solve (const bool do_finish_time_step=true) override
 
void finish_time_advance () override
 
void update_normal_vector () override
 
const dealii::LinearAlgebra::distributed::Vector< number > & get_curvature () const override
 
dealii::LinearAlgebra::distributed::Vector< number > & get_curvature () override
 
const dealii::LinearAlgebra::distributed::BlockVector< number > & get_normal_vector () const override
 
dealii::LinearAlgebra::distributed::BlockVector< number > & get_normal_vector () override
 
const dealii::LinearAlgebra::distributed::Vector< number > & get_level_set () const override
 
dealii::LinearAlgebra::distributed::Vector< number > & get_level_set () override
 
const dealii::LinearAlgebra::distributed::Vector< number > & get_level_set_as_heaviside () const override
 
dealii::LinearAlgebra::distributed::Vector< number > & get_level_set_as_heaviside () override
 
const dealii::LinearAlgebra::distributed::Vector< number > & get_distance_to_level_set () const override
 
const SurfaceMeshInfoget_surface_mesh_info () const override
 
void attach_vectors (std::vector< dealii::LinearAlgebra::distributed::Vector< number > * > &vectors) override
 
void attach_output_vectors (GenericDataOut< dim, number > &data_out) const override
 
void update_surface_mesh () override
 
void transform_level_set_to_smooth_heaviside () override
 
- Public Member Functions inherited from MeltPoolDG::LevelSet::LevelSetOperationBase< dim, number >
virtual ~LevelSetOperationBase ()=default
 

Private Types

using VectorType = dealii::LinearAlgebra::distributed::Vector< number >
 
using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector< number >
 
using SurfaceMeshInfo = std::vector< std::tuple< const typename dealii::Triangulation< dim, dim >::cell_iterator, std::vector< dealii::Point< dim > >, std::vector< number > > >
 

Private Member Functions

void do_reinitialization (const bool update_normal_vector_in_every_cycle=false)
 
number approximate_distance_from_level_set (const number phi, const number eps, const number cutoff)
 
void transform_distance_to_level_set ()
 
void correct_curvature_values ()
 
void set_level_set_parameters ()
 

Private Attributes

const ScratchData< dim, dim, number > & scratch_data
 
const TimeIntegration::TimeIterator< number > & time_stepping
 
std::shared_ptr< AdvectionDiffusionOperationBase< dim, number > > advec_diff_operation
 
std::shared_ptr< ReinitializationOperationBase< dim, number > > reinit_operation
 
std::shared_ptr< CurvatureOperationBase< dim, number > > curvature_operation
 
const LevelSetData< number > level_set_data
 
const unsigned int ls_dof_idx
 
const unsigned int ls_hanging_nodes_dof_idx
 
const unsigned int ls_quad_idx
 
const unsigned int curv_dof_idx
 
const unsigned int reinit_dof_idx
 
const unsigned int normal_no_bc_dof_idx
 
const std::array< unsigned int, dim > normal_dof_indices_per_block
 
TimeIntegration::TimeIterator< number > reinit_time_iterator
 
bool ready_for_time_advance = false
 
VectorType level_set_as_heaviside
 
VectorType distance_to_level_set
 
number max_d_level_set_since_last_reinit = std::numeric_limits<number>::max()
 
SurfaceMeshInfo surface_mesh_info
 
std::unique_ptr< Tools::NearestPoint< dim, number > > nearest_point_search
 
std::vector< dealii::Point< dim > > all_marked_vertices
 

Member Typedef Documentation

◆ BlockVectorType

template<int dim, typename number >
using MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>
private

◆ SurfaceMeshInfo

template<int dim, typename number >
using MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::SurfaceMeshInfo = std::vector<std::tuple<const typename dealii::Triangulation<dim, dim>::cell_iterator , std::vector<dealii::Point<dim> > , std::vector<number> > >
private

◆ VectorType

template<int dim, typename number >
using MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::VectorType = dealii::LinearAlgebra::distributed::Vector<number>
private

Constructor & Destructor Documentation

◆ LevelSetOperation()

template<int dim, typename number >
MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::LevelSetOperation ( const ScratchData< dim, dim, number > &  scratch_data_in,
const TimeIntegration::TimeIterator< number > &  time_stepping,
const BoundaryConditionManager< dim, number > &  bc_manager,
const TimeIntegration::TimeSteppingData< number > &  time_stepping_data,
const LevelSetData< number > &  ls,
const VectorType advection_velocity,
const unsigned int  ls_dof_idx_in,
const unsigned int  ls_hanging_nodes_dof_idx_in,
const unsigned int  ls_quad_idx_in,
const unsigned int  reinit_dof_idx_in,
const unsigned int  curv_dof_idx_in,
const std::array< unsigned int, dim >  normal_dof_indices_per_block_in,
const unsigned int  normal_no_bc_dof_idx_in,
const unsigned int  vel_dof_idx,
const unsigned int  ls_zero_bc_idx 
)

Member Function Documentation

◆ approximate_distance_from_level_set()

template<int dim, typename number >
number MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::approximate_distance_from_level_set ( const number  phi,
const number  eps,
const number  cutoff 
)
inlineprivate

◆ attach_output_vectors()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::attach_output_vectors ( GenericDataOut< dim, number > &  data_out) const
overridevirtual

◆ attach_vectors()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::attach_vectors ( std::vector< dealii::LinearAlgebra::distributed::Vector< number > * > &  vectors)
overridevirtual

register vectors for adaptive mesh refinement

Implements MeltPoolDG::LevelSet::LevelSetOperationBase< dim, number >.

◆ correct_curvature_values()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::correct_curvature_values ( )
private

To avoid high-frequency errors in the curvature (spurious currents) the curvature is corrected to represent the value of the interface (zero level set). The approach by Zahedi et al. (2012) is pursued. Considering e.g. a bubble, the absolute curvature of areas outside of the bubble (Φ=-) must increase and vice-versa for areas inside the bubble.

◆ distribute_constraints()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::distribute_constraints ( )
overridevirtual

◆ do_reinitialization()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::do_reinitialization ( const bool  update_normal_vector_in_every_cycle = false)
private

◆ finish_time_advance()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::finish_time_advance ( )
overridevirtual

◆ get_curvature() [1/2]

template<int dim, typename number >
const LinearAlgebra::distributed::Vector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_curvature ( ) const
overridevirtual

◆ get_curvature() [2/2]

template<int dim, typename number >
LinearAlgebra::distributed::Vector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_curvature ( )
overridevirtual

◆ get_distance_to_level_set()

template<int dim, typename number >
const LinearAlgebra::distributed::Vector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_distance_to_level_set ( ) const
overridevirtual

◆ get_level_set() [1/2]

template<int dim, typename number >
const LinearAlgebra::distributed::Vector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_level_set ( ) const
overridevirtual

◆ get_level_set() [2/2]

template<int dim, typename number >
LinearAlgebra::distributed::Vector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_level_set ( )
overridevirtual

◆ get_level_set_as_heaviside() [1/2]

template<int dim, typename number >
const LinearAlgebra::distributed::Vector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_level_set_as_heaviside ( ) const
overridevirtual

◆ get_level_set_as_heaviside() [2/2]

template<int dim, typename number >
LinearAlgebra::distributed::Vector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_level_set_as_heaviside ( )
overridevirtual

◆ get_normal_vector() [1/2]

template<int dim, typename number >
const LinearAlgebra::distributed::BlockVector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_normal_vector ( ) const
overridevirtual

◆ get_normal_vector() [2/2]

template<int dim, typename number >
LinearAlgebra::distributed::BlockVector< number > & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_normal_vector ( )
overridevirtual

◆ get_surface_mesh_info()

template<int dim, typename number >
const LevelSetOperation< dim, number >::SurfaceMeshInfo & MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::get_surface_mesh_info ( ) const
overridevirtual

◆ init_time_advance()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::init_time_advance ( )
overridevirtual

◆ reinit()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::reinit ( )
overridevirtual

◆ set_inflow_outflow_bc()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::set_inflow_outflow_bc ( const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > >  inflow_outflow_bc)
overridevirtual

◆ set_initial_condition()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::set_initial_condition ( const dealii::Function< dim > &  initial_field_function_level_set,
const bool  is_signed_distance_initial_field_function = false 
)
overridevirtual

◆ set_level_set_parameters()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::set_level_set_parameters ( )
private

◆ set_level_set_user_rhs()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::set_level_set_user_rhs ( const VectorType level_set_user_rhs)
overridevirtual

Sets the user-defined right-hand side (RHS) vector for the level set equation.

This function assigns the provided RHS vector to the internal advection-diffusion operation's user RHS. It is typically used when the level set equation includes a non-homogeneous source term that is specified externally.

Parameters
[in]level_set_user_rhsA vector representing the user-defined RHS for the level set field.

Implements MeltPoolDG::LevelSet::LevelSetOperationBase< dim, number >.

◆ set_wetting_boundary_condition_ids()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::set_wetting_boundary_condition_ids ( std::vector< dealii::types::boundary_id > &&  wetting_bc_ids_in)
finalvirtual

Sets the boundary IDs where wetting boundary conditions should be applied.

This function forwards the provided list of boundary IDs to the reinitialization operation, indicating which boundaries are subject to wetting conditions.

Parameters
[in]wetting_bc_ids_inA list of boundary IDs where wetting conditions apply.

Reimplemented from MeltPoolDG::LevelSet::LevelSetOperationBase< dim, number >.

◆ setup_constraints()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::setup_constraints ( ScratchData< dim, dim, number > &  mutable_scratch_data,
const PeriodicBoundaryConditions< dim > &  pbc,
const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &  ls_dirichlet_bc_in,
const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &  normal_x_dirichlet_bc_in,
const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &  normal_y_dirichlet_bc_in,
const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &  normal_z_dirichlet_bc_in 
)
finalvirtual

◆ solve()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::solve ( const bool  do_finish_time_step = true)
overridevirtual

◆ transform_distance_to_level_set()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::transform_distance_to_level_set ( )
private

From the distance_to_level_set DoF vector, the level set DoF vector with values within [-1,1] is computed.

◆ transform_level_set_to_smooth_heaviside()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::transform_level_set_to_smooth_heaviside ( )
overridevirtual

◆ update_normal_vector()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::update_normal_vector ( )
overridevirtual

◆ update_surface_mesh()

template<int dim, typename number >
void MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::update_surface_mesh ( )
overridevirtual

Member Data Documentation

◆ advec_diff_operation

template<int dim, typename number >
std::shared_ptr<AdvectionDiffusionOperationBase<dim, number> > MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::advec_diff_operation
private

◆ all_marked_vertices

template<int dim, typename number >
std::vector<dealii::Point<dim> > MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::all_marked_vertices
private

◆ curv_dof_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::curv_dof_idx
private

◆ curvature_operation

template<int dim, typename number >
std::shared_ptr<CurvatureOperationBase<dim, number> > MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::curvature_operation
private

◆ distance_to_level_set

template<int dim, typename number >
VectorType MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::distance_to_level_set
private

◆ level_set_as_heaviside

template<int dim, typename number >
VectorType MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::level_set_as_heaviside
private

◆ level_set_data

template<int dim, typename number >
const LevelSetData<number> MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::level_set_data
private

◆ ls_dof_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::ls_dof_idx
private

◆ ls_hanging_nodes_dof_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::ls_hanging_nodes_dof_idx
private

◆ ls_quad_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::ls_quad_idx
private

◆ max_d_level_set_since_last_reinit

template<int dim, typename number >
number MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::max_d_level_set_since_last_reinit = std::numeric_limits<number>::max()
private

◆ nearest_point_search

template<int dim, typename number >
std::unique_ptr<Tools::NearestPoint<dim, number> > MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::nearest_point_search
private

◆ normal_dof_indices_per_block

template<int dim, typename number >
const std::array<unsigned int, dim> MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::normal_dof_indices_per_block
private

◆ normal_no_bc_dof_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::normal_no_bc_dof_idx
private

◆ ready_for_time_advance

template<int dim, typename number >
bool MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::ready_for_time_advance = false
private

◆ reinit_dof_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::reinit_dof_idx
private

◆ reinit_operation

template<int dim, typename number >
std::shared_ptr<ReinitializationOperationBase<dim, number> > MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::reinit_operation
private

◆ reinit_time_iterator

template<int dim, typename number >
TimeIntegration::TimeIterator<number> MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::reinit_time_iterator
private

◆ scratch_data

template<int dim, typename number >
const ScratchData<dim, dim, number>& MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::scratch_data
private

◆ surface_mesh_info

template<int dim, typename number >
SurfaceMeshInfo MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::surface_mesh_info
private

◆ time_stepping

template<int dim, typename number >
const TimeIntegration::TimeIterator<number>& MeltPoolDG::LevelSet::LevelSetOperation< dim, number >::time_stepping
private

The documentation for this class was generated from the following files: