WarpX
Loading...
Searching...
No Matches
CopyParticleAttribs.H
Go to the documentation of this file.
1/* Copyright 2020 Andrew Myers
2 *
3 * This file is part of WarpX.
4 *
5 * License: BSD-3-Clause-LBNL
6 */
7#ifndef WARPX_PARTICLES_PUSHER_COPYPARTICLEATTRIBS_H_
8#define WARPX_PARTICLES_PUSHER_COPYPARTICLEATTRIBS_H_
9
11
12#include <AMReX_REAL.H>
13
14#include <limits>
15
16
22{
24
25 const amrex::ParticleReal* AMREX_RESTRICT uxp = nullptr;
26 const amrex::ParticleReal* AMREX_RESTRICT uyp = nullptr;
27 const amrex::ParticleReal* AMREX_RESTRICT uzp = nullptr;
28
29 amrex::ParticleReal* AMREX_RESTRICT xpold = nullptr;
30 amrex::ParticleReal* AMREX_RESTRICT ypold = nullptr;
31 amrex::ParticleReal* AMREX_RESTRICT zpold = nullptr;
32
33 amrex::ParticleReal* AMREX_RESTRICT uxpold = nullptr;
34 amrex::ParticleReal* AMREX_RESTRICT uypold = nullptr;
35 amrex::ParticleReal* AMREX_RESTRICT uzpold = nullptr;
36
37 CopyParticleAttribs () = default;
38
47 const WarpXParticleContainer& /*pc*/,
48 WarpXParIter& a_pti,
49 long a_offset = 0) noexcept
50 {
51 const auto& attribs = a_pti.GetAttribs();
52
53 uxp = attribs[PIdx::ux].dataPtr() + a_offset;
54 uyp = attribs[PIdx::uy].dataPtr() + a_offset;
55 uzp = attribs[PIdx::uz].dataPtr() + a_offset;
56
57#if (AMREX_SPACEDIM >= 2)
58 xpold = a_pti.GetAttribs("x_n_btd").dataPtr();
59#endif
60#if defined(WARPX_DIM_3D) || defined(WARPX_DIM_RZ)
61 ypold = a_pti.GetAttribs("y_n_btd").dataPtr();
62#endif
63 zpold = a_pti.GetAttribs("z_n_btd").dataPtr();
64 uxpold = a_pti.GetAttribs("ux_n_btd").dataPtr();
65 uypold = a_pti.GetAttribs("uy_n_btd").dataPtr();
66 uzpold = a_pti.GetAttribs("uz_n_btd").dataPtr();
67
69 }
70
75 void operator() (const long i) const noexcept
76 {
77 AMREX_ASSERT(uxp != nullptr);
78 AMREX_ASSERT(uyp != nullptr);
79 AMREX_ASSERT(uzp != nullptr);
80
81#if (AMREX_SPACEDIM >= 2)
82 AMREX_ASSERT(xpold != nullptr);
83#endif
84#if defined(WARPX_DIM_3D) || defined(WARPX_DIM_RZ)
85 AMREX_ASSERT(ypold != nullptr);
86#endif
87 AMREX_ASSERT(zpold != nullptr);
88
89 AMREX_ASSERT(uxpold != nullptr);
90 AMREX_ASSERT(uypold != nullptr);
91 AMREX_ASSERT(uzpold != nullptr);
92
93 amrex::ParticleReal x, y, z;
94 m_get_position(i, x, y, z);
95
96#if (AMREX_SPACEDIM >= 2)
97 xpold[i] = x;
98#endif
99#if defined(WARPX_DIM_3D) || defined(WARPX_DIM_RZ)
100 ypold[i] = y;
101#endif
102 zpold[i] = z;
103
104 uxpold[i] = uxp[i];
105 uypold[i] = uyp[i];
106 uzpold[i] = uzp[i];
107 }
108};
109
110#endif // WARPX_PARTICLES_PUSHER_COPYPARTICLEATTRIBS_H_
#define AMREX_ASSERT(EX)
#define AMREX_FORCE_INLINE
#define AMREX_RESTRICT
#define AMREX_GPU_HOST_DEVICE
Definition WarpXParticleContainer.H:112
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition WarpXParticleContainer.H:120
Definition WarpXParticleContainer.H:195
amrex::ParticleReal *AMREX_RESTRICT uxpold
Definition CopyParticleAttribs.H:33
const amrex::ParticleReal *AMREX_RESTRICT uxp
Definition CopyParticleAttribs.H:25
GetParticlePosition< PIdx > m_get_position
Definition CopyParticleAttribs.H:23
const amrex::ParticleReal *AMREX_RESTRICT uyp
Definition CopyParticleAttribs.H:26
amrex::ParticleReal *AMREX_RESTRICT ypold
Definition CopyParticleAttribs.H:30
CopyParticleAttribs(const WarpXParticleContainer &, WarpXParIter &a_pti, long a_offset=0) noexcept
Construct a new functor.
Definition CopyParticleAttribs.H:46
amrex::ParticleReal *AMREX_RESTRICT uzpold
Definition CopyParticleAttribs.H:35
amrex::ParticleReal *AMREX_RESTRICT uypold
Definition CopyParticleAttribs.H:34
amrex::ParticleReal *AMREX_RESTRICT xpold
Definition CopyParticleAttribs.H:29
amrex::ParticleReal *AMREX_RESTRICT zpold
Definition CopyParticleAttribs.H:31
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator()(const long i) const noexcept
copy the position and momentum of particle i to the temporary data holder
Definition CopyParticleAttribs.H:75
const amrex::ParticleReal *AMREX_RESTRICT uzp
Definition CopyParticleAttribs.H:27
CopyParticleAttribs()=default
Functor that can be used to extract the positions of the macroparticles inside a ParallelFor kernel.
Definition GetAndSetPosition.H:75
@ uz
Definition WarpXParticleContainer.H:70
@ uy
Definition WarpXParticleContainer.H:70
@ ux
Definition WarpXParticleContainer.H:70