ImpactX
Loading...
Searching...
No Matches
InitDistribution.H
Go to the documentation of this file.
1/* Copyright 2022-2023 The Regents of the University of California, through Lawrence
2 * Berkeley National Laboratory (subject to receipt of any required
3 * approvals from the U.S. Dept. of Energy). All rights reserved.
4 *
5 * This file is part of ImpactX.
6 *
7 * Authors: Axel Huebl, Andrew Myers, Marco Garten
8 * License: BSD-3-Clause-LBNL
9 */
10#ifndef IMPACTX_INITIALIZATION_INITDISTRIBUTION_H
11#define IMPACTX_INITIALIZATION_INITDISTRIBUTION_H
12
16
17#include <AMReX_Extension.H> // for AMREX_RESTRICT
18#include <AMReX_REAL.H>
19
20#include <optional> // for std::optional
21#include <utility> // for std::move
22
23
25{
31 RefPart
32 read_reference_particle (amrex::ParmParse const & pp_dist);
33
40 read_distribution (amrex::ParmParse const & pp_dist);
41
47 Envelope
50 std::optional<amrex::ParticleReal> intensity = std::nullopt
51 );
52
66 template <typename T_Distribution>
131
194
195
223 void
225 amrex::ParmParse const & pp_dist,
227 amrex::ParticleReal& lambdapx,amrex::ParticleReal& lambdapy, amrex::ParticleReal& lambdapt,
232 );
233
234
261 void
263 amrex::ParmParse const & pp_dist,
265 amrex::ParticleReal& lambdapx,amrex::ParticleReal& lambdapy, amrex::ParticleReal& lambdapt,
270 );
271
272} // namespace impactx::initialization
273
274#endif // IMPACTX_INITIALIZATION_INITDISTRIBUTION_H
#define AMREX_FORCE_INLINE
#define AMREX_RESTRICT
#define AMREX_GPU_DEVICE
amrex_particle_real ParticleReal
amrex_long Long
Definition All.H:28
std::variant< Empty, Gaussian, Kurth4D, Kurth6D, KVdist, Thermal, Triangle, Semigaussian, Waterbag > KnownDistributions
Definition All.H:30
Definition AmrCoreData.cpp:18
void set_distribution_parameters_from_phase_space_inputs(amrex::ParmParse const &pp_dist, amrex::ParticleReal &lambdax, amrex::ParticleReal &lambday, amrex::ParticleReal &lambdat, amrex::ParticleReal &lambdapx, amrex::ParticleReal &lambdapy, amrex::ParticleReal &lambdapt, amrex::ParticleReal &muxpx, amrex::ParticleReal &muypy, amrex::ParticleReal &mutpt, amrex::ParticleReal &meanx, amrex::ParticleReal &meany, amrex::ParticleReal &meant, amrex::ParticleReal &meanpx, amrex::ParticleReal &meanpy, amrex::ParticleReal &meanpt, amrex::ParticleReal &dispx, amrex::ParticleReal &disppx, amrex::ParticleReal &dispy, amrex::ParticleReal &disppy)
Definition InitDistribution.cpp:503
RefPart read_reference_particle(amrex::ParmParse const &pp_dist)
Definition InitDistribution.cpp:40
distribution::KnownDistributions read_distribution(amrex::ParmParse const &pp_dist)
Definition InitDistribution.cpp:56
Envelope create_envelope(distribution::KnownDistributions const &distr, std::optional< amrex::ParticleReal > intensity=std::nullopt)
Definition InitDistribution.cpp:206
void set_distribution_parameters_from_twiss_inputs(amrex::ParmParse const &pp_dist, amrex::ParticleReal &lambdax, amrex::ParticleReal &lambday, amrex::ParticleReal &lambdat, amrex::ParticleReal &lambdapx, amrex::ParticleReal &lambdapy, amrex::ParticleReal &lambdapt, amrex::ParticleReal &muxpx, amrex::ParticleReal &muypy, amrex::ParticleReal &mutpt, amrex::ParticleReal &meanx, amrex::ParticleReal &meany, amrex::ParticleReal &meant, amrex::ParticleReal &meanpx, amrex::ParticleReal &meanpy, amrex::ParticleReal &meanpt, amrex::ParticleReal &dispx, amrex::ParticleReal &disppx, amrex::ParticleReal &dispy, amrex::ParticleReal &disppy)
Definition InitDistribution.cpp:423
Definition SpinvMF.H:25
amrex::ParticleReal *const AMREX_RESTRICT m_part_px
Definition InitDistribution.H:127
amrex::ParticleReal *const AMREX_RESTRICT m_part_pt
Definition InitDistribution.H:129
amrex::ParticleReal *const AMREX_RESTRICT m_part_t
Definition InitDistribution.H:126
amrex::ParticleReal *const AMREX_RESTRICT m_part_py
Definition InitDistribution.H:128
amrex::ParticleReal *const AMREX_RESTRICT m_part_y
Definition InitDistribution.H:125
amrex::ParticleReal *const AMREX_RESTRICT m_part_x
Definition InitDistribution.H:124
InitSingleParticleData(InitSingleParticleData const &)=default
InitSingleParticleData(InitSingleParticleData &&)=default
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void operator()(amrex::Long i, amrex::RandomEngine const &engine) const
Definition InitDistribution.H:106
InitSingleParticleData(T_Distribution distribution, amrex::ParticleReal *AMREX_RESTRICT part_x, amrex::ParticleReal *AMREX_RESTRICT part_y, amrex::ParticleReal *AMREX_RESTRICT part_t, amrex::ParticleReal *AMREX_RESTRICT part_px, amrex::ParticleReal *AMREX_RESTRICT part_py, amrex::ParticleReal *AMREX_RESTRICT part_pt)
Definition InitDistribution.H:79
T_Distribution const m_distribution
Definition InitDistribution.H:123
amrex::ParticleReal *const AMREX_RESTRICT m_part_sx
Definition InitDistribution.H:190
InitSingleParticleSpin(InitSingleParticleSpin const &)=default
amrex::ParticleReal *const AMREX_RESTRICT m_part_sz
Definition InitDistribution.H:192
distribution::SpinvMF const m_spinv
Definition InitDistribution.H:189
InitSingleParticleSpin(InitSingleParticleSpin &&)=default
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void operator()(amrex::Long i, amrex::RandomEngine const &engine) const
Definition InitDistribution.H:175
amrex::ParticleReal *const AMREX_RESTRICT m_part_sy
Definition InitDistribution.H:191
InitSingleParticleSpin(distribution::SpinvMF spinv, amrex::ParticleReal *AMREX_RESTRICT part_sx, amrex::ParticleReal *AMREX_RESTRICT part_sy, amrex::ParticleReal *AMREX_RESTRICT part_sz)
Definition InitDistribution.H:152