IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
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 >:
Collaboration diagram for ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >:

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
using rhs_type

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

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

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

Query how many iterations were required to obtain the solution the last time this solver was used

Returns
Iteration count of last solve

Definition at line 73 of file PCG.h.

◆ 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

Definition at line 151 of file PCG.h.

◆ 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< 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 >, ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, 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.

◆ 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

Definition at line 155 of file PCG.h.


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