IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
ippl::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS > Class Template Reference

#include <PCG.h>

Inheritance diagram for ippl::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >:
Collaboration diagram for ippl::PCG< 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

 PCG ()
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=4, int inner=2, int outer=2, double omega=1.57079632679) override
void operator() (lhs_type &lhs, rhs_type &rhs, const ParameterList &params) override
virtual void setOperator (OperatorF op)
virtual int getIterationCount ()
virtual void operator() (lhs_type &lhs, rhs_type &rhs, const ParameterList &params) override
virtual T getResidue () const

Protected Attributes

std::unique_ptr< preconditioner< FieldLHS > > preconditioner_m
OperatorF op_m
T residueNorm
int iterations_m

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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >

Definition at line 285 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::Base = SolverAlgorithm<FieldLHS, FieldRHS>
private

Definition at line 287 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::DiagF = std::function<DiagRet(lhs_type)>

Definition at line 297 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::InverseDiagF = std::function<InverseDiagRet(lhs_type)>

Definition at line 296 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::LowerF = std::function<LowerRet(lhs_type)>

Definition at line 293 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::OperatorF = std::function<OperatorRet(lhs_type)>

Definition at line 292 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::T
private

Definition at line 288 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::UpperF = std::function<UpperRet(lhs_type)>

Definition at line 294 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::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::UpperLowerF = std::function<UpperLowerRet(lhs_type)>

Definition at line 295 of file PCG.h.

Constructor & Destructor Documentation

◆ PCG()

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename DiagRet, typename FieldLHS, typename FieldRHS = FieldLHS>
ippl::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::PCG ( )
inline

Definition at line 299 of file PCG.h.

Member Function Documentation

◆ getIterationCount()

virtual int ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >::getIterationCount ( )
inlinevirtualinherited

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()

virtual T ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >::getResidue ( ) const
inlinevirtualinherited

Definition at line 151 of file PCG.h.

◆ operator()() [1/2]

virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >::operator() ( lhs_type & lhs,
rhs_type & rhs,
const ParameterList & params )
inlineoverridevirtualinherited

Implements ippl::SolverAlgorithm< FieldLHS, FieldLHS >.

Definition at line 75 of file PCG.h.

◆ operator()() [2/2]

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

Definition at line 379 of file PCG.h.

◆ setOperator()

virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >::setOperator ( OperatorF op)
inlinevirtualinherited

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>
void ippl::PCG< 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 = 4,
int inner = 2,
int outer = 2,
double omega = 1.57079632679 )
inlineoverridevirtual

Sets the differential operator for the conjugate gradient algorithm

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

Reimplemented from ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >.

Definition at line 308 of file PCG.h.

Member Data Documentation

◆ iterations_m

int ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >::iterations_m
protectedinherited

◆ op_m

OperatorF ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >::op_m
protectedinherited

◆ preconditioner_m

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename DiagRet, typename FieldLHS, typename FieldRHS = FieldLHS>
std::unique_ptr<preconditioner<FieldLHS> > ippl::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::preconditioner_m
protected

Definition at line 465 of file PCG.h.

◆ residueNorm

T ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldLHS >::residueNorm
protectedinherited

Definition at line 155 of file PCG.h.


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