IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
Field.hpp
Go to the documentation of this file.
1//
2// Class Field
3// BareField with a mesh and configurable boundary conditions
4//
5//
6
7namespace ippl {
8 namespace detail {
9 template <typename T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
10 struct isExpression<Field<T, Dim, Mesh, Centering, ViewArgs...>> : std::true_type {};
11 } // namespace detail
12
14 // A default constructor, which should be used only if the user calls the
15 // 'initialize' function before doing anything else. There are no special
16 // checks in the rest of the Field methods to check that the Field has
17 // been properly initialized
18 template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
23
24 template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
25 Field<T, Dim, Mesh, Centering, ViewArgs...>
27 Field<T, Dim, Mesh, Centering, ViewArgs...> copy(*mesh_m, this->getLayout(),
28 this->getNghost());
29 Kokkos::deep_copy(copy.getView(), this->getView());
30
31 return copy;
32 }
33
35 // Constructors which include a Mesh object as argument
36 template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
38 : BareField_t(l, nghost)
39 , mesh_m(&m) {
40 for (unsigned int face = 0; face < 2 * Dim; ++face) {
41 bc_m[face] =
42 std::make_shared<NoBcFace<Field<T, Dim, Mesh, Centering, ViewArgs...>>>(face);
43 }
44 }
45
47 // Initialize the Field, also specifying a mesh
48 template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
50 int nghost) {
51 BareField_t::initialize(l, nghost);
52 mesh_m = &m;
53 for (unsigned int face = 0; face < 2 * Dim; ++face) {
54 bc_m[face] =
55 std::make_shared<NoBcFace<Field<T, Dim, Mesh, Centering, ViewArgs...>>>(face);
56 }
57 }
58
59 template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
61 typename Mesh::value_type dV = mesh_m->getCellVolume();
62 return this->sum() * dV;
63 }
64
65 template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
69
70 template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
74
75} // namespace ippl
constexpr unsigned Dim
Definition Archive.h:20
void initialize(Layout_t &l, int nghost=1)
void updateLayout(Layout_t &, int nghost=1)
Mesh_t * mesh_m
Definition Field.h:84
BConds_t bc_m
Definition Field.h:87
Mesh Mesh_t
Definition Field.h:23
BareField< T, Dim, ViewArgs... > BareField_t
Definition Field.h:26
FieldLayout< Dim > Layout_t
Definition Field.h:25
T value_type
Definition Mesh.h:17