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

#include <FFTPeriodicPoissonSolver.h>

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

Public Types

using Field_t = FieldRHS
 
using FFT_t = FFT< RCTransform, FieldRHS >
 
using Complex_t = typename FFT_t::Complex_t
 
using CxField_t = typename FFT_t::ComplexField
 
using Layout_t = FieldLayout< Dim >
 
using Vector_t = Vector< Trhs, Dim >
 
using Base = Poisson< FieldLHS, FieldRHS >
 
using scalar_type = typename FieldLHS::Mesh_t::value_type
 
using vector_type = typename FieldLHS::Mesh_t::vector_type
 
using lhs_type = FieldLHS
 
using rhs_type = FieldRHS
 
enum  OutputType { SOL = 0b01 , GRAD = 0b10 , SOL_AND_GRAD = 0b11 }
 
using Tlhs = typename FieldLHS::value_type
 
using grad_type = Field< Vector< Tlhs, Dim >, Dim, Mesh, Centering >
 

Public Member Functions

 FFTPeriodicPoissonSolver ()
 
 FFTPeriodicPoissonSolver (lhs_type &lhs, rhs_type &rhs)
 
void setRhs (rhs_type &rhs) override
 
void solve () override
 
template<typename T >
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 MField_tgetHessian ()
 
void setGradient (grad_type &grad)
 

Protected Member Functions

virtual void setDefaultParameters () override
 

Protected Attributes

ParameterList params_m
 
rhs_typerhs_mp = nullptr
 
lhs_typelhs_mp = nullptr
 
grad_typegrad_mp
 

Private Types

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

Private Member Functions

void initialize ()
 

Private Attributes

std::shared_ptr< FFT_tfft_mp
 
CxField_t fieldComplex_m
 
CxField_t tempFieldComplex_m
 
NDIndex< Dimdomain_m
 
std::shared_ptr< Layout_tlayoutComplex_mp
 

Static Private Attributes

static constexpr unsigned Dim = FieldLHS::dim
 

Detailed Description

template<typename FieldLHS, typename FieldRHS>
class ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >

Definition at line 23 of file FFTPeriodicPoissonSolver.h.

Member Typedef Documentation

◆ Base

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

Definition at line 36 of file FFTPeriodicPoissonSolver.h.

◆ Centering

template<typename FieldLHS , typename FieldRHS >
typedef FieldLHS::Centering_t ippl::Poisson< FieldLHS, FieldRHS >::Centering
privateinherited

Definition at line 19 of file Poisson.h.

◆ Complex_t

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::Complex_t = typename FFT_t::Complex_t

Definition at line 31 of file FFTPeriodicPoissonSolver.h.

◆ CxField_t

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::CxField_t = typename FFT_t::ComplexField

Definition at line 32 of file FFTPeriodicPoissonSolver.h.

◆ FFT_t

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::FFT_t = FFT<RCTransform, FieldRHS>

Definition at line 30 of file FFTPeriodicPoissonSolver.h.

◆ Field_t

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::Field_t = FieldRHS

Definition at line 29 of file FFTPeriodicPoissonSolver.h.

◆ grad_type

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

Definition at line 29 of file Poisson.h.

◆ Layout_t

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::Layout_t = FieldLayout<Dim>

Definition at line 33 of file FFTPeriodicPoissonSolver.h.

◆ lhs_type

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

Definition at line 24 of file Poisson.h.

◆ Matrix_t

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

Definition at line 20 of file Poisson.h.

◆ Mesh

template<typename FieldLHS , typename FieldRHS >
typedef FieldLHS::Mesh_t ippl::Poisson< FieldLHS, FieldRHS >::Mesh
privateinherited

Definition at line 18 of file Poisson.h.

◆ mesh_type

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::mesh_type = typename FieldRHS::Mesh_t
private

Definition at line 26 of file FFTPeriodicPoissonSolver.h.

◆ MField_t

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

Definition at line 21 of file Poisson.h.

◆ rhs_type

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

Definition at line 25 of file Poisson.h.

◆ scalar_type

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::scalar_type = typename FieldLHS::Mesh_t::value_type

Definition at line 38 of file FFTPeriodicPoissonSolver.h.

◆ Tlhs

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

Definition at line 26 of file Poisson.h.

◆ Trhs

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::Trhs = typename FieldRHS::value_type
private

Definition at line 25 of file FFTPeriodicPoissonSolver.h.

◆ Vector_t

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::Vector_t = Vector<Trhs, Dim>

Definition at line 34 of file FFTPeriodicPoissonSolver.h.

◆ vector_type

template<typename FieldLHS , typename FieldRHS >
using ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::vector_type = typename FieldLHS::Mesh_t::vector_type

Definition at line 39 of file FFTPeriodicPoissonSolver.h.

Member Enumeration Documentation

◆ OutputType

template<typename FieldLHS , typename FieldRHS >
enum ippl::Poisson::OutputType
inherited

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

Enumerator
SOL 
GRAD 
SOL_AND_GRAD 

Definition at line 35 of file Poisson.h.

Constructor & Destructor Documentation

◆ FFTPeriodicPoissonSolver() [1/2]

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

Definition at line 41 of file FFTPeriodicPoissonSolver.h.

References ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::setDefaultParameters().

Here is the call graph for this function:

◆ FFTPeriodicPoissonSolver() [2/2]

