OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
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
7
8template <unsigned Dim>
10
11template <typename T, unsigned Dim>
13
14template <unsigned Dim>
16
17template <unsigned Dim>
19
20template <typename T, unsigned Dim, class... ViewArgs>
22
23template <unsigned Dim, class... ViewArgs>
24using Field_t = Field<double, Dim, ViewArgs...>;
25
26template <typename T, unsigned 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 }
47
49 }
50
51private:
55 std::array<bool, Dim> decomp_m;
61
62public:
64 return E_m;
65 }
67 E_m = E;
68 }
69
71 return rho_m;
72 }
73 void setRho(Field_t<Dim>& rho) {
74 rho_m = rho;
75 }
76
78 return phi_m;
79 }
80 void setPhi(Field<T, Dim>& phi) {
81 phi_m = phi;
82 }
83
85 return hr_m;
86 }
87 void setHr(const Vector_t<double, Dim>& hr) {
88 hr_m = hr;
89 }
90
92 return rmin_m;
93 }
94 void setRMin(const Vector_t<double, Dim>& rmin) {
95 rmin_m = rmin;
96 }
97
99 return rmax_m;
100 }
101 void setRMax(const Vector_t<double, Dim>& rmax) {
102 rmax_m = rmax;
103 }
104
105 std::array<bool, Dim> getDecomp() {
106 return decomp_m;
107 }
108 void setDecomp(std::array<bool, Dim> decomp) {
109 decomp_m = decomp;
110 }
111
113 return mesh_m;
114 }
115 void setMesh(Mesh_t<Dim>& mesh) {
116 mesh_m = mesh;
117 }
118
120 return fl_m;
121 }
122 void setFL(std::shared_ptr<FieldLayout_t<Dim>>& fl) {
123 fl_m = fl;
124 }
125
126 void initializeFields(std::string stype_m = "") {
127
128 Inform m ("initializeFields ");
129 m << "mesh spacing = " << mesh_m.getMeshSpacing() << endl;
130 m << "origin = " << mesh_m.getOrigin() << endl;
131 m << "FL = " << fl_m << endl;
132
133 E_m.initialize(mesh_m, fl_m);
134 rho_m.initialize(mesh_m, fl_m);
135 if (stype_m == "CG") {
137 }
138
139 }
140};
141
142#endif
typename ippl::ParticleSpatialLayout< T, Dim, Mesh_t< Dim > > PLayout_t
typename Mesh_t< Dim >::DefaultCentering Centering_t
Inform & endl(Inform &inf)
Definition: Inform.cpp:42
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
void initialize(Mesh_t &, Layout_t &, int nghost=1)
Definition: Field.hpp:49
Definition: Centering.h:30
Definition: Inform.h:40
constexpr unsigned Dim