10 #ifndef IMPACTX_INTEGRATORS_H_
11 #define IMPACTX_INTEGRATORS_H_
20 template <
typename T_Element>
24 amrex::ParticleReal
const zin,
25 amrex::ParticleReal
const zout,
27 T_Element
const & element
30 using namespace amrex::literals;
33 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
34 amrex::ParticleReal
const tau1 =
dz/2.0_prt;
35 amrex::ParticleReal
const tau2 =
dz;
38 amrex::ParticleReal zeval = zin;
41 for(
int j=0; j <
nsteps; ++j)
43 element.map1(tau1,refpart,zeval);
44 element.map2(tau2,refpart,zeval);
45 element.map1(tau1,refpart,zeval);
49 template <
typename T_Element>
53 amrex::ParticleReal
const zin,
54 amrex::ParticleReal
const zout,
56 T_Element
const & element
59 using namespace amrex::literals;
62 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
63 amrex::ParticleReal
const tau1 =
dz/2.0_prt;
64 amrex::ParticleReal
const tau2 =
dz/2.0_prt;
65 amrex::ParticleReal
const tau3 =
dz;
68 amrex::ParticleReal zeval = zin;
71 for(
int j=0; j <
nsteps; ++j)
73 element.map1(tau1,refpart,zeval);
74 element.map2(tau2,refpart,zeval);
75 element.map3(tau3,refpart,zeval);
76 element.map2(tau2,refpart,zeval);
77 element.map1(tau1,refpart,zeval);
81 template <
typename T_Element>
85 amrex::ParticleReal
const zin,
86 amrex::ParticleReal
const zout,
88 T_Element
const & element
91 using namespace amrex::literals;
94 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
95 amrex::ParticleReal
const alpha = 1.0_prt -
pow(2.0_prt,1.0/3.0);
96 amrex::ParticleReal
const tau2 =
dz/(1.0_prt +
alpha);
97 amrex::ParticleReal
const tau1 = tau2/2.0_prt;
98 amrex::ParticleReal
const tau3 =
alpha*tau1;
99 amrex::ParticleReal
const tau4 = (
alpha - 1.0_prt)*tau2;
102 amrex::ParticleReal zeval = zin;
105 for (
int j=0; j <
nsteps; ++j)
107 element.map1(tau1,refpart,zeval);
108 element.map2(tau2,refpart,zeval);
109 element.map1(tau3,refpart,zeval);
110 element.map2(tau4,refpart,zeval);
111 element.map1(tau3,refpart,zeval);
112 element.map2(tau2,refpart,zeval);
113 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:18
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:83
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:22
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:51
Definition: ReferenceParticle.H:30