PRISMS-PF Manual
Loading...
Searching...
No Matches
LinearSolver< dim, degree, number > Class Template Reference

This class handles the explicit solves of all explicit fields. More...

#include <linear_solver.h>

Inheritance diagram for LinearSolver< dim, degree, number >:
[legend]
Collaboration diagram for LinearSolver< dim, degree, number >:
[legend]

Public Member Functions

 LinearSolver (SolveBlock _solve_block, const SolveContext< dim, degree, number > &_solve_context)
 Constructor.
 
void init (const std::list< DependencyMap > &all_dependeny_sets) override
 Initialize the solver.
 
void reinit () override
 Reinitialize the solver.
 
void solve_impl () override
 Solve for a single update step.
 
int do_linear_solve (BlockVector< number > &b_vector, MFOperator< dim, degree, number > &lhs_matrix, BlockVector< number > &x_vector)
 
- Public Member Functions inherited from SolverBase< dim, degree, number >
 SolverBase (SolveBlock _solve_block, const SolveContext< dim, degree, number > &_solve_context)
 Constructor.
 
virtual ~SolverBase ()=default
 Destructor.
 
 SolverBase (const SolverBase &solver_base)=delete
 Copy constructor.
 
SolverBaseoperator= (const SolverBase &solver_base)=delete
 Copy assignment.
 
 SolverBase (SolverBase &&solver_base) noexcept=delete
 Move constructor.
 
SolverBaseoperator= (SolverBase &&solver_base) noexcept=delete
 Move assignment.
 
virtual void solve ()
 Solve for a single update step.
 
virtual void update ()
 Update the fields.
 
virtual void update_ghosts ()
 Update the ghosts.
 
void prepare_for_solution_transfer ()
 Prepare for solution transfer (for AMR).
 
void execute_solution_transfer ()
 Execute solution transfer (for AMR).
 
virtual void print ()
 Print information about the solver to summary.log.
 
void set_initial_condition ()
 Set the initial conditions.
 
const GroupSolutionHandler< dim, number > & get_solution_manager () const
 Get the solution handler.
 
GroupSolutionHandler< dim, number > & get_solution_manager ()
 Get the solution handler.
 
const SolveBlockget_solve_block () const
 Get the solver context.
 

Protected Types

using PreconditionChebyshev
 

Protected Member Functions

double normalization_value ()
 
void initialize_preconditioner ()
 
void initialize_chebyshev ()
 
void initialize_solver ()
 

Protected Attributes

MFOperator< dim, degree, number > rhs_operator
 Matrix free operators.
 
MFOperator< dim, degree, number > lhs_operator
 
BlockVector< number > rhs_vector
 
- Protected Attributes inherited from SolverBase< dim, degree, number >
SolveBlock solve_block
 Information about the solve block this handler is responsible for.
 
const SolveContext< dim, degree, number > * solve_context
 Solver context provides access to external information.
 
GroupSolutionHandler< dim, number > solutions
 Solution vectors for fields handled by this solver.
 
std::vector< SolverBase< dim, degree, number > * > aux_solvers
 

Private Member Functions

const LinearSolverParameterslin_params () const
 Linear solver parameters.
 

Private Attributes

dealii::SolverControl linear_solver_control
 Solver control. Contains max iterations and tolerance.
 
dealii::SolverSelector< BlockVector< number > > lin_solver
 Solver. Can switch between different linear solvers.
 
BlockVector< number > inhomogeneous_values
 Vector containing only the inhomogeneous constraints (namely, non-zero Dirichlet values)
 
BlockVector< number > inhomogeneous_rhs
 Result of the linear operator applied to the inhomogeneous values.
 
PreconditionChebyshev precond_chebyshev
 
PreconditionChebyshev::AdditionalData precond_data
 

Detailed Description

template<unsigned int dim, unsigned int degree, typename number>
class LinearSolver< dim, degree, number >

This class handles the explicit solves of all explicit fields.

Todo
Separate implementation from header.

Member Typedef Documentation

◆ PreconditionChebyshev

template<unsigned int dim, unsigned int degree, typename number>
using LinearSolver< dim, degree, number >::PreconditionChebyshev
protected
Initial value:
dealii::PreconditionChebyshev<MFOperator<dim, degree, number>,
dealii::DiagonalMatrix<BlockVector<number>>>
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVector
Typedef for solution block vector.
Definition group_solution_handler.h:29

Constructor & Destructor Documentation

◆ LinearSolver()

