OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS > Class Template Reference

A solver for the poisson equation using finite element methods and Conjugate Gradient (CG) More...

#include <PreconditionedFEMPoissonSolver.h>

Inheritance diagram for ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >:
Inheritance graph
Collaboration diagram for ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >:
Collaboration graph

Public Types

using Base = Poisson< FieldLHS, FieldRHS >
 
using MeshType = typename FieldRHS::Mesh_t
 
using PCGSolverAlgorithm_t = PCG< lhs_type, lhs_type, lhs_type, lhs_type, lhs_type, FieldLHS, FieldRHS >
 
using ElementType = std::conditional_t< Dim==1, ippl::EdgeElement< Tlhs >, std::conditional_t< Dim==2, ippl::QuadrilateralElement< Tlhs >, ippl::HexahedralElement< Tlhs > > >
 
using QuadratureType = GaussJacobiQuadrature< Tlhs, 5, ElementType >
 
using LagrangeType = LagrangeSpace< Tlhs, Dim, 1, ElementType, QuadratureType, FieldLHS, FieldRHS >
 
using lhs_type = FieldLHS
 
using rhs_type = FieldRHS
 
enum  OutputType
 
using Trhs = typename FieldRHS::value_type
 
using grad_type = Field< Vector< Tlhs, Dim >, Dim, Mesh, Centering >
 

Public Member Functions

 PreconditionedFEMPoissonSolver ()
 
 PreconditionedFEMPoissonSolver (lhs_type &lhs, rhs_type &rhs)
 
void setRhs (rhs_type &rhs) override
 
void solve () override
 Solve the poisson equation using finite element methods. More...
 
int getIterationCount ()
 Query how many iterations were required to obtain the solution the last time this solver was used. More...
 
Tlhs getResidue () const
 Query the residue. More...
 
template<typename F >
Tlhs getL2Error (const F &analytic)
 Query the L2-norm error compared to a given (analytical) sol. More...
 
Tlhs getAvg (bool Vol=false)
 Query the average of the solution. More...
 
void updateParameter (const std::string &key, const T &value)
 
void updateParameters (const ParameterList &params)
 
void mergeParameters (const ParameterList &params)
 
void setLhs (lhs_type &lhs)
 
virtual void setRhs (rhs_type &rhs)
 
virtual MField_tgetHessian ()
 
void setGradient (grad_type &grad)
 

Protected Member Functions

virtual void setDefaultParameters () override
 

Protected Attributes

PCGSolverAlgorithm_t pcg_algo_m
 
ElementType refElement_m
 
QuadratureType quadrature_m
 
LagrangeType lagrangeSpace_m
 
ParameterList params_m
 
rhs_typerhs_mp
 
lhs_typelhs_mp
 
grad_typegrad_mp
 

Private Types

using Tlhs = typename FieldLHS::value_type
 
typedef FieldLHS::Mesh_t Mesh
 
typedef FieldLHS::Centering_t Centering
 
typedef Mesh::matrix_type Matrix_t
 
typedef Field< Matrix_t, Dim, Mesh, CenteringMField_t
 

Static Private Attributes

static constexpr unsigned Dim = FieldLHS::dim
 

Detailed Description

template<typename FieldLHS, typename FieldRHS = FieldLHS>
class ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >

A solver for the poisson equation using finite element methods and Conjugate Gradient (CG)

Template Parameters
FieldLHSfield type for the left hand side
FieldRHSfield type for the right hand side

Definition at line 39 of file PreconditionedFEMPoissonSolver.h.

Member Typedef Documentation

◆ Base

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::Base = Poisson<FieldLHS, FieldRHS>

Definition at line 44 of file PreconditionedFEMPoissonSolver.h.

◆ Centering

typedef FieldLHS::Centering_t ippl::Poisson< FieldLHS, FieldLHS >::Centering
privateinherited

Definition at line 19 of file Poisson.h.

◆ ElementType

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::ElementType = std::conditional_t<Dim == 1, ippl::EdgeElement<Tlhs>, std::conditional_t<Dim == 2, ippl::QuadrilateralElement<Tlhs>, ippl::HexahedralElement<Tlhs> >>

Definition at line 53 of file PreconditionedFEMPoissonSolver.h.

◆ grad_type

using ippl::Poisson< FieldLHS, FieldLHS >::grad_type = Field<Vector<Tlhs, Dim>, Dim, Mesh, Centering>
inherited

Definition at line 29 of file Poisson.h.

◆ LagrangeType

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::LagrangeType = LagrangeSpace<Tlhs, Dim, 1, ElementType, QuadratureType, FieldLHS, FieldRHS>

Definition at line 60 of file PreconditionedFEMPoissonSolver.h.

◆ lhs_type

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::Poisson< FieldLHS, FieldRHS >::lhs_type = FieldLHS

Definition at line 24 of file Poisson.h.

◆ Matrix_t

typedef Mesh::matrix_type ippl::Poisson< FieldLHS, FieldLHS >::Matrix_t
privateinherited

