OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
FieldContainer.hpp
Go to the documentation of this file.
1#ifndef OPAL_FIELD_CONTAINER_H
2#define OPAL_FIELD_CONTAINER_H
3
4#include <memory>
5
6#include "Manager/BaseManager.h"
7
8template <unsigned Dim>
9using Mesh_t = ippl::UniformCartesian<double, Dim>;
10
11template <typename T, unsigned Dim>
12using PLayout_t = typename ippl::ParticleSpatialLayout<T, Dim, Mesh_t<Dim>>;
13
14template <unsigned Dim>
16
17template <unsigned Dim>
18using FieldLayout_t = ippl::FieldLayout<Dim>;
19
20template <typename T, unsigned Dim, class... ViewArgs>
21using Field = ippl::Field<T, Dim, Mesh_t<Dim>, Centering_t<Dim>, ViewArgs...>;
22
23template <unsigned Dim, class... ViewArgs>
24using Field_t = Field<double, Dim, ViewArgs...>;
25
26template <typename T, unsigned Dim>
27using Vector_t = ippl::Vector<T, Dim>;
28
29template <typename T, unsigned Dim, class... ViewArgs>
30using VField_t = Field<Vector_t<T, Dim>, Dim, ViewArgs...>;
31
32// Define the FieldsContainer class
33template <typename T, unsigned Dim = 3>
35public:
38 std::array<bool, Dim> decomp, ippl::NDIndex<Dim> domain, Vector_t<T, Dim> origin,
39 bool isAllPeriodic)
40 : hr_m(hr),
41 rmin_m(rmin),
42 rmax_m(rmax),
43 decomp_m(decomp),
44 mesh_m(domain, hr, origin),
45 fl_m(MPI_COMM_WORLD, domain, decomp, isAllPeriodic) {}
46
48
49private:
53 std::array<bool, Dim> decomp_m;
59
60public:
61 VField_t<T, Dim>& getE() { return E_m; }
62 void setE(VField_t<T, Dim>& E) { E_m = E; }
63
64 Field_t<Dim>& getRho() { return rho_m; }
65 void setRho(Field_t<Dim>& rho) { rho_m = rho; }
66
67 Field<T, Dim>& getPhi() { return phi_m; }
68 void setPhi(Field<T, Dim>& phi) { phi_m = phi; }
69
71 void setHr(const Vector_t<double, Dim>& hr) { hr_m = hr; }
72
74 void setRMin(const Vector_t<double, Dim>& rmin) { rmin_m = rmin; }
75
77 void setRMax(const Vector_t<double, Dim>& rmax) { rmax_m = rmax; }
78
79 std::array<bool, Dim> getDecomp() { return decomp_m; }
80 void setDecomp(std::array<bool, Dim> decomp) { decomp_m = decomp; }
81
82 Mesh_t<Dim>& getMesh() { return mesh_m; }
83 void setMesh(Mesh_t<Dim>& mesh) { mesh_m = mesh; }
84
86 void setFL(std::shared_ptr<FieldLayout_t<Dim>>& fl) { fl_m = fl; }
87
88 void initializeFields(std::string stype_m = "") {
89 Inform m("FieldContainer::initializeFields");
90 m << level3 << "Mesh spacing = " << mesh_m.getMeshSpacing() << endl;
91 m << level3 << "Origin = " << mesh_m.getOrigin() << endl;
92 m << level3 << "FL = " << fl_m << endl;
93
94 E_m.initialize(mesh_m, fl_m);
95 rho_m.initialize(mesh_m, fl_m);
96 m << level3 << "E_m, rho_m field initialized." << endl;
97 if (stype_m == "CG") {
98 phi_m.initialize(mesh_m, fl_m);
99 m << level3 << "Phi field initialized for " << stype_m << endl;
100 }
101 }
102};
103
104#endif
ippl::Vector< T, Dim > Vector_t
Field< Vector_t< T, Dim >, Dim, ViewArgs... > VField_t
typename ippl::ParticleSpatialLayout< T, Dim, Mesh_t< Dim > > PLayout_t
Field< double, Dim, ViewArgs... > Field_t
ippl::FieldLayout< Dim > FieldLayout_t
ippl::Vector< T, Dim > Vector_t
typename Mesh_t< Dim >::DefaultCentering Centering_t
ippl::Field< T, Dim, Mesh_t< Dim >, Centering_t< Dim >, ViewArgs... > Field
ippl::UniformCartesian< double, Dim > Mesh_t
double T
Definition OPALTypes.h:8
constexpr unsigned Dim
Definition OPALTypes.h:7
ippl::FieldLayout< Dim > FieldLayout_t
Definition PBunchDefs.h:25
ippl::Field< double, Dim, ViewArgs... > Field_t
Definition PBunchDefs.h:28
ippl::Field< ippl::Vector< T, Dim >, Dim, ViewArgs... > VField_t
Definition PBunchDefs.h:31
ippl::UniformCartesian< double, 3 > Mesh_t
Definition PBunchDefs.h:18
Vector_t< double, Dim > rmax_m
void setMesh(Mesh_t< Dim > &mesh)
void setE(VField_t< T, Dim > &E)
FieldContainer(Vector_t< T, Dim > &hr, Vector_t< T, Dim > &rmin, Vector_t< T, Dim > &rmax, std::array< bool, Dim > decomp, ippl::NDIndex< Dim > domain, Vector_t< T, Dim > origin, bool isAllPeriodic)
Vector_t< double, Dim > & getRMin()
Vector_t< double, Dim > hr_m
void initializeFields(std::string stype_m="")
Field< T, Dim > & getPhi()
std::array< bool, Dim > getDecomp()
void setRho(Field_t< Dim > &rho)
std::array< bool, Dim > decomp_m
Vector_t< double, Dim > & getRMax()
FieldLayout_t< Dim > & getFL()
void setFL(std::shared_ptr< FieldLayout_t< Dim > > &fl)
Field_t< Dim > & getRho()
Field< T, Dim > phi_m
void setRMax(const Vector_t< double, Dim > &rmax)
void setDecomp(std::array< bool, Dim > decomp)
void setHr(const Vector_t< double, Dim > &hr)
void setPhi(Field< T, Dim > &phi)
void setRMin(const Vector_t< double, Dim > &rmin)
Mesh_t< Dim > mesh_m
Field_t< Dim > rho_m
Mesh_t< Dim > & getMesh()
FieldLayout_t< Dim > fl_m
VField_t< T, Dim > & getE()
Vector_t< double, Dim > & getHr()
VField_t< T, Dim > E_m
Vector_t< double, Dim > rmin_m