10#ifndef IMPACTX_DISTRIBUTION_THERMAL
11#define IMPACTX_DISTRIBUTION_THERMAL
35 using namespace amrex::literals;
63 static inline std::unique_ptr<amrex::Gpu::DeviceVector<amrex::ParticleReal>>
m_d_cdf1;
64 static inline std::unique_ptr<amrex::Gpu::DeviceVector<amrex::ParticleReal>>
m_d_cdf2;
105 m_Cintensity = q_e*bunch_charge/(powi<2>(bg)*Erest*ep0);
125 std::vector<amrex::ParticleReal> cdf1(
m_nbins+1);
126 std::vector<amrex::ParticleReal> cdf2(
m_nbins+1);
144 for (
int n = 0; n <
m_nbins; ++n) {
150 m_d_cdf1 = std::make_unique<amrex::Gpu::DeviceVector<amrex::ParticleReal>>(
m_nbins+1);
151 m_d_cdf2 = std::make_unique<amrex::Gpu::DeviceVector<amrex::ParticleReal>>(
m_nbins+1);
153 cdf1.begin(), cdf1.end(),
156 cdf2.begin(), cdf2.end(),
192 for (
int j=0; j < steps; ++j)
229 m_phi1 = phi1 + f1/(4.0_prt*
pi*reval) - f1/(4.0_prt*
pi*r);
230 m_phi2 = phi2 + f2/(4.0_prt*
pi*reval) - f2/(4.0_prt*
pi*r);;
379 ln1 = std::sqrt(-2_prt*std::log(u1));
380 g1 = ln1 * std::cos(2_prt*
pi*u2);
381 g2 = ln1 * std::sin(2_prt*
pi*u2);
384 ln1 = std::sqrt(-2_prt*std::log(u1));
385 g3 = ln1 * std::cos(2_prt*
pi*u2);
386 g4 = ln1 * std::sin(2_prt*
pi*u2);
389 ln1 = std::sqrt(-2_prt*std::log(u1));
390 g5 = ln1 * std::cos(2_prt*
pi*u2);
391 g6 = ln1 * std::sin(2_prt*
pi*u2);
395 px = std::sqrt(kT)*g4;
396 py = std::sqrt(kT)*g5;
397 pz = std::sqrt(kT)*g6;
400 norm = std::sqrt(g1*g1+g2*g2+g3*g3);
413 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:167
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal mass_MeV() const
Definition ReferenceParticle.H:183
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal charge_qe() const
Definition ReferenceParticle.H:277
void generate_radial_dist(amrex::ParticleReal bunch_charge, RefPart const &refpart)
Definition Thermal.H:89
amrex::ParticleReal m_bg
reference value of relativistic beta*gamma
Definition Thermal.H:56
amrex::ParticleReal m_phi2
potential generated by second population
Definition Thermal.H:47
void map1(amrex::ParticleReal const tau, amrex::ParticleReal &reval)
Definition Thermal.H:213
amrex::ParticleReal m_phi1
potential generated by first population
Definition Thermal.H:46
ThermalData(amrex::ParticleReal kin, amrex::ParticleReal T1in, amrex::ParticleReal T2in, amrex::ParticleReal p1in, amrex::ParticleReal p2in, amrex::ParticleReal win)
Definition Thermal.H:66
amrex::ParticleReal m_f1
cumulative distribution of first population
Definition Thermal.H:44
void map2(amrex::ParticleReal const tau, amrex::ParticleReal &reval)
Definition Thermal.H:236
amrex::ParticleReal * m_cdf2
tabulated cumulative distribution (second)
Definition Thermal.H:54
amrex::ParticleReal * m_cdf1
tabulated cumulative distribution (first)
Definition Thermal.H:53
amrex::ParticleReal m_Cintensity
space charge intensity parameter
Definition Thermal.H:55
static std::unique_ptr< amrex::Gpu::DeviceVector< amrex::ParticleReal > > m_d_cdf2
Definition Thermal.H:64
amrex::ParticleReal m_rmin
minimum r value for tabulated cdf
Definition Thermal.H:50
static constexpr amrex::ParticleReal rin
initial r value for numerical integration
Definition Thermal.H:40
void integrate(amrex::ParticleReal in, amrex::ParticleReal out, int steps)
Definition Thermal.H:176
static std::unique_ptr< amrex::Gpu::DeviceVector< amrex::ParticleReal > > m_d_cdf1
Definition Thermal.H:63
amrex::ParticleReal m_rmax
maximum r value for tabulated cdf
Definition Thermal.H:51
static constexpr amrex::ParticleReal tolerance
tolerance for matching condition
Definition Thermal.H:39
static constexpr int nsteps
number of radial steps for numerical integration
Definition Thermal.H:42
amrex::ParticleReal matched_scale_radius()
Definition Thermal.H:162
amrex::ParticleReal m_k
linear focusing strength (1/meters)
Definition Thermal.H:57
amrex::ParticleReal m_f2
cumulative distribution of second population
Definition Thermal.H:45
amrex::ParticleReal m_p2
normalization constant of second population
Definition Thermal.H:49
int m_nbins
number of radial bins for tabulated cdf
Definition Thermal.H:52
amrex::ParticleReal m_p1
normalization constant of first population
Definition Thermal.H:48
amrex::ParticleReal m_T1
temperature k*T of the primary (core) population
Definition Thermal.H:58
static constexpr amrex::ParticleReal rout
final r value for numerical integration
Definition Thermal.H:41
amrex::ParticleReal m_T2
temperature k*T of the secondary (halo) population
Definition Thermal.H:59
amrex::ParticleReal m_w
weight of the secondary (halo) population
Definition Thermal.H:60
void finalize()
Definition Thermal.H:335
Thermal(amrex::ParticleReal k, amrex::ParticleReal kT, amrex::ParticleReal kT_halo, amrex::ParticleReal normalize, amrex::ParticleReal normalize_halo, amrex::ParticleReal halo)
Definition Thermal.H:290
amrex::ParticleReal m_bg
reference value of relativistic beta*gamma
Definition Thermal.H:435
int m_nbins
number of radial bins for tabulated cdf
Definition Thermal.H:434
amrex::ParticleReal m_T1
linear focusing strength (1/meters)
Definition Thermal.H:429
void initialize(amrex::ParticleReal bunch_charge, RefPart const &ref)
Definition Thermal.H:314
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:353
amrex::ParticleReal m_rmin
relative weight of halo population
Definition Thermal.H:432
amrex::ParticleReal m_normalize
temperature of each particle population
Definition Thermal.H:430
amrex::ParticleReal m_T2
Definition Thermal.H:429
amrex::ParticleReal m_w
weight of the secondary (halo) population
Definition Thermal.H:436
amrex::ParticleReal const * m_cdf1
Definition Thermal.H:440
amrex::ParticleReal m_halo
normalization constant of first/second population
Definition Thermal.H:431
amrex::ParticleReal const * m_cdf2
non-owning pointer to device core CDF
Definition Thermal.H:441
amrex::ParticleReal m_rmax
maximum r value for tabulated cdf
Definition Thermal.H:433
amrex::ParticleReal m_normalize_halo
Definition Thermal.H:430
amrex::ParticleReal m_k
Definition Thermal.H:428