10 #ifndef IMPACTX_DISTRIBUTION_WATERBAG
11 #define IMPACTX_DISTRIBUTION_WATERBAG
37 amrex::ParticleReal lambdax,
38 amrex::ParticleReal lambday,
39 amrex::ParticleReal lambdat,
40 amrex::ParticleReal lambdapx,
41 amrex::ParticleReal lambdapy,
42 amrex::ParticleReal lambdapt,
43 amrex::ParticleReal muxpx=0.0,
44 amrex::ParticleReal muypy=0.0,
45 amrex::ParticleReal mutpt=0.0
59 void initialize ([[maybe_unused]] amrex::ParticleReal bunch_charge, [[maybe_unused]]
RefPart const & ref)
84 amrex::ParticleReal & AMREX_RESTRICT x,
85 amrex::ParticleReal & AMREX_RESTRICT y,
86 amrex::ParticleReal & AMREX_RESTRICT t,
87 amrex::ParticleReal & AMREX_RESTRICT px,
88 amrex::ParticleReal & AMREX_RESTRICT py,
89 amrex::ParticleReal & AMREX_RESTRICT pt,
93 using namespace amrex::literals;
96 amrex::ParticleReal ln1,
norm,u1,u2;
97 amrex::ParticleReal g1,g2,g3,g4,g5,g6;
98 amrex::ParticleReal root,a1,a2;
103 ln1 = std::sqrt(-2_prt*std::log(u1));
104 g1 = ln1*std::cos(2_prt*
pi*u2);
105 g2 = ln1*std::sin(2_prt*
pi*u2);
108 ln1 = std::sqrt(-2_prt*std::log(u1));
109 g3 = ln1*std::cos(2_prt*
pi*u2);
110 g4 = ln1*std::sin(2_prt*
pi*u2);
113 ln1 = std::sqrt(-2_prt*std::log(u1));
114 g5 = ln1*std::cos(2_prt*
pi*u2);
115 g6 = ln1*std::sin(2_prt*
pi*u2);
118 norm = std::sqrt(g1*g1+g2*g2+g3*g3+g4*g4+g5*g5+g6*g6);
128 u2 = std::sqrt(8_prt)*std::pow(u1,1_prt/6_prt);
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
static constexpr amrex::Real pi
constexpr std::enable_if_t< std::is_floating_point_v< T >, T > pi()
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T norm(const GpuComplex< T > &a_z) noexcept
@ t
fixed t as the independent variable
Definition: ReferenceParticle.H:30
Definition: Waterbag.H:26
amrex::ParticleReal m_lambdaX
Definition: Waterbag.H:155
amrex::ParticleReal m_muypy
Definition: Waterbag.H:157
amrex::ParticleReal m_muxpx
related momentum axis intercepts of the phase space ellipse
Definition: Waterbag.H:157
amrex::ParticleReal m_mutpt
Definition: Waterbag.H:157
void finalize()
Definition: Waterbag.H:68
Waterbag(amrex::ParticleReal lambdax, amrex::ParticleReal lambday, amrex::ParticleReal lambdat, amrex::ParticleReal lambdapx, amrex::ParticleReal lambdapy, amrex::ParticleReal lambdapt, amrex::ParticleReal muxpx=0.0, amrex::ParticleReal muypy=0.0, amrex::ParticleReal mutpt=0.0)
Definition: Waterbag.H:36
amrex::ParticleReal m_lambdaPt
Definition: Waterbag.H:156
amrex::ParticleReal m_lambdaT
Definition: Waterbag.H:155
amrex::ParticleReal m_lambdaPx
related position axis intercepts (length) of the phase space ellipse
Definition: Waterbag.H:156
amrex::ParticleReal m_lambdaPy
Definition: Waterbag.H:156
amrex::ParticleReal m_lambdaY
Definition: Waterbag.H:155
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator()(amrex::ParticleReal &AMREX_RESTRICT x, amrex::ParticleReal &AMREX_RESTRICT y, amrex::ParticleReal &AMREX_RESTRICT t, amrex::ParticleReal &AMREX_RESTRICT px, amrex::ParticleReal &AMREX_RESTRICT py, amrex::ParticleReal &AMREX_RESTRICT pt, amrex::RandomEngine const &engine) const
Definition: Waterbag.H:83
void initialize([[maybe_unused]] amrex::ParticleReal bunch_charge, [[maybe_unused]] RefPart const &ref)
Definition: Waterbag.H:59