HybridADRSolver
Loading...
Searching...
No Matches
HybridADRSolver::MatrixBasedSolver< dim > Class Template Reference

Matrix-based solver with hybrid MPI+threading parallelization. More...

#include <matrix_based_solver.h>

Inheritance diagram for HybridADRSolver::MatrixBasedSolver< dim >:
Collaboration diagram for HybridADRSolver::MatrixBasedSolver< dim >:

Public Member Functions

 MatrixBasedSolver (const ProblemInterface< dim > &problem, unsigned int degree, MPI_Comm comm, const SolverParameters &params=SolverParameters())
void run (unsigned int n_refinements) override
SolverType get_solver_type () const override
std::string get_name () const override
const LADistributed::MPI::SparseMatrix & get_system_matrix () const
double compute_memory_usage () const
 Compute memory usage in MB.
double compute_l2_error ()
 Compute the L2 error of the solution.
Public Member Functions inherited from HybridADRSolver::ParallelSolverBase< dim >
 ParallelSolverBase (MPI_Comm comm, SolverParameters params, bool construct_mg_hierarchy=false)
virtual ~ParallelSolverBase ()=default
const TimingResultsget_timing_results () const

Protected Member Functions

void setup_dofs () override
void assemble_system () override
void solve () override
void output_results (unsigned int cycle) const override
Protected Member Functions inherited from HybridADRSolver::ParallelSolverBase< dim >
virtual void setup_grid (unsigned int n_refinements)

Additional Inherited Members

Protected Attributes inherited from HybridADRSolver::ParallelSolverBase< dim >
MPI_Comm mpi_communicator
unsigned int n_mpi_processes
unsigned int this_mpi_process
parallel::distributed::Triangulation< dim > triangulation
std::unique_ptr< FiniteElement< dim > > fe
DoFHandler< dim > dof_handler
std::unique_ptr< Mapping< dim > > mapping
AffineConstraints< double > constraints
IndexSet locally_owned_dofs
IndexSet locally_relevant_dofs
SolverParameters parameters
TimingResults timing_results
ConditionalOStream pcout
TimerOutput computing_timer
bool has_mg_hierarchy

Detailed Description

template<int dim>
class HybridADRSolver::MatrixBasedSolver< dim >

Matrix-based solver with hybrid MPI+threading parallelization.

  • This solver:
  • Explicitly assembles and stores the sparse system matrix
  • Uses WorkStream for thread-parallel assembly
  • Uses PETSc for distributed linear algebra
  • Supports ILU and AMG preconditioning
  • Template Parameters
    dimSpatial dimension

Constructor & Destructor Documentation

◆ MatrixBasedSolver()

template<int dim>
HybridADRSolver::MatrixBasedSolver< dim >::MatrixBasedSolver ( const ProblemInterface< dim > & problem,
unsigned int degree,
MPI_Comm comm,
const SolverParameters & params = SolverParameters() )

Constructor

Parameters
problemThe PDE problem to solve
degreePolynomial degree of finite elements
commMPI communicator
paramsSolver parameters

Member Function Documentation

◆ assemble_system()

template<int dim>
void HybridADRSolver::MatrixBasedSolver< dim >::assemble_system ( )
overrideprotectedvirtual

Assemble the system (matrix and/or RHS)

Implements HybridADRSolver::ParallelSolverBase< dim >.

◆ compute_l2_error()

template<int dim>
double HybridADRSolver::MatrixBasedSolver< dim >::compute_l2_error ( )

Compute the L2 error of the solution.

◆ compute_memory_usage()

template<int dim>
double HybridADRSolver::MatrixBasedSolver< dim >::compute_memory_usage ( ) const

Compute memory usage in MB.

◆ get_name()

template<int dim>
std::string HybridADRSolver::MatrixBasedSolver< dim >::get_name ( ) const
inlineoverridevirtual

Get a descriptive name for the solver

Implements HybridADRSolver::ParallelSolverBase< dim >.

◆ get_solver_type()

template<int dim>
SolverType HybridADRSolver::MatrixBasedSolver< dim >::get_solver_type ( ) const
inlineoverridevirtual

Get the solver type (matrix-based or matrix-free)

Implements HybridADRSolver::ParallelSolverBase< dim >.

◆ get_system_matrix()

template<int dim>
const LADistributed::MPI::SparseMatrix & HybridADRSolver::MatrixBasedSolver< dim >::get_system_matrix ( ) const
inline

Get the system matrix (for analysis/debugging)

◆ output_results()

template<int dim>
void HybridADRSolver::MatrixBasedSolver< dim >::output_results ( unsigned int cycle) const
overrideprotectedvirtual

Output results to files

Parameters
cycleCurrent refinement cycle

Implements HybridADRSolver::ParallelSolverBase< dim >.

◆ run()

template<int dim>
void HybridADRSolver::MatrixBasedSolver< dim >::run ( unsigned int n_refinements)
overridevirtual

Run the complete solve cycle

Parameters
n_refinementsNumber of global mesh refinements

Implements HybridADRSolver::ParallelSolverBase< dim >.

◆ setup_dofs()

template<int dim>
void HybridADRSolver::MatrixBasedSolver< dim >::setup_dofs ( )
overrideprotectedvirtual

Distribute degrees of freedom and setup constraints

Implements HybridADRSolver::ParallelSolverBase< dim >.

◆ solve()

template<int dim>
void HybridADRSolver::MatrixBasedSolver< dim >::solve ( )
overrideprotectedvirtual

Solve the linear system

Implements HybridADRSolver::ParallelSolverBase< dim >.


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