IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes > Class Template Reference

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

#include <FEMPoissonSolver.h>

Inheritance diagram for ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >:
Collaboration diagram for ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >:

Public Types

using Base = Poisson<FieldLHS, FieldRHS>
using MeshType = typename FieldRHS::Mesh_t
using PCGSolverAlgorithm_t
using ElementType
using QuadratureType = GaussJacobiQuadrature<Tlhs, QuadNumNodes, ElementType>
using LagrangeType = LagrangeSpace<Tlhs, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS>
using lhs_type
using rhs_type
enum  OutputType
using Trhs
using grad_type

Public Member Functions

 FEMPoissonSolver ()
 FEMPoissonSolver (lhs_type &lhs, rhs_type &rhs)
void setRhs (rhs_type &rhs) override
void solve () override
 Solve the poisson equation using finite element methods. The problem is described by -laplace(lhs) = rhs.
int getIterationCount ()
Tlhs getResidue () const
template<typename F>
Tlhs getL2Error (const F &analytic)
Tlhs getAvg (bool Vol=false)
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, CenteringCenteringMField_t

Static Private Attributes

static constexpr unsigned Dim = FieldLHS::dim

Detailed Description

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
class ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >

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 37 of file FEMPoissonSolver.h.

Member Typedef Documentation

◆ Base

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::Base = Poisson<FieldLHS, FieldRHS>

Definition at line 42 of file FEMPoissonSolver.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, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::ElementType
Initial value:

Definition at line 51 of file FEMPoissonSolver.h.

◆ grad_type

using ippl::Poisson< FieldLHS, FieldLHS >::grad_type
inherited

Definition at line 29 of file Poisson.h.

◆ LagrangeType

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::LagrangeType = LagrangeSpace<Tlhs, Dim, Order, ElementType, QuadratureType, FieldLHS, FieldRHS>

Definition at line 58 of file FEMPoissonSolver.h.

◆ lhs_type

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::Poisson< FieldLHS, FieldRHS >::lhs_type

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, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::MeshType = typename FieldRHS::Mesh_t

Definition at line 44 of file FEMPoissonSolver.h.

◆ MField_t

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

Definition at line 21 of file Poisson.h.

◆ PCGSolverAlgorithm_t

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::PCGSolverAlgorithm_t
Initial value:

Definition at line 47 of file FEMPoissonSolver.h.

◆ QuadratureType

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::QuadratureType = GaussJacobiQuadrature<Tlhs, QuadNumNodes, ElementType>

Definition at line 56 of file FEMPoissonSolver.h.

◆ rhs_type

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::Poisson< FieldLHS, FieldRHS >::rhs_type

Definition at line 25 of file Poisson.h.

◆ Tlhs

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
using ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::Tlhs = typename FieldLHS::value_type
private

Definition at line 39 of file FEMPoissonSolver.h.

◆ Trhs

using ippl::Poisson< FieldLHS, FieldLHS >::Trhs
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

◆ FEMPoissonSolver() [1/2]

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::FEMPoissonSolver ( )
inline

Definition at line 61 of file FEMPoissonSolver.h.

References Dim, lagrangeSpace_m, quadrature_m, and refElement_m.

◆ FEMPoissonSolver() [2/2]

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::FEMPoissonSolver ( lhs_type & lhs,
rhs_type & rhs )
inline

Definition at line 69 of file FEMPoissonSolver.h.

References IpplTimings::getTimer(), lagrangeSpace_m, quadrature_m, refElement_m, setDefaultParameters(), IpplTimings::startTimer(), and IpplTimings::stopTimer().

Here is the call graph for this function:

Member Function Documentation

◆ getAvg()

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
Tlhs ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::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 199 of file FEMPoissonSolver.h.

References lagrangeSpace_m, and ippl::Poisson< FieldLHS, FieldLHS >::lhs_mp.

◆ 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, unsigned Order = 1, unsigned QuadNumNodes = 5>
int ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::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 176 of file FEMPoissonSolver.h.

References pcg_algo_m.

◆ getL2Error()

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
template<typename F>
Tlhs ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::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 189 of file FEMPoissonSolver.h.

References lagrangeSpace_m, and ippl::Poisson< FieldLHS, FieldLHS >::lhs_mp.

◆ getResidue()

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
Tlhs ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::getResidue ( ) const
inline

Query the residue

Returns
Residue norm from last solve

Definition at line 182 of file FEMPoissonSolver.h.

References pcg_algo_m.

◆ 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, unsigned Order = 1, unsigned QuadNumNodes = 5>
virtual void ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::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 214 of file FEMPoissonSolver.h.

References ippl::Poisson< FieldLHS, FieldLHS >::params_m.

Referenced by FEMPoissonSolver().

Here is the caller 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]

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
void ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::setRhs ( rhs_type & rhs)
inlineoverride

Definition at line 90 of file FEMPoissonSolver.h.

References lagrangeSpace_m, and ippl::Poisson< FieldLHS, FieldRHS >::setRhs().

Here is the call graph for this function:

◆ setRhs() [2/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.

◆ solve()

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
void ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::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 106 of file FEMPoissonSolver.h.

References ippl::CONSTANT_FACE, ippl::get(), IpplTimings::getTimer(), ippl::Poisson< FieldLHS, FieldRHS >::GRAD, ippl::grad(), ippl::Poisson< FieldLHS, FieldLHS >::grad_mp, lagrangeSpace_m, ippl::Poisson< FieldLHS, FieldLHS >::lhs_mp, ippl::Poisson< FieldLHS, FieldLHS >::params_m, pcg_algo_m, refElement_m, ippl::Poisson< FieldLHS, FieldLHS >::rhs_mp, solve(), IpplTimings::startTimer(), and IpplTimings::stopTimer().

Referenced by solve().

Here is the call graph for this function:
Here is the caller 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, unsigned Order = 1, unsigned QuadNumNodes = 5>
unsigned ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::Dim = FieldLHS::dim
staticconstexprprivate

Definition at line 38 of file FEMPoissonSolver.h.

Referenced by FEMPoissonSolver().

◆ grad_mp

◆ lagrangeSpace_m

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
LagrangeType ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::lagrangeSpace_m
protected

◆ lhs_mp

◆ params_m

◆ pcg_algo_m

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
PCGSolverAlgorithm_t ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::pcg_algo_m
protected

Definition at line 212 of file FEMPoissonSolver.h.

Referenced by getIterationCount(), getResidue(), and solve().

◆ quadrature_m

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
QuadratureType ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::quadrature_m
protected

Definition at line 220 of file FEMPoissonSolver.h.

Referenced by FEMPoissonSolver(), and FEMPoissonSolver().

◆ refElement_m

template<typename FieldLHS, typename FieldRHS = FieldLHS, unsigned Order = 1, unsigned QuadNumNodes = 5>
ElementType ippl::FEMPoissonSolver< FieldLHS, FieldRHS, Order, QuadNumNodes >::refElement_m
protected

Definition at line 219 of file FEMPoissonSolver.h.

Referenced by FEMPoissonSolver(), FEMPoissonSolver(), and solve().

◆ rhs_mp


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