Definition at line 20 of file Poisson.h.

◆ Mesh

typedef FieldLHS::Mesh_t ippl::Poisson< FieldLHS, FieldLHS >::Mesh
privateinherited

Definition at line 18 of file Poisson.h.

◆ MeshType

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::MeshType = typename FieldRHS::Mesh_t

Definition at line 46 of file PreconditionedFEMPoissonSolver.h.

◆ MField_t

typedef Field<Matrix_t, Dim, Mesh, Centering> ippl::Poisson< FieldLHS, FieldLHS >::MField_t
privateinherited

Definition at line 21 of file Poisson.h.

◆ PCGSolverAlgorithm_t

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::PCGSolverAlgorithm_t = PCG<lhs_type, lhs_type, lhs_type, lhs_type, lhs_type, FieldLHS, FieldRHS>

Definition at line 49 of file PreconditionedFEMPoissonSolver.h.

◆ QuadratureType

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::QuadratureType = GaussJacobiQuadrature<Tlhs, 5, ElementType>

Definition at line 58 of file PreconditionedFEMPoissonSolver.h.

◆ rhs_type

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::Poisson< FieldLHS, FieldRHS >::rhs_type = FieldRHS

Definition at line 25 of file Poisson.h.

◆ Tlhs

template<typename FieldLHS , typename FieldRHS = FieldLHS>
using ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::Tlhs = typename FieldLHS::value_type
private

Definition at line 41 of file PreconditionedFEMPoissonSolver.h.

◆ Trhs

using ippl::Poisson< FieldLHS, FieldLHS >::Trhs = typename FieldRHS::value_type
inherited

Definition at line 27 of file Poisson.h.

Member Enumeration Documentation

◆ OutputType

enum ippl::Poisson::OutputType
inherited

Represents the types of fields that should be output by the solver

Definition at line 35 of file Poisson.h.

Constructor & Destructor Documentation

◆ PreconditionedFEMPoissonSolver() [1/2]

template<typename FieldLHS , typename FieldRHS = FieldLHS>
ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::PreconditionedFEMPoissonSolver ( )
inline

Definition at line 63 of file PreconditionedFEMPoissonSolver.h.

◆ PreconditionedFEMPoissonSolver() [2/2]

Member Function Documentation

◆ getAvg()

template<typename FieldLHS , typename FieldRHS = FieldLHS>
Tlhs ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::getAvg ( bool  Vol = false)
inline

Query the average of the solution.

Parameters
volBoolean indicating whether we divide by volume or not
Returns
avg (offset for null space test cases if divided by volume)

Definition at line 277 of file PreconditionedFEMPoissonSolver.h.

References ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::computeAvg(), ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::lagrangeSpace_m, and ippl::Poisson< FieldLHS, FieldLHS >::lhs_mp.

Here is the call graph for this function:

◆ getHessian()

virtual MField_t * ippl::Poisson< FieldLHS, FieldLHS >::getHessian ( )
inlinevirtualinherited

Get the Hessian matrix of the solution

Returns
Matrix field containing the Hessian of the lhs

Definition at line 102 of file Poisson.h.

◆ getIterationCount()

template<typename FieldLHS , typename FieldRHS = FieldLHS>
int ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::getIterationCount ( )
inline

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 254 of file PreconditionedFEMPoissonSolver.h.

References ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::getIterationCount(), and ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::pcg_algo_m.

Here is the call graph for this function:

◆ getL2Error()

template<typename FieldLHS , typename FieldRHS = FieldLHS>
template<typename F >
Tlhs ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::getL2Error ( const F &  analytic)
inline

Query the L2-norm error compared to a given (analytical) sol.

Returns
L2 error after last solve

Definition at line 267 of file PreconditionedFEMPoissonSolver.h.

References ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::computeErrorL2(), ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::lagrangeSpace_m, and ippl::Poisson< FieldLHS, FieldLHS >::lhs_mp.

Here is the call graph for this function:

◆ getResidue()

template<typename FieldLHS , typename FieldRHS = FieldLHS>
Tlhs ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::getResidue ( ) const
inline

◆ mergeParameters()

void ippl::Poisson< FieldLHS, FieldLHS >::mergeParameters ( const ParameterList params)
inlineinherited

Merges another parameter set into the solver's parameters, overwriting existing parameters in case of conflict

Parameters
paramsParameter list with desired values

Definition at line 84 of file Poisson.h.

◆ setDefaultParameters()

template<typename FieldLHS , typename FieldRHS = FieldLHS>
virtual void ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::setDefaultParameters ( )
inlineoverrideprotectedvirtual

Utility function for initializing a solver's default parameters (to be overridden for each base class)

Reimplemented from ippl::Poisson< FieldLHS, FieldLHS >.

Definition at line 292 of file PreconditionedFEMPoissonSolver.h.

References ippl::ParameterList::add(), Physics::e, and ippl::Poisson< FieldLHS, FieldLHS >::params_m.

