IPPL API Reference
Independent Parallel Particle Layer C++ API
Loading...
Searching...
No Matches
ippl::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS > Class Template Reference
+ 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 mesh_type = typename lhs_type::Mesh_t
 
using layout_type = typename lhs_type::Layout_t
 
using lhs_type = FieldLHS
 
using rhs_type = FieldRHS
 
- Public Types inherited from ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >
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 mesh_type = typename lhs_type::Mesh_t
 
using layout_type = typename lhs_type::Layout_t
 
using lhs_type = FieldLHS
 
using rhs_type = FieldRHS
 
- Public Types inherited from ippl::SolverAlgorithm< FieldLHS, FieldRHS >
using lhs_type = FieldLHS
 
using rhs_type = FieldRHS
 

Public Member Functions

void initializeFields (mesh_type &mesh, layout_type &layout) override
 
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=pcg_preconditioner_defaults::newton_level, int degree=pcg_preconditioner_defaults::chebyshev_degree, int richardson_iterations=pcg_preconditioner_defaults::richardson_iterations, int inner=pcg_preconditioner_defaults::gauss_seidel_inner, int outer=pcg_preconditioner_defaults::gauss_seidel_outer, double omega=pcg_preconditioner_defaults::ssor_omega) override
 
void operator() (lhs_type &lhs, rhs_type &rhs, const ParameterList &params) override
 
- Public Member Functions inherited from ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >
virtual void setOperator (OperatorF op)
 
virtual int getIterationCount ()
 
virtual T getResidue () const
 

Protected Attributes

std::unique_ptr< preconditioner< FieldLHS > > preconditioner_m
 
lhs_type s
 
lhs_type pcond_out
 
- Protected Attributes inherited from ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >
OperatorF op_m
 
residueNorm = 0
 
int iterations_m = 0
 
lhs_type r
 
lhs_type d
 
lhs_type q
 

Member Function Documentation

◆ initializeFields()

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 >::initializeFields ( mesh_type &  mesh,
layout_type &  layout 
)
inlineoverridevirtual

◆ operator()()

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

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

◆ 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 = pcg_preconditioner_defaults::newton_level,
int  degree = pcg_preconditioner_defaults::chebyshev_degree,
int  richardson_iterations = pcg_preconditioner_defaults::richardson_iterations,
int  inner = pcg_preconditioner_defaults::gauss_seidel_inner,
int  outer = pcg_preconditioner_defaults::gauss_seidel_outer,
double  omega = pcg_preconditioner_defaults::ssor_omega 
)
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, FieldRHS >.


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