template<unsigned int dim, unsigned int degree, typename number>
LinearSolver< dim, degree, number >::LinearSolver ( SolveBlock _solve_block,
const SolveContext< dim, degree, number > & _solve_context )
inline

Constructor.

Precondition
Solve context has initialized members.

Member Function Documentation

◆ do_linear_solve()

template<unsigned int dim, unsigned int degree, typename number>
int LinearSolver< dim, degree, number >::do_linear_solve ( BlockVector< number > & b_vector,
MFOperator< dim, degree, number > & lhs_matrix,
BlockVector< number > & x_vector )
inline

◆ init()

template<unsigned int dim, unsigned int degree, typename number>
void LinearSolver< dim, degree, number >::init ( const std::list< DependencyMap > & all_dependeny_sets)
inlineoverridevirtual

Initialize the solver.

Reimplemented from SolverBase< dim, degree, number >.

Reimplemented in NewtonSolver< dim, degree, number >.

◆ initialize_chebyshev()

template<unsigned int dim, unsigned int degree, typename number>
void LinearSolver< dim, degree, number >::initialize_chebyshev ( )
inlineprotected

◆ initialize_preconditioner()

template<unsigned int dim, unsigned int degree, typename number>
void LinearSolver< dim, degree, number >::initialize_preconditioner ( )
inlineprotected

◆ initialize_solver()

template<unsigned int dim, unsigned int degree, typename number>
void LinearSolver< dim, degree, number >::initialize_solver ( )
inlineprotected

◆ lin_params()

template<unsigned int dim, unsigned int degree, typename number>
const LinearSolverParameters & LinearSolver< dim, degree, number >::lin_params ( ) const
inlineprivate

Linear solver parameters.

◆ normalization_value()

template<unsigned int dim, unsigned int degree, typename number>
double LinearSolver< dim, degree, number >::normalization_value ( )
inlineprotected

◆ reinit()

template<unsigned int dim, unsigned int degree, typename number>
void LinearSolver< dim, degree, number >::reinit ( )
inlineoverridevirtual

Reinitialize the solver.

Reimplemented from SolverBase< dim, degree, number >.

Reimplemented in NewtonSolver< dim, degree, number >.

◆ solve_impl()

template<unsigned int dim, unsigned int degree, typename number>
void LinearSolver< dim, degree, number >::solve_impl ( )
inlineoverridevirtual

Solve for a single update step.

Reimplemented from SolverBase< dim, degree, number >.

Reimplemented in MGSolver< dim, degree, number >, and NewtonSolver< dim, degree, number >.

Member Data Documentation

◆ inhomogeneous_rhs

template<unsigned int dim, unsigned int degree, typename number>
BlockVector<number> LinearSolver< dim, degree, number >::inhomogeneous_rhs
private

Result of the linear operator applied to the inhomogeneous values.

◆ inhomogeneous_values

template<unsigned int dim, unsigned int degree, typename number>
BlockVector<number> LinearSolver< dim, degree, number >::inhomogeneous_values
private

Vector containing only the inhomogeneous constraints (namely, non-zero Dirichlet values)

◆ lhs_operator

template<unsigned int dim, unsigned int degree, typename number>
MFOperator<dim, degree, number> LinearSolver< dim, degree, number >::lhs_operator
protected

◆ lin_solver

template<unsigned int dim, unsigned int degree, typename number>
dealii::SolverSelector<BlockVector<number> > LinearSolver< dim, degree, number >::lin_solver
private

Solver. Can switch between different linear solvers.

◆ linear_solver_control

template<unsigned int dim, unsigned int degree, typename number>
dealii::SolverControl LinearSolver< dim, degree, number >::linear_solver_control
private

Solver control. Contains max iterations and tolerance.

◆ precond_chebyshev

template<unsigned int dim, unsigned int degree, typename number>
PreconditionChebyshev LinearSolver< dim, degree, number >::precond_chebyshev
private

◆ precond_data

template<unsigned int dim, unsigned int degree, typename number>
PreconditionChebyshev::AdditionalData LinearSolver< dim, degree, number >::precond_data
private

◆ rhs_operator

template<unsigned int dim, unsigned int degree, typename number>
MFOperator<dim, degree, number> LinearSolver< dim, degree, number >::rhs_operator
protected

Matrix free operators.

◆ rhs_vector

template<unsigned int dim, unsigned int degree, typename number>
BlockVector<number> LinearSolver< dim, degree, number >::rhs_vector
protected

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