Referenced by ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::PreconditionedFEMPoissonSolver().

Here is the call graph for this function:

◆ setGradient()

void ippl::Poisson< FieldLHS, FieldLHS >::setGradient ( grad_type grad)
inlineinherited

Set the field in which the gradient of the computed potential should be stored

Parameters
gradReference to field in which to store the gradient

Definition at line 109 of file Poisson.h.

◆ setLhs()

void ippl::Poisson< FieldLHS, FieldLHS >::setLhs ( lhs_type lhs)
inlineinherited

Set the problem LHS

Parameters
lhsReference to problem LHS field

Definition at line 90 of file Poisson.h.

◆ setRhs() [1/2]

virtual void ippl::Poisson< FieldLHS, FieldLHS >::setRhs ( rhs_type rhs)
inlinevirtualinherited

Set the problem RHS

Parameters
rhsReference to problem RHS field

Definition at line 96 of file Poisson.h.

◆ setRhs() [2/2]

◆ solve()

template<typename FieldLHS , typename FieldRHS = FieldLHS>
void ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::solve ( )
inlineoverridevirtual

Solve the poisson equation using finite element methods.

The problem is described by -laplace(lhs) = rhs

Implements ippl::Poisson< FieldLHS, FieldLHS >.

Definition at line 108 of file PreconditionedFEMPoissonSolver.h.

References ippl::BConds< Field, Dim >::assignGhostToPhysical(), ippl::CONSTANT_FACE, ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::evaluateAx(), ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::evaluateAx_diag(), ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::evaluateAx_inversediag(), ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::evaluateAx_lift(), ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::evaluateAx_lower(), ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::evaluateAx_upper(), ippl::LagrangeSpace< T, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS >::evaluateAx_upperlower(), ippl::FiniteElementSpace< T, Dim, NumElementDOFs, ElementType, QuadratureType, FieldLHS, FieldRHS >::getElementMeshVertexPoints(), IpplTimings::getTimer(), ippl::grad(), ippl::Poisson< FieldLHS, FieldRHS >::GRAD, ippl::Poisson< FieldLHS, FieldLHS >::grad_mp, ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::lagrangeSpace_m, ippl::Poisson< FieldLHS, FieldLHS >::lhs_mp, ippl::Poisson< FieldLHS, FieldLHS >::params_m, ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::pcg_algo_m, ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::refElement_m, ippl::Poisson< FieldLHS, FieldLHS >::rhs_mp, ippl::CG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::setOperator(), ippl::PCG< OperatorRet, LowerRet, UpperRet, UpperLowerRet, InverseDiagRet, DiagRet, FieldLHS, FieldRHS >::setPreconditioner(), ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::solve(), IpplTimings::startTimer(), and IpplTimings::stopTimer().

Referenced by ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::solve().

Here is the call graph for this function:

◆ updateParameter()

void ippl::Poisson< FieldLHS, FieldLHS >::updateParameter ( const std::string &  key,
const T value 
)
inlineinherited

Update one of the solver's parameters

Parameters
keyThe parameter key
valueThe new value
Exceptions
IpplExceptionFails if there is no existing parameter with the given key

Definition at line 67 of file Poisson.h.

◆ updateParameters()

void ippl::Poisson< FieldLHS, FieldLHS >::updateParameters ( const ParameterList params)
inlineinherited

Updates all solver parameters based on values in another parameter set

Parameters
paramsParameter list with updated values
Exceptions
IpplExceptionFails if the provided parameter list includes keys not already present

Definition at line 77 of file Poisson.h.

Member Data Documentation

◆ Dim

template<typename FieldLHS , typename FieldRHS = FieldLHS>
constexpr unsigned ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::Dim = FieldLHS::dim
staticconstexprprivate

Definition at line 40 of file PreconditionedFEMPoissonSolver.h.

◆ grad_mp

grad_type* ippl::Poisson< FieldLHS, FieldLHS >::grad_mp
protectedinherited

Definition at line 125 of file Poisson.h.

◆ lagrangeSpace_m

◆ lhs_mp

lhs_type* ippl::Poisson< FieldLHS, FieldLHS >::lhs_mp
protectedinherited

Definition at line 123 of file Poisson.h.

◆ params_m

ParameterList ippl::Poisson< FieldLHS, FieldLHS >::params_m
protectedinherited

Definition at line 120 of file Poisson.h.

◆ pcg_algo_m

◆ quadrature_m

template<typename FieldLHS , typename FieldRHS = FieldLHS>
QuadratureType ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::quadrature_m
protected

Definition at line 298 of file PreconditionedFEMPoissonSolver.h.

◆ refElement_m

template<typename FieldLHS , typename FieldRHS = FieldLHS>
ElementType ippl::PreconditionedFEMPoissonSolver< FieldLHS, FieldRHS >::refElement_m
protected

◆ rhs_mp

rhs_type* ippl::Poisson< FieldLHS, FieldLHS >::rhs_mp
protectedinherited

Definition at line 122 of file Poisson.h.


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