PIC Core¶
grid.param¶
Definition of cell sizes and time step.
Our cells are defining a regular, cartesian grid. Our explicit FDTD field solvers define an upper bound for the time step value in relation to the cell size for convergence. Make sure to resolve important wavelengths of your simulation, e.g. shortest plasma wavelength and central laser wavelength both spatially and temporarily.
Units in reduced dimensions
In 2D3V simulations, the CELL_DEPTH_SI (Z) cell length is still used for normalization of densities, etc..
A 2D3V simulation in a cartesian PIC simulation such as ours only changes the degrees of freedom in motion for (macro) particles and all (field) information in z travels instantaneous, making the 2D3V simulation behave like the interaction of infinite “wire particles” in fields with perfect symmetry in Z.
-
namespace
picongpu
-
Variables
-
constexpr uint32_t picongpu
ABSORBER_CELLS
[3][2] = { {32, 32}, {32, 32}, {32, 32} } Defines the size of the absorbing zone (in cells)
unit: none
-
constexpr float_X picongpu
ABSORBER_STRENGTH
[3][2] = { {1.0e-3, 1.0e-3}, {1.0e-3, 1.0e-3}, {1.0e-3, 1.0e-3} } Define the strength of the absorber for any direction.
unit: none
-
constexpr float_64 picongpu
movePoint
= 0.9 When to start moving the co-moving window.
Slide point model: A virtual photon starts at t=0 at the lower end of the global simulation box in y-direction of the simulation. When it reaches movePoint % of the global simulation box, the co-moving window starts to move with the speed of light.
- Note
- global simulation area: there is one additional “hidden” row of gpus at the y-front, when you use the co-moving window. 1.0 would correspond to: start moving exactly when the above described “virtual photon” from the lower end of the box’ Y-axis reaches the beginning of this “hidden” row of GPUs.
-
namespace picongpu
SI
-
constexpr uint32_t picongpu
dimension.param¶
The spatial dimensionality of the simulation.
Defines
-
SIMDIM
Possible values: DIM3 for 3D3V and DIM2 for 2D3V.
-
namespace
picongpu
-
Variables
-
constexpr uint32_t picongpu
simDim
= SIMDIM
-
constexpr uint32_t picongpu
components.param¶
Select the laser profile and the field solver here.
Defines
-
ENABLE_CURRENT
enable (1) or disable (0) current calculation (deprecated)
-
namespace
picongpu
-
namespace
simulation_starter
Simulation Starter Selection: This value does usually not need to be changed.
Change only if you want to implement your own
SimulationHelper
(e.g.MySimulation
) class.- defaultPIConGPU : default PIConGPU configuration
-
namespace
laserProfile
Laser Profile Selection:
- laserNone : no laser init
- laserGaussianBeam : Gaussian beam (focusing)
- laserPulseFrontTilt : Gaussian beam with a tilted pulse envelope in ‘x’ direction
- laserWavepacket : wavepacket (Gaussian in time and space, not focusing)
- laserPlaneWave : a plane wave (Gaussian in time)
- laserPolynom : a polynomial laser envelope
Adjust the settings of the selected profile in laser.param
-
namespace
fieldSolver
Field Solver Selection:
- fieldSolverYee : standard Yee solver
- fieldSolverLehe: Num. Cherenkov free field solver in a chosen direction
- fieldSolverDirSplitting: Sentoku’s Directional Splitting Method
- fieldSolverNone: disable the vacuum update of E and B
For development purposes:
- fieldSolverYeeNative : generic version of fieldSolverYee (need more shared memory per GPU and is slow)
Adjust the settings of the selected field solver in fieldSolver.param
fieldSolver.param¶
Configure the selected field solver method.
You can set/modify Maxwell solver specific options in the section of each “FieldSolver”.
CurrentInterpolation is used to set a method performing the interpolate/assign operation from the generated currents of particle species to the electro-magnetic fields.
Allowed values are:
- None< simDim >:
- default for staggered grids/Yee-scheme
- updates E
- Binomial< simDim >: 2nd order Binomial filter
- smooths the current before assignment in staggered grid
- updates E & breaks local charge conservation slightly
- NoneDS< simDim >:
- experimental assignment for all-centered/directional splitting
- updates E & B at the same time
-
namespace
picongpu
-
-
namespace picongpu
fieldSolverDirSplitting
Typedefs
-
using
picongpu::fieldSolverDirSplitting::CurrentInterpolation = typedef currentInterpolation::NoneDS< simDim >
-
using
-
namespace picongpu
fieldSolverLehe
Lehe Solver The solver proposed by R.
Lehe et al in Phys. Rev. ST Accel. Beams 16, 021301 (2013)
Typedefs
-
using
picongpu::fieldSolverLehe::CherenkovFreeDir = typedef CherenkovFreeDirection_Y
Distinguish the direction where numerical Cherenkov Radiation by moving particles shall be suppressed.
-
using
picongpu::fieldSolverLehe::CurrentInterpolation = typedef currentInterpolation::None< simDim >
-
using
-
namespace picongpu
fieldSolverNone
Typedefs
-
using
picongpu::fieldSolverNone::CurrentInterpolation = typedef currentInterpolation::None< simDim >
-
using
-
namespace picongpu
fieldSolverYee
Typedefs
-
using
picongpu::fieldSolverYee::CurrentInterpolation = typedef currentInterpolation::None< simDim >
-
using
-
namespace picongpu
fieldSolverYeeNative
Typedefs
-
using
picongpu::fieldSolverYeeNative::CurrentInterpolation = typedef currentInterpolation::None< simDim >
-
using
-
namespace picongpu
density.param¶
Configure existing or define new normalized density profiles here.
During particle species creation in speciesInitialization.param, those profiles can be translated to spatial particle distributions.
-
namespace
picongpu
-
-
namespace picongpu
densityProfiles
Typedefs
-
using
picongpu::densityProfiles::Gaussian = typedef GaussianImpl< GaussianParam >
-
using
picongpu::densityProfiles::Homogenous = typedef HomogenousImpl
-
using
picongpu::densityProfiles::LinearExponential = typedef LinearExponentialImpl< LinearExponentialParam >
-
using
picongpu::densityProfiles::GaussianCloud = typedef GaussianCloudImpl< GaussianCloudParam >
-
using
picongpu::densityProfiles::SphereFlanks = typedef SphereFlanksImpl<SphereFlanksParam>
-
using
picongpu::densityProfiles::FromHDF5 = typedef FromHDF5Impl< FromHDF5Param >
-
using
picongpu::densityProfiles::FreeFormula = typedef FreeFormulaImpl< FreeFormulaFunctor >
Functions
-
picongpu::densityProfiles::PMACC_STRUCT(GaussianParam, ( PMACC_C_VALUE (float_X, gasFactor,-1.0))( PMACC_C_VALUE (float_X, gasPower, 4.0))( PMACC_C_VALUE (uint32_t, vacuumCellsY, 50))( PMACC_C_VALUE (float_64, gasCenterLeft_SI, 4.62e-5))(PMACC_C_VALUE(float_64, gasCenterRight_SI, 4.62e-5))(PMACC_C_VALUE(float_64, gasSigmaLeft_SI, 4.62e-5))(PMACC_C_VALUE(float_64, gasSigmaRight_SI, 4.62e-5)))
Profile Formula:
const float_X exponent = abs((y - gasCenter_SI) / gasSigma_SI);
const float_X density = exp(gasFactor * pow(exponent, gasPower));
takes
gasCenterLeft_SI for y < gasCenterLeft_SI
,gasCenterRight_SI for y > gasCenterRight_SI
, andexponent = float_X(0.0) for gasCenterLeft_SI < y < gasCenterRight_SI
-
picongpu::densityProfiles::PMACC_STRUCT(LinearExponentialParam, ( PMACC_C_VALUE (uint32_t, vacuumCellsY, 50))( PMACC_C_VALUE (float_64, gasYMax_SI, 1.0e-3))(PMACC_C_VALUE(float_64, gasA_SI, 1.0e-3))(PMACC_C_VALUE(float_64, gasD_SI, 1.0e-3))(PMACC_C_VALUE(float_64, gasB, 0.0)))
parameter for
LinearExponential
profile* Density Profile: /\ * / -,_ * linear / -,_ exponential * slope / | -,_ slope * MAX *
-
picongpu::densityProfiles::PMACC_STRUCT(GaussianCloudParam, ( PMACC_C_VALUE (float_X, gasFactor,-0.5))( PMACC_C_VALUE (float_X, gasPower, 2.0))( PMACC_C_VALUE (uint32_t, vacuumCellsY, 50))( PMACC_C_VECTOR_DIM (float_64, simDim, center_SI, 1.134e-5, 1.134e-5, 1.134e-5))(PMACC_C_VECTOR_DIM(float_64, simDim, sigma_SI, 7.0e-6, 7.0e-6, 7.0e-6)))
-
picongpu::densityProfiles::PMACC_STRUCT(SphereFlanksParam, ( PMACC_C_VALUE (uint32_t, vacuumCellsY, 50))( PMACC_C_VALUE (float_64, r_SI, 1.0e-3))(PMACC_C_VALUE(float_64, ri_SI, 0.0))(PMACC_C_VECTOR_DIM(float_64, simDim, center_SI, 8.0e-3, 8.0e-3, 8.0e-3))(PMACC_C_VALUE(float_64, exponent_SI, 1.0e3)))
The profile consists out of the composition of 3 1D profiles with the scheme: exponential increasing flank, constant sphere, exponential decreasing flank.
* ___ * 1D: _,./ \.,_ rho(r) * * 2D: ..,x,.. density: . low * .,xxx,. , middle * ..,x,.. x high (constant) *
-
picongpu::densityProfiles::PMACC_STRUCT(FromHDF5Param, ( PMACC_C_STRING (filename,"gas"))(PMACC_C_STRING(datasetName,"fields/e_chargeDensity"))(PMACC_C_VALUE(uint32_t, iteration, 0))( PMACC_C_VALUE (float_X, defaultDensity, 0.0)))
-
struct picongpu::densityProfiles
FreeFormulaFunctor
Public Functions
-
HDINLINE float_X picongpu::densityProfiles::FreeFormulaFunctor::operator()(const floatD_64 & position_SI, const float3_64 & cellSize_SI)
This formula uses SI quantities only.
The profile will be multiplied by BASE_DENSITY_SI.
- Return
- float_X density [normalized to 1.0]
- Parameters
position_SI
: total offset including all slides [meter]cellSize_SI
: cell sizes [meter]
-
-
using
-
namespace picongpu
SI
-
namespace picongpu
pusher.param¶
Configure particle pushers.
Those pushers can then be selected by a particle species in species.param and speciesDefinition.param
-
namespace
picongpu
-
-
namespace picongpu
particlePusherAxel
Enums
-
enum picongpu::particlePusherAxel
TrajectoryInterpolationType
Values:
-
picongpu::particlePusherAxel
LINEAR
= 1u
-
picongpu::particlePusherAxel
NONLINEAR
= 2u
-
picongpu::particlePusherAxel
Variables
-
constexpr TrajectoryInterpolationType picongpu::particlePusherAxel
TrajectoryInterpolation
= LINEAR
-
enum picongpu::particlePusherAxel
-
namespace picongpu
laser.param¶
Configure laser profiles.
-
namespace
picongpu
-
-
namespace picongpu
laser
Variables
-
constexpr uint32_t picongpu::laser
initPlaneY
= 0 cell from top where the laser is initialized
if
initPlaneY == 0
than the absorber are disabled. ifinitPlaneY > absorbercells negative Y
the negative absorber in y direction is enabledvalid ranges:
- initPlaneY == 0
- absorber cells negative Y < initPlaneY < cells in y direction of the top gpu
-
constexpr uint32_t picongpu::laser
-
namespace picongpu
laserGaussianBeam
Enums
-
enum picongpu::laserGaussianBeam
PolarisationType
Available polarisation types.
Values:
-
picongpu::laserGaussianBeam
LINEAR_X
= 1u
-
picongpu::laserGaussianBeam
LINEAR_Z
= 2u
-
picongpu::laserGaussianBeam
CIRCULAR
= 4u
-
picongpu::laserGaussianBeam
Functions
-
picongpu::laserGaussianBeam::PMACC_CONST_VECTOR(float_X, MODENUMBER+ 1, LAGUERREMODES, 1. 0)
Variables
-
constexpr float_64 picongpu::laserGaussianBeam
PULSE_INIT
= 20.0 The laser pulse will be initialized PULSE_INIT times of the PULSE_LENGTH.
unit: none
-
constexpr float_X picongpu::laserGaussianBeam
LASER_PHASE
= 0.0 laser phase shift (no shift: 0.0)
sin(omega*time + laser_phase): starts with phase=0 at center > E-field=0 at center
unit: rad, periodic in 2*pi
-
constexpr uint32_t picongpu::laserGaussianBeam
MODENUMBER
= 0 Use only the 0th Laguerremode for a standard Gaussian.
-
constexpr PolarisationType picongpu::laserGaussianBeam
Polarisation
= CIRCULAR Polarization selection.
-
namespace picongpu::laserGaussianBeam
SI
Variables
-
constexpr float_64 picongpu::laserGaussianBeam::SI
WAVE_LENGTH_SI
= 0.8e-6 unit: meter
-
constexpr float_64 picongpu::laserGaussianBeam::SI
UNITCONV_A0_to_Amplitude_SI
= -2.0 * PI / WAVE_LENGTH_SI * ::picongpu::SI::ELECTRON_MASS_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI / ::picongpu::SI::ELECTRON_CHARGE_SI Convert the normalized laser strength parameter a0 to Volt per meter.
-
constexpr float_64 picongpu::laserGaussianBeam::SI
AMPLITUDE_SI
= 1.738e13 unit: W / m^2
unit: none unit: Volt / meter unit: Volt / meter
-
constexpr float_64 picongpu::laserGaussianBeam::SI
PULSE_LENGTH_SI
= 10.615e-15 / 4.0 Pulse length: sigma of std.
gauss for intensity (E^2) PULSE_LENGTH_SI = FWHM_of_Intensity / [ 2*sqrt{ 2* ln(2) } ] [ 2.354820045 ] Info: FWHM_of_Intensity = FWHM_Illumination = what a experimentalist calls “pulse duration”
unit: seconds (1 sigma)
-
constexpr float_64 picongpu::laserGaussianBeam::SI
W0_SI
= 5.0e-6 / 1.17741 beam waist: distance from the axis where the pulse intensity (E^2) decreases to its 1/e^2-th part, at the focus position of the laser W0_SI = FWHM_of_Intensity / sqrt{ 2* ln(2) } [ 1.17741 ]
unit: meter
-
constexpr float_64 picongpu::laserGaussianBeam::SI
FOCUS_POS_SI
= 4.62e-5 the distance to the laser focus in y-direction unit: meter
-
constexpr float_64 picongpu::laserGaussianBeam::SI
-
enum picongpu::laserGaussianBeam
-
namespace picongpu
laserPlaneWave
plane wave (use periodic boundaries!)
no transverse spacial envelope based on the electric potential Phi = Phi_0 * exp(0.5 * (x-x_0)^2 / sigma^2) * cos(k*(x - x_0) - phi) by applying -grad Phi = -d/dx Phi = E(x) we get: E = -Phi_0 * exp(0.5 * (x-x_0)^2 / sigma^2) * [k*sin(k*(x - x_0) - phi) + x/sigma^2 * cos(k*(x - x_0) - phi)]
This approach ensures that int_{-infinity}^{+infinity} E(x) = 0 for any phase if we have no transverse profile as we have with this plane wave train
Since PIConGPU requires a temporally defined electric field, we use: t = x/c and (x-x_0)/sigma = (t-t_0)/tau and k*(x-x_0) = omega*(t-t_0) with omega/k = c and tau * c = sigma and get: E = -Phi_0*omega/c * exp(0.5 * (t-t_0)^2 / tau^2) * [sin(omega*(t - t_0) - phi) + t/(omega*tau^2) * cos(omega*(t - t_0) - phi)] and define: E_0 = -Phi_0*omega/c integrationCorrectionFactor = t/(omega*tau^2)
Please consider: 1) The above formulae does only apply to a Gaussian envelope. If the plateau length is not zero, the integral over the volume will only vanish if the plateau length is a multiple of the wavelength. 2) Since we define our envelope by a sigma of the laser intensity, tau = PULSE_LENGTH * sqrt(2)
Enums
-
enum picongpu::laserPlaneWave
PolarisationType
Available polarisation types.
Values:
-
picongpu::laserPlaneWave
LINEAR_X
= 1u
-
picongpu::laserPlaneWave
LINEAR_Z
= 2u
-
picongpu::laserPlaneWave
CIRCULAR
= 4u
-
picongpu::laserPlaneWave
Variables
-
constexpr float_64 picongpu::laserPlaneWave
RAMP_INIT
= 20.6146 The laser pulse will be initialized half of PULSE_INIT times of the PULSE_LENGTH before and after the plateau unit: none.
-
constexpr float_X picongpu::laserPlaneWave
LASER_PHASE
= 0.0 laser phase shift (no shift: 0.0)
sin(omega*time + laser_phase): starts with phase=0 at center > E-field=0 at center
unit: rad, periodic in 2*pi
-
constexpr PolarisationType picongpu::laserPlaneWave
Polarisation
= LINEAR_X Polarization selection.
-
namespace picongpu::laserPlaneWave
SI
Variables
-
constexpr float_64 picongpu::laserPlaneWave::SI
WAVE_LENGTH_SI
= 0.8e-6 unit: meter
-
constexpr float_64 picongpu::laserPlaneWave::SI
UNITCONV_A0_to_Amplitude_SI
= -2.0 * PI / WAVE_LENGTH_SI * ::picongpu::SI::ELECTRON_MASS_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI / ::picongpu::SI::ELECTRON_CHARGE_SI UNITCONV.
-
constexpr float_64 picongpu::laserPlaneWave::SI
_A0
= 1.5 unit: W / m^2
unit: none
-
constexpr float_64 picongpu::laserPlaneWave::SI
AMPLITUDE_SI
= _A0 * UNITCONV_A0_to_Amplitude_SI unit: Volt /meter
-
constexpr float_64 picongpu::laserPlaneWave::SI
LASER_NOFOCUS_CONSTANT_SI
= 13.34e-15 unit: Volt /meter
The profile of the test Lasers 0 and 2 can be stretched by a constexprant area between the up and downramp unit: seconds
-
constexpr float_64 picongpu::laserPlaneWave::SI
PULSE_LENGTH_SI
= 10.615e-15 / 4.0 Pulse length: sigma of std.
gauss for intensity (E^2) PULSE_LENGTH_SI = FWHM_of_Intensity / [ 2*sqrt{ 2* ln(2) } ] [ 2.354820045 ] Info: FWHM_of_Intensity = FWHM_Illumination = what a experimentalist calls “pulse duration” unit: seconds (1 sigma)
-
constexpr float_64 picongpu::laserPlaneWave::SI
-
enum picongpu::laserPlaneWave
-
namespace picongpu
laserPolynom
not focusing polynomial laser pulse
no phase shifts, just spacial envelope
Variables
-
constexpr float_X picongpu::laserPolynom
LASER_PHASE
= 0.0 laser phase shift (no shift: 0.0)
sin(omega*time + laser_phase): starts with phase=0 at center > E-field=0 at center
unit: rad, periodic in 2*pi
-
namespace picongpu::laserPolynom
SI
Variables
-
constexpr float_64 picongpu::laserPolynom::SI
WAVE_LENGTH_SI
= 0.8e-6 unit: meter
-
constexpr float_64 picongpu::laserPolynom::SI
UNITCONV_A0_to_Amplitude_SI
= -2.0 * PI / WAVE_LENGTH_SI * ::picongpu::SI::ELECTRON_MASS_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI / ::picongpu::SI::ELECTRON_CHARGE_SI UNITCONV.
-
constexpr float_64 picongpu::laserPolynom::SI
AMPLITUDE_SI
= 1.738e13 unit: W / m^2
unit: none unit: Volt /meter unit: Volt /meter
-
constexpr float_64 picongpu::laserPolynom::SI
PULSE_LENGTH_SI
= 4.0e-15 Pulse length: PULSE_LENGTH_SI = total length of polynamial laser pulse Rise time = 0.5 * PULSE_LENGTH_SI Fall time = 0.5 * PULSE_LENGTH_SI in order to compare to a gaussian pulse: rise time = sqrt{2} * T_{FWHM} unit: seconds.
-
constexpr float_64 picongpu::laserPolynom::SI
W0x_SI
= 4.246e-6 beam waist: distance from the axis where the pulse intensity (E^2) decreases to its 1/e^2-th part, at the focus position of the laser unit: meter
-
constexpr float_64 picongpu::laserPolynom::SI
W0z_SI
= W0x_SI
-
constexpr float_64 picongpu::laserPolynom::SI
-
constexpr float_X picongpu::laserPolynom
-
namespace picongpu
laserPulseFrontTilt
Enums
-
enum picongpu::laserPulseFrontTilt
PolarisationType
Available polarisation types.
Values:
-
picongpu::laserPulseFrontTilt
LINEAR_X
= 1u
-
picongpu::laserPulseFrontTilt
LINEAR_Z
= 2u
-
picongpu::laserPulseFrontTilt
CIRCULAR
= 4u
-
picongpu::laserPulseFrontTilt
Variables
-
constexpr float_64 picongpu::laserPulseFrontTilt
PULSE_INIT
= 20.0 The laser pulse will be initialized PULSE_INIT times of the PULSE_LENGTH unit: none.
-
constexpr float_X picongpu::laserPulseFrontTilt
LASER_PHASE
= 0.0 laser phase shift (no shift: 0.0)
sin(omega*time + laser_phase): starts with phase=0 at center > E-field=0 at center
unit: rad, periodic in 2*pi
-
constexpr PolarisationType picongpu::laserPulseFrontTilt
Polarisation
= LINEAR_X Polarization selection.
-
namespace picongpu::laserPulseFrontTilt
SI
Variables
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
WAVE_LENGTH_SI
= 0.8e-6 unit: meter
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
UNITCONV_A0_to_Amplitude_SI
= -2.0 * PI / WAVE_LENGTH_SI * ::picongpu::SI::ELECTRON_MASS_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI / ::picongpu::SI::ELECTRON_CHARGE_SI UNITCONV.
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
AMPLITUDE_SI
= 1.738e13 unit: Volt / meter
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
PULSE_LENGTH_SI
= 10.615e-15 / 4.0 Pulse length: sigma of std.
gauss for intensity (E^2) PULSE_LENGTH_SI = FWHM_of_Intensity / [ 2*sqrt{ 2* ln(2) } ] [ 2.354820045 ] Info: FWHM_of_Intensity = FWHM_Illumination = what a experimentalist calls “pulse duration” unit: seconds (1 sigma)
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
W0_SI
= 5.0e-6 / 1.17741 beam waist: distance from the axis where the pulse intensity (E^2) decreases to its 1/e^2-th part, at the focus position of the laser W0_SI = FWHM_of_Intensity / sqrt{ 2* ln(2) } [ 1.17741 ] unit: meter
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
FOCUS_POS_SI
= 4.62e-5 the distance to the laser focus in y-direction unit: meter
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
TILT_X_SI
= 0 the tilt angle between laser propagation in y-direction and laser axis in x-direction (0 degree == no tilt) unit: degree
-
constexpr float_64 picongpu::laserPulseFrontTilt::SI
-
enum picongpu::laserPulseFrontTilt
-
namespace picongpu
laserWavepacket
not focusing wavepaket with spacial gaussian envelope
no phase shifts, just spacial envelope including correction to laser formular derived from vector potential, so the integration along propagation direction gives 0 this is important for few-cycle laser pulses
Enums
-
enum picongpu::laserWavepacket
PolarisationType
Available polarisation types.
Values:
-
picongpu::laserWavepacket
LINEAR_X
= 1u
-
picongpu::laserWavepacket
LINEAR_Z
= 2u
-
picongpu::laserWavepacket
CIRCULAR
= 4u
-
picongpu::laserWavepacket
Variables
-
constexpr float_64 picongpu::laserWavepacket
RAMP_INIT
= 20.0 The laser pulse will be initialized half of PULSE_INIT times of the PULSE_LENGTH before plateau and half at the end of the plateau unit: none.
-
constexpr float_X picongpu::laserWavepacket
LASER_PHASE
= 0.0 laser phase shift (no shift: 0.0)
sin(omega*time + laser_phase): starts with phase=0 at center > E-field=0 at center
unit: rad, periodic in 2*pi
-
constexpr PolarisationType picongpu::laserWavepacket
Polarisation
= LINEAR_X Polarization selection.
-
namespace picongpu::laserWavepacket
SI
Variables
-
constexpr float_64 picongpu::laserWavepacket::SI
WAVE_LENGTH_SI
= 0.8e-6 unit: meter
-
constexpr float_64 picongpu::laserWavepacket::SI
UNITCONV_A0_to_Amplitude_SI
= -2.0 * PI / WAVE_LENGTH_SI * ::picongpu::SI::ELECTRON_MASS_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI * ::picongpu::SI::SPEED_OF_LIGHT_SI / ::picongpu::SI::ELECTRON_CHARGE_SI UNITCONV.
-
constexpr float_64 picongpu::laserWavepacket::SI
AMPLITUDE_SI
= 1.738e13 unit: W / m^2
unit: none unit: Volt /meter unit: Volt /meter
-
constexpr float_64 picongpu::laserWavepacket::SI
LASER_NOFOCUS_CONSTANT_SI
= 7.0 * WAVE_LENGTH_SI / ::picongpu::SI::SPEED_OF_LIGHT_SI The profile of the test Lasers 0 and 2 can be stretched by a constexprant area between the up and downramp unit: seconds.
-
constexpr float_64 picongpu::laserWavepacket::SI
PULSE_LENGTH_SI
= 10.615e-15 / 4.0 Pulse length: sigma of std.
gauss for intensity (E^2) PULSE_LENGTH_SI = FWHM_of_Intensity / [ 2*sqrt{ 2* ln(2) } ] [ 2.354820045 ] Info: FWHM_of_Intensity = FWHM_Illumination = what a experimentalist calls “pulse duration” unit: seconds (1 sigma)
-
constexpr float_64 picongpu::laserWavepacket::SI
W0_X_SI
= 4.246e-6 beam waist: distance from the axis where the pulse intensity (E^2) decreases to its 1/e^2-th part, WO_X_SI is this distance in x-direction W0_Z_SI is this distance in z-direction if both values are equal, the laser has a circular shape in x-z W0_SI = FWHM_of_Intensity / sqrt{ 2* ln(2) } [ 1.17741 ] unit: meter
-
constexpr float_64 picongpu::laserWavepacket::SI
W0_Z_SI
= W0_X_SI
-
constexpr float_64 picongpu::laserWavepacket::SI
-
enum picongpu::laserWavepacket
-
namespace picongpu
particle.param¶
Configurations for particle manipulators.
Set up and declare functors that can be used in speciesInitalization.param for particle species initialization and manipulation, such as temperature distributions, drifts, pre-ionization and in-cell position.
-
namespace
picongpu
-
-
namespace picongpu
particles
Variables
-
namespace picongpu::particles
manipulators
Typedefs
-
using
picongpu::particles::manipulators::AssignXDrift = typedef DriftImpl< DriftParam, nvidia::functors::Assign >
definition of manipulator that assigns a dirft in X
-
using
picongpu::particles::manipulators::AddTemperature = typedef TemperatureImpl< TemperatureParam, nvidia::functors::Add >
-
using
picongpu::particles::manipulators::AssignXDriftToLowerHalfXPosition = typedef IfRelativeGlobalPositionImpl< IfRelativeGlobalPositionParam, AssignXDrift >
definition of a relative position selection that assigns a drift in X
-
using
picongpu::particles::manipulators::DoubleWeighting = typedef FreeImpl< DoubleWeightingFunctor >
definition of a free particle manipulator: double weighting
-
typedef FreeRngImpl<RandomEnabledRadiationFunctor, nvidia::rng::distributions::Uniform_float> picongpu::particles::manipulators
RandomEnabledRadiation
-
using
picongpu::particles::manipulators::RandomPosition = typedef RandomPositionImpl<>
changes the in-cell position of each particle of a species
Functions
-
picongpu::particles::manipulators::CONST_VECTOR(float_X, 3, DriftParam_direction, 1. 0, 0. 0, 0. 0)
Parameter for DriftParam.
-
struct picongpu::particles::manipulators
DoubleWeightingFunctor
Unary particle manipulator: double each weighting.
Public Functions
- template <typename T_Particle>
-
DINLINE void picongpu::particles::manipulators::DoubleWeightingFunctor::operator()(T_Particle & particle)
-
struct picongpu::particles::manipulators
DriftParam
Parameter for a particle drift assignment.
Public Members
-
const DriftParam_direction_t picongpu::particles::manipulators::DriftParam
direction
Public Static Attributes
-
constexpr float_64 picongpu::particles::manipulators::DriftParam
gamma
= 1.0
-
const DriftParam_direction_t picongpu::particles::manipulators::DriftParam
-
struct picongpu::particles::manipulators
IfRelativeGlobalPositionParam
Parameters for an assignment in a relative position selection.
Public Static Attributes
-
constexpr float_X picongpu::particles::manipulators::IfRelativeGlobalPositionParam
lowerBound
= 0.0
-
constexpr float_X picongpu::particles::manipulators::IfRelativeGlobalPositionParam
upperBound
= 0.5
-
constexpr uint32_t picongpu::particles::manipulators::IfRelativeGlobalPositionParam
dimension
= 0
-
constexpr float_X picongpu::particles::manipulators::IfRelativeGlobalPositionParam
-
struct picongpu::particles::manipulators
RandomEnabledRadiationFunctor
Public Functions
- template <typename T_Rng, typename T_Particle>
-
DINLINE void picongpu::particles::manipulators::RandomEnabledRadiationFunctor::operator()(T_Rng & rng, T_Particle & particle)
-
struct picongpu::particles::manipulators
TemperatureParam
Parameter for a temperature assignment.
Public Static Attributes
-
constexpr float_64 picongpu::particles::manipulators::TemperatureParam
temperature
= 0.0
-
constexpr float_64 picongpu::particles::manipulators::TemperatureParam
-
using
-
namespace picongpu::particles
startPosition
Typedefs
-
using
picongpu::particles::startPosition::Random = typedef RandomImpl< RandomParameter >
definition of random particle start
-
using
picongpu::particles::startPosition::Quiet = typedef QuietImpl< QuietParam >
definition of quiet particle start
-
using
picongpu::particles::startPosition::OnePosition = typedef OnePositionImpl< OnePositionParameter >
definition of one specific position for particle start
Functions
-
picongpu::particles::startPosition::CONST_VECTOR(float_X, 3, InCellOffset, 0. 0, 0. 0, 0. 0)
sit directly in lower corner of the cell
-
struct picongpu::particles::startPosition
OnePositionParameter
Public Members
-
const InCellOffset_t picongpu::particles::startPosition::OnePositionParameter
inCellOffset
Public Static Attributes
-
constexpr uint32_t picongpu::particles::startPosition::OnePositionParameter
numParticlesPerCell
= TYPICAL_PARTICLES_PER_CELL Count of particles per cell at initial state.
unit: none
-
const InCellOffset_t picongpu::particles::startPosition::OnePositionParameter
-
struct picongpu::particles::startPosition
QuietParam
Public Types
-
using picongpu::particles::startPosition::QuietParam
numParticlesPerDimension
= mCT::shrinkTo<mCT::Int<1, TYPICAL_PARTICLES_PER_CELL, 1>, simDim>::type Count of particles per cell per direction at initial state.
unit: none
-
using picongpu::particles::startPosition::QuietParam
-
struct picongpu::particles::startPosition
RandomParameter
Public Static Attributes
-
constexpr uint32_t picongpu::particles::startPosition::RandomParameter
numParticlesPerCell
= TYPICAL_PARTICLES_PER_CELL Count of particles per cell at initial state.
unit: none
-
constexpr uint32_t picongpu::particles::startPosition::RandomParameter
-
using
-
namespace picongpu::particles
-
namespace picongpu
species.param¶
Forward declarations for speciesDefinition.param in case one wants to use the same particle shape, interpolation, current solver and particle pusher for all particle species.
-
namespace
picongpu
-
Typedefs
-
using
picongpu::UsedParticleShape = typedef particles::shapes::TSC
Particle Shape definitions.
- particles::shapes::CIC : 1st order
- particles::shapes::TSC : 2nd order
- particles::shapes::PCS : 3rd order
- particles::shapes::P4S : 4th order
example: using CICShape = particles::shapes::CIC;
-
using
picongpu::UsedField2Particle = typedef FieldToParticleInterpolation< UsedParticleShape, AssignedTrilinearInterpolation >
define which interpolation method is used to interpolate fields to particles
-
using
picongpu::UsedParticleCurrentSolver = typedef currentSolver::Esirkepov< UsedParticleShape >
select current solver method
- currentSolver::Esirkepov< SHAPE > : particle shapes - CIC, TSC, PCS, P4S (1st to 4th order)
- currentSolver::VillaBune<> : particle shapes - CIC (1st order) only
- currentSolver::EmZ< SHAPE > : particle shapes - CIC, TSC, PCS, P4S (1st to 4th order)
For development purposes:
- currentSolver::currentSolver::EsirkepovNative< SHAPE > : generic version of currentSolverEsirkepov without optimization (~4x slower and needs more shared memory)
- currentSolver::ZigZag< SHAPE > : particle shapes - CIC, TSC, PCS, P4S (1st to 4th order)
-
using
picongpu::UsedParticlePusher = typedef particles::pusher::Boris
particle pusher configuration
Define a pusher is optional for particles
- particles::pusher::Vay : better suited relativistic boris pusher
- particles::pusher::Boris : standard boris pusher
- particles::pusher::ReducedLandauLifshitz : 4th order RungeKutta pusher with classical radiation reaction
For development purposes:
- particles::pusher::Axel : a pusher developed at HZDR during 2011 (testing)
- particles::pusher::Free : free propagation, ignore fields (= free stream model)
- particles::pusher::Photon : propagate with c in direction of normalized mom.
-
using
speciesAttributes.param¶
This file defines available attributes that can be stored with each particle of a particle species.
Each attribute defined here needs to implement furthermore the traits
- Unit
- UnitDimension
- WeightingPower
- MacroWeighted in speciesAttributes.unitless for further information about these traits see therein.
-
namespace
picongpu
-
Functions
-
picongpu
alias
(position) relative (to cell origin) in-cell position of a particle With this definition we not define any type like float3,double3,…
This is only a name without a specialization
-
picongpu::value_identifier(floatD_X, position_pic, floatD_X::create (0.))
specialization for the relative in-cell position
-
picongpu::value_identifier(float3_X, momentum, float3_X::create (0.))
momentum at timestep t
-
picongpu::value_identifier(float3_X, momentumPrev1, float3_X::create (0.))
momentum at (previous) timestep t-1
-
picongpu::value_identifier(float_X, weighting, 0. 0)
weighting of the macro particle
-
picongpu::value_identifier(bool, radiationMask, false)
masking a particle for radiation
The mask is used by the user defined filter
RadiationParticleFilter
inradiation.param
to (de)select particles for the radiation calculation.
-
picongpu::value_identifier(float_X, boundElectrons, float_X(0.0))
number of electrons bound to the atom / ion
value type is float_X to avoid casts during the runtime
- float_X instead of integer types are reasonable because effective charge numbers are possible
- required for ion species if ionization is enabled
-
picongpu
value_identifier
(DataSpace<simDim>, totalCellIdx, DataSpace<simDim>()) Total cell index of a particle.
The total cell index is a N-dimensional DataSpace given by a GPU’s globalDomain.offset + localDomain.offset added to the N-dimensional cell index the particle belongs to on that GPU.
-
picongpu
alias
(shape) alias for particle shape
- See
- species.param
-
picongpu
alias
(particlePusher) alias for particle pusher
- See
- species.param
-
picongpu
alias
(ionizers) alias for particle ionizers
- See
- ionizer.param
-
picongpu
alias
(ionizationEnergies) alias for ionization energy container
- See
- ionizationEnergies.param
-
picongpu
alias
(synchrotronPhotons) alias for synchrotronPhotons alias for ion species used for bremsstrahlung
- See
- speciesDefinition.param
-
picongpu
alias
(bremsstrahlungPhotons) alias for photon species used for bremsstrahlung
-
picongpu
alias
(interpolation) alias for particle to field interpolation
- See
- species.param
-
picongpu
alias
(current) alias for particle current solver
- See
- species.param
-
picongpu
alias
(atomicNumbers) alias for particle flag: atomic numbers
- See
- ionizer.param
- only reasonable for atoms / ions / nuclei
-
picongpu
alias
(effectiveNuclearCharge) alias for particle flag: effective nuclear charge
- See
- ionizer.param
- only reasonable for atoms / ions / nuclei
-
picongpu
alias
(massRatio) alias for particle mass ratio
mass ratio between base particle default value: 1.0 if unset
- See
speciesConstants.param
SI::BASE_MASS_SI and a user defined species
-
picongpu
alias
(chargeRatio) alias for particle charge ratio
charge ratio between base particle default value: 1.0 if unset
- See
speciesConstants.param
SI::BASE_CHARGE_SI and a user defined species
-
picongpu
alias
(densityRatio) alias for particle density ratio
density ratio between default density default value: 1.0 if unset
- See
density.param
SI::BASE_DENSITY_SI and a user defined species
-
picongpu
speciesConstants.param¶
Constants and thresholds for particle species.
Defines the reference mass and reference charge to express species with (default: electrons with negative charge).
-
namespace
picongpu
-
Variables
-
constexpr float_X picongpu
GAMMA_THRESH
= float_X(1.005) Threshold between relativistic and non-relativistic regime.
Threshold used for calculations that want to separate between high-precision formulas for relativistic and non-relativistic use-cases, e.g. energy-binning algorithms.
-
constexpr float_X picongpu
GAMMA_INV_SQUARE_RAD_THRESH
= float_X(0.18) Threshold in radiation plugin between relativistic and non-relativistic regime.
This limit is used to decide between a pure 1-sqrt(1-x) calculation and a 5th order Taylor approximation of 1-sqrt(1-x) to avoid halving of significant digits due to the sqrt() evaluation at x = 1/gamma^2 near 0.0. With 0.18 the relative error between Taylor approximation and real value will be below 0.001% = 1e-5 * for x=1/gamma^2 < 0.18
-
namespace picongpu
SI
-
constexpr float_X picongpu
speciesDefinition.param¶
Define particle species.
This file collects all previous declarations of base (reference) quantities and configured solvers for species and defines particle species. This includes “attributes” (lvalues to store with each species) and “flags” (rvalues & aliases for solvers to perform with the species for each timestep and ratios to base quantities). With those information, a Particles
class is defined for each species and then collected in the list VectorAllSpecies
.
-
namespace
picongpu
-
Typedefs
-
using
picongpu::DefaultParticleAttributes = typedef MakeSeq_t< position< position_pic >, momentum, weighting >
describe attributes of a particle
-
using
picongpu::ParticleFlagsPhotons = typedef bmpl::vector< particlePusher< particles::pusher::Photon >, shape< UsedParticleShape >, interpolation< UsedField2Particle >, massRatio< MassRatioPhotons >, chargeRatio< ChargeRatioPhotons > >
-
using
picongpu::PIC_Photons = typedef Particles< bmpl::string< 'p', 'h' >, ParticleFlagsPhotons, DefaultParticleAttributes >
-
using
picongpu::ParticleFlagsElectrons = typedef bmpl::vector< particlePusher< UsedParticlePusher >, shape< UsedParticleShape >, interpolation< UsedField2Particle >, current< UsedParticleCurrentSolver >, massRatio< MassRatioElectrons >, chargeRatio< ChargeRatioElectrons > >
-
using
picongpu::PIC_Electrons = typedef Particles< bmpl::string< 'e' >, ParticleFlagsElectrons, DefaultParticleAttributes >
-
using
picongpu::ParticleFlagsIons = typedef bmpl::vector< particlePusher< UsedParticlePusher >, shape< UsedParticleShape >, interpolation< UsedField2Particle >, current< UsedParticleCurrentSolver >, massRatio< MassRatioIons >, chargeRatio< ChargeRatioIons >, densityRatio< DensityRatioIons >, atomicNumbers< ionization::atomicNumbers::Hydrogen_t > >
-
using
picongpu::PIC_Ions = typedef Particles< bmpl::string< 'i' >, ParticleFlagsIons, DefaultParticleAttributes >
-
using
picongpu::VectorAllSpecies = typedef MakeSeq_t< PIC_Electrons, PIC_Ions >
All known particle species of the simulation.
List all defined particle species from above in this list to make them available to the PIC algorithm.
Functions
-
picongpu::value_identifier(float_X, MassRatioPhotons, 0. 0)
-
picongpu::value_identifier(float_X, ChargeRatioPhotons, 0. 0)
-
picongpu::value_identifier(float_X, MassRatioElectrons, 1. 0)
-
picongpu::value_identifier(float_X, ChargeRatioElectrons, 1. 0)
-
picongpu::value_identifier(float_X, MassRatioIons, 1836. 152672)
-
picongpu::value_identifier(float_X, ChargeRatioIons, -1. 0)
-
picongpu::value_identifier(float_X, DensityRatioIons, 1. 0)
-
using
speciesInitialization.param¶
Available species functors in src/picongpu/include/particles/InitFunctors.hpp.
- CreateDensity<T_DensityFunctor, T_PositionFunctor, T_SpeciesType> Create particle distribution based on a density profile and an in-cell positioning. Fills a particle species (
fillAllGaps()
is called).- See
- density.param
- Template Parameters
T_DensityFunctor
: unary lambda functor with density description,
-
namespace
picongpu
-
-
namespace picongpu
particles
Typedefs
-
using
picongpu::particles::InitPipeline = typedef mpl::vector<>
InitPipeline defines in which order species are initialized.
the functors are called in order (from first to last functor)
-
using
-
namespace picongpu