ASPECT
Public Member Functions | Private Member Functions | Private Attributes | List of all members
aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number > Class Template Reference
Inheritance diagram for aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >:
Inheritance graph
[legend]

Public Member Functions

 ABlockOperator ()
 
void clear () override
 
void reinit (const Mapping< dim > &mapping, const DoFHandler< dim > &dof_handler_v, const DoFHandler< dim > &dof_handler_p, const AffineConstraints< number > &constraints_v, const AffineConstraints< number > &constraints_p, std::shared_ptr< MatrixFree< dim, double >> mf_storage, const unsigned int level=numbers::invalid_unsigned_int)
 
void set_cell_data (const OperatorCellData< dim, number > &data)
 
void compute_diagonal () override
 
void set_diagonal (const ::LinearAlgebra::distributed::Vector< number > &diag)
 
- Public Member Functions inherited from MatrixFreeOperators::Base< dim, ::LinearAlgebra::distributed::Vector< number > >
 Base ()
 
virtual ~Base () override=default
 
void initialize (std::shared_ptr< const MatrixFree< dim, value_type, VectorizedArrayType > > data, const std::vector< unsigned int > &selected_row_blocks=std::vector< unsigned int >(), const std::vector< unsigned int > &selected_column_blocks=std::vector< unsigned int >())
 
void initialize (std::shared_ptr< const MatrixFree< dim, value_type, VectorizedArrayType > > data, const MGConstrainedDoFs &mg_constrained_dofs, const unsigned int level, const std::vector< unsigned int > &selected_row_blocks=std::vector< unsigned int >())
 
void initialize (std::shared_ptr< const MatrixFree< dim, value_type, VectorizedArrayType > > data_, const std::vector< MGConstrainedDoFs > &mg_constrained_dofs, const unsigned int level, const std::vector< unsigned int > &selected_row_blocks=std::vector< unsigned int >())
 
size_type m () const
 
size_type n () const
 
void vmult_interface_down (VectorType &dst, const VectorType &src) const
 
void vmult_interface_up (VectorType &dst, const VectorType &src) const
 
void vmult (VectorType &dst, const VectorType &src) const
 
void Tvmult (VectorType &dst, const VectorType &src) const
 
void vmult_add (VectorType &dst, const VectorType &src) const
 
void Tvmult_add (VectorType &dst, const VectorType &src) const
 
value_type el (const unsigned int row, const unsigned int col) const
 
virtual std::size_t memory_consumption () const
 
void initialize_dof_vector (VectorType &vec) const
 
std::shared_ptr< const MatrixFree< dim, value_type, VectorizedArrayType > > get_matrix_free () const
 
const std::shared_ptr< DiagonalMatrix< VectorType > > & get_matrix_diagonal_inverse () const
 
const std::shared_ptr< DiagonalMatrix< VectorType > > & get_matrix_diagonal () const
 
void precondition_Jacobi (VectorType &dst, const VectorType &src, const value_type omega) const
 
void serialize (Archive &ar, const unsigned int version)
 
unsigned int n_subscriptions () const
 
unsigned int n_subscriptions () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 
- Public Member Functions inherited from EnableObserverPointer
 EnableObserverPointer ()
 
 EnableObserverPointer (const EnableObserverPointer &)
 
 EnableObserverPointer (EnableObserverPointer &&) noexcept
 
virtual ~EnableObserverPointer ()
 
EnableObserverPointeroperator= (const EnableObserverPointer &)
 
EnableObserverPointeroperator= (EnableObserverPointer &&) noexcept
 
void serialize (Archive &ar, const unsigned int version)
 
unsigned int n_subscriptions () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 
unsigned int n_subscriptions () const
 
void list_subscribers (StreamType &stream) const
 
void list_subscribers () const
 

Private Member Functions

void inner_cell_operation (FEEvaluation< dim, degree_v, degree_v+1, dim, number > &velocity) const
 
void cell_operation (FEEvaluation< dim, degree_v, degree_v+1, dim, number > &velocity) const
 
void apply_add (::LinearAlgebra::distributed::Vector< number > &dst, const ::LinearAlgebra::distributed::Vector< number > &src) const override
 
void local_apply (const ::MatrixFree< dim, number > &data, ::LinearAlgebra::distributed::Vector< number > &dst, const ::LinearAlgebra::distributed::Vector< number > &src, const std::pair< unsigned int, unsigned int > &cell_range) const
 

Private Attributes

const OperatorCellData< dim, number > * cell_data
 

Additional Inherited Members

