AdvectionDiffusionOperator< dim, number > Class Template Reference

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

#include <advection_diffusion_operator.hpp>

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

Public Member Functions

 AdvectionDiffusionOperator (const ScratchData< dim, dim, number > &scratch_data_in, const TimeIntegration::TimeIterator< number > &time_iterator, const AdvectionDiffusionData< number > &data_in, unsigned int dof_idx_in, unsigned int quad_idx_in)
 
void set_advection_velocity_function (const std::shared_ptr< dealii::Function< dim > > &advection_velocity_function_in)
 Assigns a time-dependent advection velocity function.
 
void set_advection_velocity (const VectorType &advection_velocity_in, const unsigned int velocity_dof_idx_in)
 Sets the discrete advection velocity vector and its DoF index.
 
void compute_system_matrix_and_rhs (const VectorType &advected_field_old, VectorType &rhs) const final
 Compute the system matrix and right-hand side vector.
 
void vmult (VectorType &dst, const VectorType &src) const final
 
void create_rhs (VectorType &dst, const VectorType &src) const final
 Compute the right-hand side vector.
 
void compute_system_matrix_from_matrixfree (dealii::TrilinosWrappers::SparseMatrix &system_matrix) const final
 Compute a sparse matrix using matrix-free techniques.
 
void compute_inverse_diagonal_from_matrixfree (VectorType &diagonal) const final
 Compute the inverse diagonal using matrix-free techniques.
 
void reinit () final
 Reinitialize data structures. Can be overridden by derived classes.
 
void pre () final
 Prepare for computations (e.g. update ghost values). Can be overridden by derived classes.
 
void post () final
 Finalize for computations (e.g. zero out ghost values). Can be overridden by derived classes.
 
void set_inflow_outflow_bc (std::vector< unsigned int > inflow_outflow_bc_local_indices_)
 
void do_pre_vmult (VectorType &dst, const VectorType &src_in) const
 
void do_post_vmult (VectorType &dst, const VectorType &src_in) const
 
void post_system_matrix_compute (dealii::TrilinosWrappers::SparseMatrix &system_matrix) const
 
void set_apply_inflow_outflow_constraints_pre_post_matrix_free (bool enable)
 
- Public Member Functions inherited from MeltPoolDG::OperatorMatrixFree< dim, number >
virtual ~OperatorMatrixFree ()=default
 
virtual void create_rhs (BlockVectorType &, const VectorType &) const
 Compute the right-hand side vector for block vectors dst.
 
virtual void create_rhs (VectorType &, const BlockVectorType &) const
 Compute the right-hand side vector for block vectors src.
 
virtual void vmult (BlockVectorType &, const BlockVectorType &) const
 
virtual void compute_inverse_diagonal_from_matrixfree (BlockVectorType &) const
 Compute the inverse diagonal using matrix-free techniques for block vectors.
 
- Public Member Functions inherited from MeltPoolDG::OperatorBase< number >
virtual ~OperatorBase ()=default
 
void reset_dof_index (const unsigned int dof_idx_in)
 Set the index for the current degrees of freedom (DoF).
 
void reset_time_increment (const number dt)
 Set the time increment for the operator.
 
- Public Member Functions inherited from MeltPoolDG::OperatorMatrixBased< dim, number >
virtual ~OperatorMatrixBased ()=default
 
virtual void compute_system_matrix_and_rhs (const BlockVectorType &, VectorType &) const
 Compute the system matrix and right-hand side vector for block vectors.
 
virtual void compute_system_matrix_and_rhs (const VectorType &, BlockVectorType &) const
 Compute the system matrix and right-hand side block vector.
 
virtual void reinit_sparsity_pattern (const ScratchData< dim, dim, number > &scratch_data)
 Reinitialize the sparsity pattern of the system matrix.
 
const SparseMatrixTypeget_system_matrix () const
 
SparseMatrixTypeget_system_matrix ()
 

Private Types

using VectorType = dealii::LinearAlgebra::distributed::Vector< number >
 
using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector< number >
 
using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix
 
using VectorizedArrayType = dealii::VectorizedArray< number >
 
using vector = dealii::Tensor< 1, dim, dealii::VectorizedArray< number > >
 
using scalar = dealii::VectorizedArray< number >
 

Private Member Functions

void tangent_local_cell_operation (FECellIntegrator< dim, 1, number > &advected_field, FECellIntegrator< dim, dim, number > *velocity_vals, const bool do_reinit_cells) const
 
