IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > > Class Template Referenceabstract

#include <PCG.h>

Inheritance diagram for ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >:
Collaboration diagram for ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >:

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)>
typedef FEMVector< Tlhs_type
typedef FEMVector< Trhs_type
using DiagF

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, double alpha, double beta, std::string preconditioner_type="", int level=5, int degree=31, int richardson_iterations=1, int inner=5, int outer=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<FEMVector<T>, FEMVector<T>>
typedef Base::lhs_type::value_type T

Detailed Description

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
class ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >

Definition at line 162 of file PCG.h.

Member Typedef Documentation

◆ Base

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::Base = SolverAlgorithm<FEMVector<T>, FEMVector<T>>
private

Definition at line 164 of file PCG.h.

◆ DiagF

using ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T >, FEMVector< T > >::DiagF

Definition at line 28 of file PCG.h.

◆ InverseDiagF

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

Definition at line 172 of file PCG.h.

◆ lhs_type

◆ LowerF

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

Definition at line 169 of file PCG.h.

◆ OperatorF

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

Definition at line 168 of file PCG.h.

◆ rhs_type

◆ T

typedef Base::lhs_type::value_type ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T >, FEMVector< T > >::T
private

Definition at line 19 of file PCG.h.

◆ UpperF

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

Definition at line 170 of file PCG.h.

◆ UpperLowerF

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

Definition at line 171 of file PCG.h.

Constructor & Destructor Documentation

◆ ~CG()

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
virtual ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::~CG ( )
virtualdefault

Member Function Documentation

◆ getIterationCount()

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
virtual int ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::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 213 of file PCG.h.

References iterations_m.

◆ getResidue()

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

Definition at line 273 of file PCG.h.

References residueNorm.

◆ operator()() [1/2]

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::operator() ( lhs_type & lhs,
rhs_type & rhs,
const ParameterList & params )
inlineoverridevirtual

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

Implements ippl::SolverAlgorithm< FEMVector< T >, FEMVector< T > >.

Definition at line 215 of file PCG.h.

References ippl::FEMVector< T >::deepCopy(), ippl::ParameterList::get(), ippl::innerProduct(), ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::iterations_m, iterations_m, ippl::norm(), ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::op_m, residueNorm, and ippl::FEMVector< T >::setHalo().

Here is the call graph for this function:

◆ operator()() [2/2]

virtual void ippl::SolverAlgorithm< FEMVector< T >, FEMVector< T > >::operator() ( lhs_type & lhs,
rhs_type & rhs,
const ParameterList & params )
pure virtual

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

◆ setOperator()

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::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 180 of file PCG.h.

References op_m.

◆ setPreconditioner()

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
virtual void ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::setPreconditioner ( OperatorF && op,
LowerF && lower,
UpperF && upper,
UpperLowerF && upper_and_lower,
InverseDiagF && inverse_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 )
inlinevirtual

Definition at line 181 of file PCG.h.

Member Data Documentation

◆ iterations_m

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
int ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::iterations_m = 0
protected

Definition at line 278 of file PCG.h.

Referenced by getIterationCount(), and operator()().

◆ op_m

template<typename OperatorRet, typename LowerRet, typename UpperRet, typename UpperLowerRet, typename InverseDiagRet, typename T>
OperatorF ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, FEMVector< T >, FEMVector< T > >::op_m
protected

Definition at line 276 of file PCG.h.

Referenced by setOperator().

◆ residueNorm

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

Definition at line 277 of file PCG.h.

Referenced by getResidue(), and operator()().


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