10#ifndef IMPACTX_DISTRIBUTION_THERMAL
11#define IMPACTX_DISTRIBUTION_THERMAL
61 static inline std::unique_ptr<amrex::Gpu::DeviceVector<amrex::ParticleReal>>
m_d_cdf1;
62 static inline std::unique_ptr<amrex::Gpu::DeviceVector<amrex::ParticleReal>>
m_d_cdf2;
103 m_Cintensity = q_e*bunch_charge/(powi<2>(bg)*Erest*ep0);
123 std::vector<amrex::ParticleReal> cdf1(
m_nbins+1);
124 std::vector<amrex::ParticleReal> cdf2(
m_nbins+1);
142 for (
int n = 0; n <
m_nbins; ++n) {
148 m_d_cdf1 = std::make_unique<amrex::Gpu::DeviceVector<amrex::ParticleReal>>(
m_nbins+1);
149 m_d_cdf2 = std::make_unique<amrex::Gpu::DeviceVector<amrex::ParticleReal>>(
m_nbins+1);
151 cdf1.begin(), cdf1.end(),
154 cdf2.begin(), cdf2.end(),
190 for (
int j=0; j < steps; ++j)
227 m_phi1 = phi1 + f1/(4.0_prt*
pi*reval) - f1/(4.0_prt*
pi*r);
228 m_phi2 = phi2 + f2/(4.0_prt*
pi*reval) - f2/(4.0_prt*
pi*r);;
258 potential = std::pow(k*r,2)*0.5_prt + c1*phi1 + c2*phi2;
267 m_f1 = f1 +
tau*4_prt*
pi * std::pow(r,2)*Pdensity1;
268 m_f2 = f2 +
tau*4_prt*
pi * std::pow(r,2)*Pdensity2;
377 ln1 = std::sqrt(-2_prt*std::log(u1));
378 g1 = ln1 * std::cos(2_prt*
pi*u2);
379 g2 = ln1 * std::sin(2_prt*
pi*u2);
382 ln1 = std::sqrt(-2_prt*std::log(u1));
383 g3 = ln1 * std::cos(2_prt*
pi*u2);
384 g4 = ln1 * std::sin(2_prt*
pi*u2);
387 ln1 = std::sqrt(-2_prt*std::log(u1));
388 g5 = ln1 * std::cos(2_prt*
pi*u2);
389 g6 = ln1 * std::sin(2_prt*
pi*u2);
393 px = std::sqrt(kT)*g4;
394 py = std::sqrt(kT)*g5;
395 pz = std::sqrt(kT)*g6;
398 norm = std::sqrt(g1*g1+g2*g2+g3*g3);
411 int const off =
amrex::max(0,
int(ptr - cdf - 1));
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
amrex_particle_real ParticleReal
constexpr auto epsilon_0_v
void copyAsync(HostToDevice, InIter begin, InIter end, OutIter result) noexcept
static constexpr HostToDevice hostToDevice
void streamSynchronize() noexcept
constexpr T powi(T x) noexcept
__host__ __device__ T norm(const GpuComplex< T > &a_z) noexcept
__host__ __device__ ItType lower_bound(ItType first, ItType last, const ValType &val)
__host__ __device__ constexpr const T & max(const T &a, const T &b) noexcept
Definition CovarianceMatrixMath.H:25
@ t
fixed t as the independent variable
Definition ImpactXParticleContainer.H:38
Definition ReferenceParticle.H:33
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal beta_gamma() const
Definition ReferenceParticle.H:168
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal mass_MeV() const
Definition ReferenceParticle.H:184
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal charge_qe() const
Definition ReferenceParticle.H:278
void generate_radial_dist(amrex::ParticleReal bunch_charge, RefPart const &refpart)
Definition Thermal.H:87
amrex::ParticleReal m_bg
reference value of relativistic beta*gamma
Definition Thermal.H:54
amrex::ParticleReal m_phi2
potential generated by second population
Definition Thermal.H:45
void map1(amrex::ParticleReal const tau, amrex::ParticleReal &reval)
Definition Thermal.H:211
amrex::ParticleReal m_phi1
potential generated by first population
Definition Thermal.H:44
ThermalData(amrex::ParticleReal kin, amrex::ParticleReal T1in, amrex::ParticleReal T2in, amrex::ParticleReal p1in, amrex::ParticleReal p2in, amrex::ParticleReal win)
Definition Thermal.H:64
amrex::ParticleReal m_f1
cumulative distribution of first population
Definition Thermal.H:42
void map2(amrex::ParticleReal const tau, amrex::ParticleReal &reval)
Definition Thermal.H:234
amrex::ParticleReal * m_cdf2
tabulated cumulative distribution (second)
Definition Thermal.H:52
amrex::ParticleReal * m_cdf1
tabulated cumulative distribution (first)
Definition Thermal.H:51
amrex::ParticleReal m_Cintensity
space charge intensity parameter
Definition Thermal.H:53
static std::unique_ptr< amrex::Gpu::DeviceVector< amrex::ParticleReal > > m_d_cdf2
Definition Thermal.H:62
amrex::ParticleReal m_rmin
minimum r value for tabulated cdf
Definition Thermal.H:48
static constexpr amrex::ParticleReal rin
initial r value for numerical integration
Definition Thermal.H:38
void integrate(amrex::ParticleReal in, amrex::ParticleReal out, int steps)
Definition Thermal.H:174
static std::unique_ptr< amrex::Gpu::DeviceVector< amrex::ParticleReal > > m_d_cdf1
Definition Thermal.H:61
amrex::ParticleReal m_rmax
maximum r value for tabulated cdf
Definition Thermal.H:49
static constexpr amrex::ParticleReal tolerance
tolerance for matching condition
Definition Thermal.H:37
static constexpr int nsteps
number of radial steps for numerical integration
Definition Thermal.H:40
amrex::ParticleReal matched_scale_radius()
Definition Thermal.H:160
amrex::ParticleReal m_k
linear focusing strength (1/meters)
Definition Thermal.H:55
amrex::ParticleReal m_f2
cumulative distribution of second population
Definition Thermal.H:43
amrex::ParticleReal m_p2
normalization constant of second population
Definition Thermal.H:47
int m_nbins
number of radial bins for tabulated cdf
Definition Thermal.H:50
amrex::ParticleReal m_p1
normalization constant of first population
Definition Thermal.H:46
amrex::ParticleReal m_T1
temperature k*T of the primary (core) population
Definition Thermal.H:56
static constexpr amrex::ParticleReal rout
final r value for numerical integration
Definition Thermal.H:39
amrex::ParticleReal m_T2
temperature k*T of the secondary (halo) population
Definition Thermal.H:57
amrex::ParticleReal m_w
weight of the secondary (halo) population
Definition Thermal.H:58
void finalize()
Definition Thermal.H:333
Thermal(amrex::ParticleReal k, amrex::ParticleReal kT, amrex::ParticleReal kT_halo, amrex::ParticleReal normalize, amrex::ParticleReal normalize_halo, amrex::ParticleReal halo)
Definition Thermal.H:288
amrex::ParticleReal m_bg
reference value of relativistic beta*gamma
Definition Thermal.H:433
int m_nbins
number of radial bins for tabulated cdf
Definition Thermal.H:432
amrex::ParticleReal m_T1
linear focusing strength (1/meters)
Definition Thermal.H:427
void initialize(amrex::ParticleReal bunch_charge, RefPart const &ref)
Definition Thermal.H:312
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 Thermal.H:351
amrex::ParticleReal m_rmin
relative weight of halo population
Definition Thermal.H:430
amrex::ParticleReal m_normalize
temperature of each particle population
Definition Thermal.H:428
amrex::ParticleReal m_T2
Definition Thermal.H:427
amrex::ParticleReal m_w
weight of the secondary (halo) population
Definition Thermal.H:434
amrex::ParticleReal const * m_cdf1
Definition Thermal.H:438
amrex::ParticleReal m_halo
normalization constant of first/second population
Definition Thermal.H:429
amrex::ParticleReal const * m_cdf2
non-owning pointer to device core CDF
Definition Thermal.H:439
amrex::ParticleReal m_rmax
maximum r value for tabulated cdf
Definition Thermal.H:431
amrex::ParticleReal m_normalize_halo
Definition Thermal.H:428
amrex::ParticleReal m_k
Definition Thermal.H:426