- Public Types inherited from MatrixFreeOperators::Base< dim, ::LinearAlgebra::distributed::Vector< number > >
typedef typename VectorType::value_type value_type
 
typedef typename VectorType::size_type size_type
 
- Static Public Member Functions inherited from MatrixFreeOperators::Base< dim, ::LinearAlgebra::distributed::Vector< number > >
static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)
 
- Static Public Member Functions inherited from EnableObserverPointer
static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)
 
- Protected Member Functions inherited from MatrixFreeOperators::Base< dim, ::LinearAlgebra::distributed::Vector< number > >
void preprocess_constraints (VectorType &dst, const VectorType &src) const
 
void postprocess_constraints (VectorType &dst, const VectorType &src) const
 
void set_constrained_entries_to_one (VectorType &dst) const
 
virtual void apply_add (VectorType &dst, const VectorType &src) const =0
 
virtual void Tapply_add (VectorType &dst, const VectorType &src) const
 
- Protected Attributes inherited from MatrixFreeOperators::Base< dim, ::LinearAlgebra::distributed::Vector< number > >
std::shared_ptr< const MatrixFree< dim, value_type, VectorizedArrayType > > data
 
std::shared_ptr< DiagonalMatrix< VectorType > > diagonal_entries
 
std::shared_ptr< DiagonalMatrix< VectorType > > inverse_diagonal_entries
 
std::vector< unsigned int > selected_rows
 
std::vector< unsigned int > selected_columns
 

Detailed Description

template<int dim, int degree_v, typename number>
class aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >

Operator for the A block of the Stokes matrix. The same class is used for both active and level mesh operators.

Definition at line 451 of file matrix_free_operators.h.

Constructor & Destructor Documentation

◆ ABlockOperator()

template<int dim, int degree_v, typename number >
aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::ABlockOperator ( )

Constructor

Member Function Documentation

◆ clear()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::clear ( )
overridevirtual

◆ reinit()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::reinit ( const Mapping< dim > &  mapping,
const DoFHandler< dim > &  dof_handler_v,
const DoFHandler< dim > &  dof_handler_p,
const AffineConstraints< number > &  constraints_v,
const AffineConstraints< number > &  constraints_p,
std::shared_ptr< MatrixFree< dim, double >>  mf_storage,
const unsigned int  level = numbers::invalid_unsigned_int 
)

Initialize the MatrixFree object given in mf_storage and use that to initialize this operator.

◆ set_cell_data()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::set_cell_data ( const OperatorCellData< dim, number > &  data)

Pass in a reference to the problem data.

◆ compute_diagonal()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::compute_diagonal ( )
overridevirtual

Computes the diagonal of the matrix. Since matrix-free operators have not access to matrix elements, we must apply the matrix-free operator to the unit vectors to recover the diagonal.

Implements MatrixFreeOperators::Base< dim, ::LinearAlgebra::distributed::Vector< number > >.

◆ set_diagonal()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::set_diagonal ( const ::LinearAlgebra::distributed::Vector< number > &  diag)

Manually set the diagonal inside the matrix-free object. This function is needed when using tangential constraints as the function compute_diagonal() cannot handle non-Dirichlet boundary conditions.

◆ inner_cell_operation()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::inner_cell_operation ( FEEvaluation< dim, degree_v, degree_v+1, dim, number > &  velocity) const
private

Defines the inner-most operator on a single cell batch with the loop over quadrature points.

◆ cell_operation()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::cell_operation ( FEEvaluation< dim, degree_v, degree_v+1, dim, number > &  velocity) const
private

Defines the operation on a single cell batch including load/store and calls inner_cell_operation().

◆ apply_add()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::apply_add ( ::LinearAlgebra::distributed::Vector< number > &  dst,
const ::LinearAlgebra::distributed::Vector< number > &  src 
) const
overrideprivate

Performs the application of the matrix-free operator. This function is called by vmult() functions MatrixFreeOperators::Base.

◆ local_apply()

template<int dim, int degree_v, typename number >
void aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::local_apply ( const ::MatrixFree< dim, number > &  data,
::LinearAlgebra::distributed::Vector< number > &  dst,
const ::LinearAlgebra::distributed::Vector< number > &  src,
const std::pair< unsigned int, unsigned int > &  cell_range 
) const
private

Defines the application of the cell matrix.

Member Data Documentation

◆ cell_data

template<int dim, int degree_v, typename number >
const OperatorCellData<dim,number>* aspect::MatrixFreeStokesOperators::ABlockOperator< dim, degree_v, number >::cell_data
private

A pointer to the current cell data that contains viscosity and other required parameters per cell.

Definition at line 536 of file matrix_free_operators.h.


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