HybridADRSolver
Loading...
Searching...
No Matches
HybridADRSolver::ADROperator< dim, fe_degree, Number > Class Template Reference

Matrix-free operator for the ADR problem with multigrid support. More...

#include <adr_operator.h>

Inheritance diagram for HybridADRSolver::ADROperator< dim, fe_degree, Number >:
Collaboration diagram for HybridADRSolver::ADROperator< dim, fe_degree, Number >:

Public Types

using VectorType = LinearAlgebra::distributed::Vector<Number>
using value_type = Number
using size_type = types::global_dof_index
using Base

Public Member Functions

 ADROperator ()
 Default constructor.
void initialize (std::shared_ptr< const MatrixFree< dim, Number > > data_in, const ProblemInterface< dim > &problem)
 Initialize the operator with MatrixFree data and problem definition.
void initialize (std::shared_ptr< const MatrixFree< dim, Number > > data_in, const MGConstrainedDoFs &mg_constrained_dofs, unsigned int level, const ProblemInterface< dim > &problem)
 Initialize for a multigrid level.
void clear () override
 Clear all data.
void compute_diagonal () override
 Computes the diagonal of the operator (for preconditioning).
bool is_multigrid_level () const
 Check if this is a multigrid level operator.
int get_mg_level () const
 Get the multigrid level (-1 if not a level operator).

Detailed Description

template<int dim, int fe_degree, typename Number = double>
class HybridADRSolver::ADROperator< dim, fe_degree, Number >

Matrix-free operator for the ADR problem with multigrid support.

This class implements the action of the system matrix on a vector without explicitly storing the matrix. The computation uses:

  • Sum factorization for efficient tensor-product evaluation
  • Vectorization over multiple cells (SIMD)
  • Hybrid MPI+threading parallelization
  • Geometric Multigrid (GMG) preconditioning support

The weak form implemented is: \( a(u,v) = (\mu \nabla u, \nabla v) + (\beta \cdot \nabla u, v) + (\gamma u, v) \)

Template Parameters
dimSpatial dimension
fe_degreePolynomial degree of finite elements
NumberFloating point type (double or float)

Member Typedef Documentation

◆ Base

template<int dim, int fe_degree, typename Number = double>
using HybridADRSolver::ADROperator< dim, fe_degree, Number >::Base
Initial value:
MatrixFreeOperators::Base<dim,
LinearAlgebra::distributed::Vector<Number>>

◆ size_type

template<int dim, int fe_degree, typename Number = double>
using HybridADRSolver::ADROperator< dim, fe_degree, Number >::size_type = types::global_dof_index

◆ value_type

template<int dim, int fe_degree, typename Number = double>
using HybridADRSolver::ADROperator< dim, fe_degree, Number >::value_type = Number

◆ VectorType

template<int dim, int fe_degree, typename Number = double>
using HybridADRSolver::ADROperator< dim, fe_degree, Number >::VectorType = LinearAlgebra::distributed::Vector<Number>

Constructor & Destructor Documentation

◆ ADROperator()

template<int dim, int fe_degree, typename Number = double>
HybridADRSolver::ADROperator< dim, fe_degree, Number >::ADROperator ( )
inline

Default constructor.

Member Function Documentation

◆ clear()

template<int dim, int fe_degree, typename Number = double>
void HybridADRSolver::ADROperator< dim, fe_degree, Number >::clear ( )
inlineoverride

Clear all data.

◆ compute_diagonal()

template<int dim, int fe_degree, typename Number = double>
void HybridADRSolver::ADROperator< dim, fe_degree, Number >::compute_diagonal ( )
inlineoverride

Computes the diagonal of the operator (for preconditioning).

Uses MatrixFreeTools for efficient diagonal computation.

◆ get_mg_level()

template<int dim, int fe_degree, typename Number = double>
int HybridADRSolver::ADROperator< dim, fe_degree, Number >::get_mg_level ( ) const
inlinenodiscard

Get the multigrid level (-1 if not a level operator).

◆ initialize() [1/2]

template<int dim, int fe_degree, typename Number = double>
void HybridADRSolver::ADROperator< dim, fe_degree, Number >::initialize ( std::shared_ptr< const MatrixFree< dim, Number > > data_in,
const MGConstrainedDoFs & mg_constrained_dofs,
unsigned int level,
const ProblemInterface< dim > & problem )
inline

Initialize for a multigrid level.

Parameters
data_inShared pointer to MatrixFree data structure for this level
mg_constrained_dofsThe MGConstrainedDoFs object
levelThe multigrid level
problemReference to the problem interface

◆ initialize() [2/2]

template<int dim, int fe_degree, typename Number = double>
void HybridADRSolver::ADROperator< dim, fe_degree, Number >::initialize ( std::shared_ptr< const MatrixFree< dim, Number > > data_in,
const ProblemInterface< dim > & problem )
inline

Initialize the operator with MatrixFree data and problem definition.

Parameters
data_inShared pointer to MatrixFree data structure
problemReference to the problem interface

◆ is_multigrid_level()

template<int dim, int fe_degree, typename Number = double>
bool HybridADRSolver::ADROperator< dim, fe_degree, Number >::is_multigrid_level ( ) const
inlinenodiscard

Check if this is a multigrid level operator.


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