10 #ifndef IMPACTX_INTEGRATORS_H_
11 #define IMPACTX_INTEGRATORS_H_
13 #include <ablastr/particles/IndexHandling.H>
22 template <
typename T_Element>
26 amrex::ParticleReal
const zin,
27 amrex::ParticleReal
const zout,
29 T_Element
const & element
32 using namespace amrex::literals;
35 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
36 amrex::ParticleReal
const tau1 =
dz/2.0_prt;
37 amrex::ParticleReal
const tau2 =
dz;
40 amrex::ParticleReal zeval = zin;
43 for(
int j=0; j <
nsteps; ++j)
45 element.map1(tau1,refpart,zeval);
46 element.map2(tau2,refpart,zeval);
47 element.map1(tau1,refpart,zeval);
51 template <
typename T_Element>
55 amrex::ParticleReal
const zin,
56 amrex::ParticleReal
const zout,
58 T_Element
const & element
61 using namespace amrex::literals;
64 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
65 amrex::ParticleReal
const tau1 =
dz/2.0_prt;
66 amrex::ParticleReal
const tau2 =
dz/2.0_prt;
67 amrex::ParticleReal
const tau3 =
dz;
70 amrex::ParticleReal zeval = zin;
73 for(
int j=0; j <
nsteps; ++j)
75 element.map1(tau1,refpart,zeval);
76 element.map2(tau2,refpart,zeval);
77 element.map3(tau3,refpart,zeval);
78 element.map2(tau2,refpart,zeval);
79 element.map1(tau1,refpart,zeval);
83 template <
typename T_Element>
87 amrex::ParticleReal
const zin,
88 amrex::ParticleReal
const zout,
90 T_Element
const & element
93 using namespace amrex::literals;
96 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
97 amrex::ParticleReal
const alpha = 1.0_prt -
pow(2.0_prt,1.0/3.0);
98 amrex::ParticleReal
const tau2 =
dz/(1.0_prt +
alpha);
99 amrex::ParticleReal
const tau1 = tau2/2.0_prt;
100 amrex::ParticleReal
const tau3 =
alpha*tau1;
101 amrex::ParticleReal
const tau4 = (
alpha - 1.0_prt)*tau2;
104 amrex::ParticleReal zeval = zin;
107 for (
int j=0; j <
nsteps; ++j)
109 element.map1(tau1,refpart,zeval);
110 element.map2(tau2,refpart,zeval);
111 element.map1(tau3,refpart,zeval);
112 element.map2(tau4,refpart,zeval);
113 element.map1(tau3,refpart,zeval);
114 element.map2(tau2,refpart,zeval);
115 element.map1(tau1,refpart,zeval);
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE GpuComplex< T > pow(const GpuComplex< T > &a_z, const T &a_y) noexcept
Definition: Integrators.H:20
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void symp4_integrate(RefPart &refpart, amrex::ParticleReal const zin, amrex::ParticleReal const zout, int const nsteps, T_Element const &element)
Definition: Integrators.H:85
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void symp2_integrate(RefPart &refpart, amrex::ParticleReal const zin, amrex::ParticleReal const zout, int const nsteps, T_Element const &element)
Definition: Integrators.H:24
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void symp2_integrate_split3(RefPart &refpart, amrex::ParticleReal const zin, amrex::ParticleReal const zout, int const nsteps, T_Element const &element)
Definition: Integrators.H:53
Definition: ReferenceParticle.H:30