void compute_stabilization_parameter (const FECellIntegrator< dim, 1, number > &advected_field_vals, const FECellIntegrator< dim, dim, number > *velocity_vals) const
 

Private Attributes

const ScratchData< dim, dim, number > & scratch_data
 
const TimeIntegration::TimeIterator< number > & time_iterator
 
const AdvectionDiffusionData< number > & data
 
const unsigned int advec_diff_dof_idx
 
const unsigned int advec_diff_quad_idx
 
number theta
 
dealii::AlignedVector< dealii::VectorizedArray< number > > stab_param
 
bool do_update_stab_param = true
 
std::vector< unsigned int > inflow_outflow_bc_local_indices
 
std::vector< number > inflow_outflow_constraints_values_temp
 
const VectorTypeadvection_velocity = nullptr
 
unsigned int velocity_dof_idx = dealii::numbers::invalid_unsigned_int
 
std::shared_ptr< dealii::Function< dim > > advection_velocity_function = nullptr
 
bool velocity_update_ghosts = false
 
bool do_apply_inflow_outflow_constraints_pre_post = false
 

Additional Inherited Members

- Public Types inherited from MeltPoolDG::OperatorMatrixFree< dim, number >
using VectorType = dealii::LinearAlgebra::distributed::Vector< number >
 
using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector< number >
 
using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix
 
- Public Types inherited from MeltPoolDG::OperatorMatrixBased< dim, number >
using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix
 
using SparsityPatternType = dealii::TrilinosWrappers::SparsityPattern
 
using VectorType = dealii::LinearAlgebra::distributed::Vector< number >
 
using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector< number >
 
- Protected Attributes inherited from MeltPoolDG::OperatorBase< number >
unsigned int dof_idx = dealii::numbers::invalid_unsigned_int
 
number time_increment = numbers::invalid_double
 
number time_increment_inv = numbers::invalid_double
 
- Protected Attributes inherited from MeltPoolDG::OperatorMatrixBased< dim, number >
SparseMatrixType system_matrix
 
SparsityPatternType dsp
 

Member Typedef Documentation

◆ BlockVectorType

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

◆ scalar

template<int dim, typename number >
using MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::scalar = dealii::VectorizedArray<number>
private

◆ SparseMatrixType

template<int dim, typename number >
using MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix
private

◆ vector

template<int dim, typename number >
using MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::vector = dealii::Tensor<1, dim, dealii::VectorizedArray<number> >
private

◆ VectorizedArrayType

template<int dim, typename number >
using MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::VectorizedArrayType = dealii::VectorizedArray<number>
private

◆ VectorType

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

Constructor & Destructor Documentation

◆ AdvectionDiffusionOperator()

template<int dim, typename number >
MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::AdvectionDiffusionOperator ( const ScratchData< dim, dim, number > &  scratch_data_in,
const TimeIntegration::TimeIterator< number > &  time_iterator,
const AdvectionDiffusionData< number > &  data_in,
unsigned int  dof_idx_in,
unsigned int  quad_idx_in 
)

Member Function Documentation

◆ compute_inverse_diagonal_from_matrixfree()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::compute_inverse_diagonal_from_matrixfree ( VectorType ) const
finalvirtual

Compute the inverse diagonal using matrix-free techniques.

Parameters
diagVector representing the diagonal.

Reimplemented from MeltPoolDG::OperatorMatrixFree< dim, number >.

◆ compute_stabilization_parameter()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::compute_stabilization_parameter ( const FECellIntegrator< dim, 1, number > &  advected_field_vals,
const FECellIntegrator< dim, dim, number > *  velocity_vals 
) const
private

◆ compute_system_matrix_and_rhs()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::compute_system_matrix_and_rhs ( const VectorType ,
VectorType  
) const
finalvirtual

Compute the system matrix and right-hand side vector.

Parameters
srcSource vector.
dstDestination vector.

Reimplemented from MeltPoolDG::OperatorMatrixBased< dim, number >.

◆ compute_system_matrix_from_matrixfree()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::compute_system_matrix_from_matrixfree ( dealii::TrilinosWrappers::SparseMatrix &  ) const
finalvirtual

Compute a sparse matrix using matrix-free techniques.

Parameters
matrixSparse matrix to compute.

Reimplemented from MeltPoolDG::OperatorMatrixFree< dim, number >.

◆ create_rhs()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::create_rhs ( VectorType ,
const VectorType  
) const
finalvirtual

Compute the right-hand side vector.

This function is intended to compute the right-hand side vector (dst). It is currently used in the utility function create_rhs_and_apply_dirichlet_matrixfree().

