10 #ifndef IMPACTX_INTEGRATORS_H_
11 #define IMPACTX_INTEGRATORS_H_
34 template <
typename T_Element>
38 amrex::ParticleReal
const zin,
39 amrex::ParticleReal
const zout,
41 T_Element
const & element
44 using namespace amrex::literals;
47 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
48 amrex::ParticleReal
const tau1 =
dz/2.0_prt;
49 amrex::ParticleReal
const tau2 =
dz;
52 amrex::ParticleReal zeval = zin;
55 for(
int j=0; j <
nsteps; ++j)
57 element.map1(tau1,refpart,zeval);
58 element.map2(tau2,refpart,zeval);
59 element.map1(tau1,refpart,zeval);
77 template <
typename T_Element>
81 amrex::ParticleReal
const zin,
82 amrex::ParticleReal
const zout,
84 T_Element
const & element
87 using namespace amrex::literals;
90 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
91 amrex::ParticleReal
const tau1 =
dz/2.0_prt;
92 amrex::ParticleReal
const tau2 =
dz/2.0_prt;
93 amrex::ParticleReal
const tau3 =
dz;
96 amrex::ParticleReal zeval = zin;
99 for(
int j=0; j <
nsteps; ++j)
101 element.map1(tau1,refpart,zeval);
102 element.map2(tau2,refpart,zeval);
103 element.map3(tau3,refpart,zeval);
104 element.map2(tau2,refpart,zeval);
105 element.map1(tau1,refpart,zeval);
126 template <
typename T_Element>
130 amrex::ParticleReal
const zin,
131 amrex::ParticleReal
const zout,
133 T_Element
const & element
136 using namespace amrex::literals;
139 amrex::ParticleReal
const dz = (zout-zin)/
nsteps;
140 amrex::ParticleReal
const alpha = 1.0_prt -
pow(2.0_prt,1.0/3.0);
141 amrex::ParticleReal
const tau2 =
dz/(1.0_prt +
alpha);
142 amrex::ParticleReal
const tau1 = tau2/2.0_prt;
143 amrex::ParticleReal
const tau3 =
alpha*tau1;
144 amrex::ParticleReal
const tau4 = (
alpha - 1.0_prt)*tau2;
147 amrex::ParticleReal zeval = zin;
150 for (
int j=0; j <
nsteps; ++j)
152 element.map1(tau1,refpart,zeval);
153 element.map2(tau2,refpart,zeval);
154 element.map1(tau3,refpart,zeval);
155 element.map2(tau4,refpart,zeval);
156 element.map1(tau3,refpart,zeval);
157 element.map2(tau2,refpart,zeval);
158 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:128
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:36
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:79
Definition: ReferenceParticle.H:30