OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS > Class Template Referenceabstract

#include <PCG.h>

Inheritance diagram for ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >:
Inheritance graph
Collaboration diagram for ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >:
Collaboration graph

Public Types

using OperatorF = std::function< OperatorRet(lhs_type)>
 
using LowerF = std::function< LowerRet(lhs_type)>
 
using UpperF = std::function< UpperRet(lhs_type)>
 
using UpperLowerF = std::function< UpperLowerRet(lhs_type)>
 
using InverseDiagF = std::function< InverseDiagRet(lhs_type)>
 
using DiagF = std::function< DiagRet(lhs_type)>
 
using lhs_type = FieldLHS
 
using rhs_type = FieldRHS
 

Public Member Functions

virtual ~CG ()=default
 
virtual void setOperator (OperatorF op)
 
virtual void setPreconditioner (OperatorF &&op, LowerF &&lower, UpperF &&upper, UpperLowerF &&upper_and_lower, InverseDiagF &&inverse_diagonal, DiagF &&diagonal, double alpha, double beta, std::string preconditioner_type="", int level=5, int degree=31, int richardson_iterations=1, int inner=5, int outer=1, double omega=1)
 
virtual int getIterationCount ()
 
virtual void operator() (lhs_type &lhs, rhs_type &rhs, const ParameterList &params) override
 
virtual T getResidue () const
 
virtual void operator() (lhs_type &lhs, rhs_type &rhs, const ParameterList &params)=0
 

Protected Attributes

OperatorF op_m
 
T residueNorm = 0
 
int iterations_m = 0
 

Private Types

using Base = SolverAlgorithm< FieldLHS, FieldRHS >
 
typedef Base::lhs_type::value_type T
 

Detailed Description

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename DiagRet, typename FieldLHS, typename FieldRHS = FieldLHS>
class ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >

Definition at line 17 of file PCG.h.

Member Typedef Documentation

◆ Base

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::Base = SolverAlgorithm<FieldLHS, FieldRHS>
private

Definition at line 18 of file PCG.h.

◆ DiagF

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::DiagF = std::function<DiagRet(lhs_type)>

Definition at line 28 of file PCG.h.

◆ InverseDiagF

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::InverseDiagF = std::function<InverseDiagRet(lhs_type)>

Definition at line 27 of file PCG.h.

◆ lhs_type

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::SolverAlgorithm< FieldLHS, FieldRHS >::lhs_type = FieldLHS

Definition at line 18 of file SolverAlgorithm.h.

◆ LowerF

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::LowerF = std::function<LowerRet(lhs_type)>

Definition at line 24 of file PCG.h.

◆ OperatorF

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::OperatorF = std::function<OperatorRet(lhs_type)>

Definition at line 23 of file PCG.h.

◆ rhs_type

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::SolverAlgorithm< FieldLHS, FieldRHS >::rhs_type = FieldRHS

Definition at line 19 of file SolverAlgorithm.h.

◆ T

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
typedef Base::lhs_type::value_type ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::T
private

Definition at line 19 of file PCG.h.

◆ UpperF

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::UpperF = std::function<UpperRet(lhs_type)>

Definition at line 25 of file PCG.h.

◆ UpperLowerF

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::UpperLowerF = std::function<UpperLowerRet(lhs_type)>

Definition at line 26 of file PCG.h.

Constructor & Destructor Documentation

◆ ~CG()

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
virtual ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::~CG ( )
virtualdefault

Member Function Documentation

◆ getIterationCount()

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
virtual int ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::getIterationCount ( )
inlinevirtual

◆ getResidue()

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
virtual T ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::getResidue ( ) const
inlinevirtual

◆ operator()() [1/2]

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::operator() ( lhs_type lhs,
rhs_type rhs,
const ParameterList params 
)
inlineoverridevirtual

◆ operator()() [2/2]

virtual void ippl::SolverAlgorithm< FieldLHS, FieldLHS >::operator() ( lhs_type lhs,
rhs_type rhs,
const ParameterList params 
)
pure virtualinherited

Solve the problem described by Op(lhs) = rhs, where Op is an unspecified differential operator (handled by derived classes)

Parameters
lhsThe problem's LHS
rhsThe problem's RHS
paramsA set of parameters for the solver algorithm

Implemented in ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >, ippl::CG< lhs_type, lhs_type, lhs_type, lhs_type, lhs_type, FieldLHS, FieldLHS >, ippl::CG< lhs_type, lhs_type, lhs_type, lhs_type, lhs_type, FieldLHS, FieldLHS, FieldLHS >, and ippl::PCG< lhs_type, lhs_type, lhs_type, lhs_type, lhs_type, FieldLHS, FieldLHS >.

◆ setOperator()

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::setOperator ( OperatorF  op)
inlinevirtual

Sets the differential operator for the conjugate gradient algorithm

Parameters
opA function that returns OpRet and takes a field of the LHS type

Definition at line 36 of file PCG.h.

References ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::op_m.

Referenced by ippl::FEMMaxwellDiffusionSolver< FieldType >::solve(), ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::solve(), and ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::solve().

◆ setPreconditioner()

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::setPreconditioner ( OperatorF &&  op,
LowerF &&  lower,
UpperF &&  upper,
UpperLowerF &&  upper_and_lower,
InverseDiagF &&  inverse_diagonal,
DiagF &&  diagonal,
double  alpha,
double  beta,
std::string  preconditioner_type = "",
int  level = 5,
int  degree = 31,
int  richardson_iterations = 1,
int  inner = 5,
int  outer = 1,
double  omega = 1 
)
inlinevirtual

Member Data Documentation

◆ iterations_m

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
int ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::iterations_m = 0
protected

◆ op_m

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
OperatorF ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::op_m
protected

◆ residueNorm

template<typename OperatorRet , typename LowerRet , typename UpperRet , typename UpperLowerRet , typename InverseDiagRet , typename DiagRet , typename FieldLHS , typename FieldRHS = FieldLHS>
T ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::residueNorm = 0
protected

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