Parameters
srcSource vector.
dstDestination vector.

Reimplemented from MeltPoolDG::OperatorMatrixFree< dim, number >.

◆ do_post_vmult()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::do_post_vmult ( VectorType dst,
const VectorType src_in 
) const

◆ do_pre_vmult()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::do_pre_vmult ( VectorType dst,
const VectorType src_in 
) const

◆ post()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::post ( )
finalvirtual

Finalize for computations (e.g. zero out ghost values). Can be overridden by derived classes.

Reimplemented from MeltPoolDG::OperatorBase< number >.

◆ post_system_matrix_compute()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::post_system_matrix_compute ( dealii::TrilinosWrappers::SparseMatrix &  system_matrix) const

◆ pre()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::pre ( )
finalvirtual

Prepare for computations (e.g. update ghost values). Can be overridden by derived classes.

Reimplemented from MeltPoolDG::OperatorBase< number >.

◆ reinit()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::reinit ( )
finalvirtual

Reinitialize data structures. Can be overridden by derived classes.

Reimplemented from MeltPoolDG::OperatorBase< number >.

◆ set_advection_velocity()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::set_advection_velocity ( const VectorType advection_velocity_in,
const unsigned int  velocity_dof_idx_in 
)

Sets the discrete advection velocity vector and its DoF index.

Parameters
advection_velocity_inDiscrete velocity field.
velocity_dof_idx_inIndex of the associated DoF handler.

◆ set_advection_velocity_function()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::set_advection_velocity_function ( const std::shared_ptr< dealii::Function< dim > > &  advection_velocity_function_in)

Assigns a time-dependent advection velocity function.

Parameters
advection_velocity_function_inShared pointer to a velocity field function.

◆ set_apply_inflow_outflow_constraints_pre_post_matrix_free()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::set_apply_inflow_outflow_constraints_pre_post_matrix_free ( bool  enable)

◆ set_inflow_outflow_bc()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::set_inflow_outflow_bc ( std::vector< unsigned int >  inflow_outflow_bc_local_indices_)

additional functions for inflow/outflow boundary conditions

◆ tangent_local_cell_operation()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::tangent_local_cell_operation ( FECellIntegrator< dim, 1, number > &  advected_field,
FECellIntegrator< dim, dim, number > *  velocity_vals,
const bool  do_reinit_cells 
) const
private

◆ vmult()

template<int dim, typename number >
void MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::vmult ( VectorType ,
const VectorType  
) const
finalvirtual

Apply the matrix-free operator to a vector src and store It inside dst. This function is used in the iterative linear solver.

Parameters
srcSource vector.
dstDestination vector.

Reimplemented from MeltPoolDG::OperatorMatrixFree< dim, number >.

Member Data Documentation

◆ advec_diff_dof_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::advec_diff_dof_idx
private

◆ advec_diff_quad_idx

template<int dim, typename number >
const unsigned int MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::advec_diff_quad_idx
private

◆ advection_velocity

template<int dim, typename number >
const VectorType* MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::advection_velocity = nullptr
private

◆ advection_velocity_function

template<int dim, typename number >
std::shared_ptr<dealii::Function<dim> > MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::advection_velocity_function = nullptr
private

◆ data

template<int dim, typename number >
const AdvectionDiffusionData<number>& MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::data
private

◆ do_apply_inflow_outflow_constraints_pre_post

template<int dim, typename number >
bool MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::do_apply_inflow_outflow_constraints_pre_post = false
mutableprivate

◆ do_update_stab_param

template<int dim, typename number >
bool MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::do_update_stab_param = true
mutableprivate

◆ inflow_outflow_bc_local_indices

template<int dim, typename number >
std::vector<unsigned int> MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::inflow_outflow_bc_local_indices
private

◆ inflow_outflow_constraints_values_temp

template<int dim, typename number >
std::vector<number> MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::inflow_outflow_constraints_values_temp
mutableprivate

◆ scratch_data

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

◆ stab_param

template<int dim, typename number >
dealii::AlignedVector<dealii::VectorizedArray<number> > MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::stab_param
mutableprivate

◆ theta

template<int dim, typename number >
number MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::theta
private

◆ time_iterator

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

◆ velocity_dof_idx

template<int dim, typename number >
unsigned int MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::velocity_dof_idx = dealii::numbers::invalid_unsigned_int
private

◆ velocity_update_ghosts

template<int dim, typename number >
bool MeltPoolDG::LevelSet::AdvectionDiffusionOperator< dim, number >::velocity_update_ghosts = false
private

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