template<typename FieldLHS , typename FieldRHS >
ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::FFTPeriodicPoissonSolver ( lhs_type lhs,
rhs_type rhs 
)
inline

Definition at line 49 of file FFTPeriodicPoissonSolver.h.

References ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::setDefaultParameters().

Here is the call graph for this function:

Member Function Documentation

◆ getHessian()

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

Get the Hessian matrix of the solution

Returns
Matrix field containing the Hessian of the lhs

Reimplemented in ippl::FFTOpenPoissonSolver< FieldLHS, FieldRHS >.

Definition at line 102 of file Poisson.h.

◆ initialize()

template<typename FieldLHS , typename FieldRHS >
void ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::initialize
private

Definition at line 17 of file FFTPeriodicPoissonSolver.hpp.

References ippl::FieldLayout< Dim >::comm, Dim, ippl::FieldLayout< Dim >::getDomain(), and ippl::FieldLayout< Dim >::isParallel().

Here is the call graph for this function:

◆ mergeParameters()

template<typename FieldLHS , typename FieldRHS >
void ippl::Poisson< FieldLHS, FieldRHS >::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.

References ippl::ParameterList::merge(), and ippl::Poisson< FieldLHS, FieldRHS >::params_m.

Here is the call graph for this function:

◆ setDefaultParameters()

template<typename FieldLHS , typename FieldRHS >
virtual void ippl::FFTPeriodicPoissonSolver< 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, FieldRHS >.

Definition at line 73 of file FFTPeriodicPoissonSolver.h.

References ippl::a2a, ippl::a2av, ippl::ParameterList::add(), ippl::p2p, ippl::p2p_pl, and ippl::Poisson< FieldLHS, FieldRHS >::params_m.

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

Here is the call graph for this function:

◆ setGradient()

template<typename FieldLHS , typename FieldRHS >
void ippl::Poisson< FieldLHS, FieldRHS >::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.

References ippl::grad(), and ippl::Poisson< FieldLHS, FieldRHS >::grad_mp.

Here is the call graph for this function:

◆ setLhs()

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

◆ setRhs()

template<typename FieldLHS , typename FieldRHS >
void ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::setRhs ( rhs_type rhs)
overridevirtual

Set the problem RHS

Parameters
rhsReference to problem RHS field

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

Definition at line 11 of file FFTPeriodicPoissonSolver.hpp.

References ippl::initialize().

Here is the call graph for this function:

◆ solve()

template<typename FieldLHS , typename FieldRHS >
void ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::solve ( )
overridevirtual

Solve the Poisson problem described by -laplace(lhs) = rhs

Implements ippl::Poisson< FieldLHS, FieldRHS >.

Definition at line 53 of file FFTPeriodicPoissonSolver.hpp.

References ippl::apply(), ippl::BACKWARD, Dim, ippl::FORWARD, ippl::getRangePolicy(), ippl::parallel_for(), and pi.

Here is the call graph for this function:

◆ updateParameter()

template<typename FieldLHS , typename FieldRHS >
template<typename T >
void ippl::Poisson< FieldLHS, FieldRHS >::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.

References ippl::Poisson< FieldLHS, FieldRHS >::params_m, and ippl::ParameterList::update().

Here is the call graph for this function:

◆ updateParameters()

template<typename FieldLHS , typename FieldRHS >
void ippl::Poisson< FieldLHS, FieldRHS >::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.

References ippl::Poisson< FieldLHS, FieldRHS >::params_m, and ippl::ParameterList::update().

Here is the call graph for this function:

Member Data Documentation

◆ Dim

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

Definition at line 24 of file FFTPeriodicPoissonSolver.h.

◆ domain_m

template<typename FieldLHS , typename FieldRHS >
NDIndex<Dim> ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::domain_m
private

Definition at line 69 of file FFTPeriodicPoissonSolver.h.

◆ fft_mp

template<typename FieldLHS , typename FieldRHS >
std::shared_ptr<FFT_t> ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::fft_mp
private

Definition at line 66 of file FFTPeriodicPoissonSolver.h.

◆ fieldComplex_m

template<typename FieldLHS , typename FieldRHS >
CxField_t ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::fieldComplex_m
private

Definition at line 67 of file FFTPeriodicPoissonSolver.h.

◆ grad_mp

template<typename FieldLHS , typename FieldRHS >
grad_type* ippl::Poisson< FieldLHS, FieldRHS >::grad_mp
protectedinherited

Definition at line 125 of file Poisson.h.

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

◆ layoutComplex_mp

template<typename FieldLHS , typename FieldRHS >
std::shared_ptr<Layout_t> ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::layoutComplex_mp
private

Definition at line 70 of file FFTPeriodicPoissonSolver.h.

◆ lhs_mp

template<typename FieldLHS , typename FieldRHS >
lhs_type* ippl::Poisson< FieldLHS, FieldRHS >::lhs_mp = nullptr
protectedinherited

◆ params_m

◆ rhs_mp

template<typename FieldLHS , typename FieldRHS >
rhs_type* ippl::Poisson< FieldLHS, FieldRHS >::rhs_mp = nullptr
protectedinherited

◆ tempFieldComplex_m

template<typename FieldLHS , typename FieldRHS >
CxField_t ippl::FFTPeriodicPoissonSolver< FieldLHS, FieldRHS >::tempFieldComplex_m
private

Definition at line 68 of file FFTPeriodicPoissonSolver.h.


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