diff --git a/include/picongpu/fields/incidentField/Functors.hpp b/include/picongpu/fields/incidentField/Functors.hpp
index 44dd959640..27c5aa1a2a 100644
--- a/include/picongpu/fields/incidentField/Functors.hpp
+++ b/include/picongpu/fields/incidentField/Functors.hpp
@@ -141,8 +141,8 @@ namespace picongpu
* fieldE_internal = fieldE_SI / unitField
*/
HINLINE BaseFunctorE(float_X const currentStep, float3_64 const unitField)
- : currentTimeOrigin(currentStep * DELTA_T)
- , origin(getOrigin())
+ : origin(getOrigin())
+ , currentTimeOrigin(currentStep * DELTA_T)
, phaseVelocity(getPhaseVelocity())
{
checkUnit(unitField);
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/1.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/1.cfg
index 4c8ec3b028..68dcc63ef1 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/1.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/1.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=1
TBG_devices_y=1
TBG_devices_z=1
-TBG_gridSize="192 1024 12"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 1024 192"
TBG_steps="2048"
TBG_periodic="--periodic 0 0 1"
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/16.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/16.cfg
index 8fa012fb0d..2321b13884 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/16.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/16.cfg
@@ -36,6 +36,7 @@ TBG_devices_x=2
TBG_devices_y=4
TBG_devices_z=2
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
TBG_gridSize="192 1024 192"
TBG_steps="4000"
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/1_isaac.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/1_isaac.cfg
index f91d866acd..23c1b46045 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/1_isaac.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/1_isaac.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=1
TBG_devices_y=1
TBG_devices_z=1
-TBG_gridSize="192 1024 12"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 1024 192"
TBG_steps="2048"
TBG_periodic="--periodic 0 0 1"
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/32.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/32.cfg
index 62604637c1..73ed8ca14b 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/32.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/32.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=4
TBG_devices_y=4
TBG_devices_z=2
-TBG_gridSize="256 1024 256"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 1024 192"
TBG_steps="4000"
# leave TBG_movingWindow empty to disable moving window
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/4.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/4.cfg
index 7b131fa448..15588b2500 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/4.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/4.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=1
TBG_devices_y=4
TBG_devices_z=1
-TBG_gridSize="128 2048 128"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 2048 192"
TBG_steps="2048"
# leave TBG_movingWindow empty to disable moving window
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/4_gui.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/4_gui.cfg
index fbd19a678b..2371134815 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/4_gui.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/4_gui.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=1
TBG_devices_y=4
TBG_devices_z=1
-TBG_gridSize="128 2048 128"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 2048 192"
TBG_steps="10000"
TBG_movingWindow="-m --windowMovePoint 0.9"
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/4_isaac.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/4_isaac.cfg
index cb7cb43845..e240a7b289 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/4_isaac.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/4_isaac.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=1
TBG_devices_y=4
TBG_devices_z=1
-TBG_gridSize="128 2048 128"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 2048 192"
TBG_steps="2048"
TBG_restartLoop="--checkpoint.restart.loop 10000"
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/8.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/8.cfg
index 02cbdb8d3e..e4a0df9b27 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/8.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/8.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=2
TBG_devices_y=4
TBG_devices_z=1
-TBG_gridSize="192 2048 160"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 2048 192"
TBG_steps="4000"
# leave TBG_movingWindow empty to disable moving window
diff --git a/share/picongpu/examples/LaserWakefield/etc/picongpu/8_isaac.cfg b/share/picongpu/examples/LaserWakefield/etc/picongpu/8_isaac.cfg
index d303ff57a5..f765275036 100644
--- a/share/picongpu/examples/LaserWakefield/etc/picongpu/8_isaac.cfg
+++ b/share/picongpu/examples/LaserWakefield/etc/picongpu/8_isaac.cfg
@@ -36,7 +36,8 @@ TBG_devices_x=2
TBG_devices_y=2
TBG_devices_z=2
-TBG_gridSize="192 2048 160"
+# if you change the number of cells in X and Z direction the laser will not be centered in the middle
+TBG_gridSize="192 2048 192"
TBG_steps="2048"
TBG_restartLoop="--checkpoint.restart.loop 10000"
diff --git a/share/picongpu/examples/LaserWakefield/include/picongpu/param/incidentField.param b/share/picongpu/examples/LaserWakefield/include/picongpu/param/incidentField.param
new file mode 100644
index 0000000000..944406cdc7
--- /dev/null
+++ b/share/picongpu/examples/LaserWakefield/include/picongpu/param/incidentField.param
@@ -0,0 +1,273 @@
+/* Copyright 2020-2022 Sergei Bastrakov, Rene Widera
+ *
+ * This file is part of PIConGPU.
+ *
+ * PIConGPU is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * PIConGPU is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with PIConGPU.
+ * If not, see .
+ */
+
+/** @file incidentField.param
+ *
+ * Configure incident field profile and offset of the Huygens surface for each boundary.
+ *
+ * Available profiles:
+ * - profiles::DispersiveLaser<> : Gaussian pulse allowing to set first-, second-, and third-order dispersion
+ * in focus. That is, SD, AD, GDD, and TOD, respectively.
+ * - profiles::ExpRampWithPrepulse<> : exponential ramp with prepulse wavepacket with given parameters
+ * - profiles::Free<> : custom profile with user-provided functors to calculate incident E and B
+ * - profiles::GaussianBeam<> : Gaussian beam with given parameters
+ * - profiles::None : no incident field
+ * - profiles::PlaneWave<> : plane wave profile with given parameters
+ * - profiles::Polynom<> : wavepacket with a polynomial temporal intensity shape profile with given
+ * parameters
+ * - profiles::PulseFrontTilt<> : Gaussian beam with tilted pulse front with given parameters
+ * - profiles::Wavepacket<> : wavepacket with Gaussian spatial and temporal envelope profile with given
+ * parameters
+ *
+ * All profiles but `Free<>` and `None` are parametrized with a profile-specific structure.
+ * Their interfaces are defined in the corresponding `.def` files inside directory
+ * picongpu/fields/incidentField/profiles/. Note that all these parameter structures inherit common base structures
+ * from `BaseParam.def`. Thus, a user-provided structure must also define all members according to the base struct.
+ *
+ * In the end, this file needs to define `XMin`, `XMax`, `YMin`, `YMax`, `ZMin`, `ZMax` (the latter two can be skipped
+ * in 2d) type aliases in namespace `picongpu::fields::incidentField`. Each of them could be a single profile or a
+ * typelist of profiles created with `MakeSeq_t`. In case a typelist is used, the resulting field is a sum of
+ * effects of all profiles in the list. This file also has to define constexpr array `POSITION` that controls
+ * positioning of the generating surface relative to total domain. For example:
+ *
+ * @code{.cpp}
+ * using XMin = profiles::Free;
+ * using XMax = profiles::None;
+ * using YMin = MakeSeq_t, profiles::Wavepacket>;
+ * using YMax = profiles::None;
+ * using ZMin = profiles::Polynom;
+ * using ZMax = profiles::GaussianBeam;
+ *
+ * constexpr int32_t POSITION[3][2] = { {16, -16}, {16, -16}, {16, -16} };
+ * @endcode
+ */
+
+#pragma once
+
+#include "picongpu/fields/incidentField/profiles/profiles.def"
+
+#ifndef PARAM_A0
+# define PARAM_A0 8.0
+#endif
+
+#ifndef PARAM_WAVE_LENGTH_SI
+# define PARAM_WAVE_LENGTH_SI 0.8e-6
+#endif
+
+#ifndef PARAM_PULSE_LENGTH_SI
+# define PARAM_PULSE_LENGTH_SI 5.e-15
+#endif
+
+namespace picongpu
+{
+ namespace fields
+ {
+ namespace incidentField
+ {
+ /** Base structure for parameters of all lasers
+ *
+ * The particular used parameter structures do not have to inherit this, but must define same members
+ * with same meaning.
+ */
+ struct LwfaGaussianBeamBaseParams
+ {
+ /** Wave length along propagation direction
+ *
+ * unit: m
+ */
+ static constexpr float_64 WAVE_LENGTH_SI = PARAM_WAVE_LENGTH_SI;
+
+ /** Convert the normalized laser strength parameter a0 to Volt per meter */
+ static constexpr float_64 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;
+
+ /** unit: none */
+ static constexpr float_64 _A0 = PARAM_A0;
+
+ /** Max amplitude of E field
+ *
+ * To convert the normalized laser strength parameter a0 to Volt per meter:
+ * calculate A0 = 8.549297e-6 * sqrt( Intensity[W/m^2] ) * wavelength[m] (linearly polarized),
+ *
+ * unit: Volt / meter
+ */
+ static constexpr float_64 AMPLITUDE_SI = _A0 * UNITCONV_A0_to_Amplitude_SI;
+
+ /** 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)
+ */
+ static constexpr float_64 PULSE_LENGTH_SI = PARAM_PULSE_LENGTH_SI;
+
+ /** 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
+ */
+ static constexpr float_X LASER_PHASE = 0.0_X;
+
+ /** Unit propagation direction vector
+ *
+ * Norm of this vector must be 1.0.
+ * (Normalization is required on a user side as internally it is awkward to do with the
+ * static-constexpr style of using parameters.)
+ *
+ * For 2d simulations, z component is not required, will be always set to 0.
+ *
+ * unit: none
+ *
+ * @{
+ */
+ static constexpr float_64 DIRECTION_X = 0.0;
+ static constexpr float_64 DIRECTION_Y = 1.0;
+ static constexpr float_64 DIRECTION_Z = 0.0;
+ /** @} */
+
+ /** Focus position in total coordinate system
+ *
+ * "Non-focused" lasers should have it set at or near the generation surface where the laser enters
+ * the domain. The position does not have to be inside the domain.
+ *
+ * The focus position and propagation direction together define the entry point of laser to
+ * the generation surface.
+ * So they also control the laser center at the generation plane, not just a shift inwards.
+ *
+ * For 2d simulations, z component has no effect and is not required.
+ *
+ * unit: m
+ *
+ * @{
+ */
+ static constexpr float_64 FOCUS_POSITION_X_SI = 1.70112e-5; // 96 cells
+ static constexpr float_64 FOCUS_POSITION_Y_SI = 4.62e-5;
+ static constexpr float_64 FOCUS_POSITION_Z_SI = 1.70112e-5; // 96 cells
+ /** @} */
+
+ /** E polarization type
+ *
+ * Note: we use spelling 'Polarisation' for consistency with other lasers.
+ */
+ static constexpr PolarisationType Polarisation = PolarisationType::Circular;
+
+ /** Unit E polarization direction
+ *
+ * Must be orthogonal to the propagation direction.
+ * For linear polarization, E vectors will be aligned to this direction.
+ * For circular polarization, that is one of its axes, with the other axis being
+ * cross(propagation direction, polarization direction).
+ *
+ * Norm of this vector must be 1.0.
+ * (Normalization is required on a user side as internally it is awkward to do with the
+ * static-constexpr style of using parameters.)
+ *
+ * Note: we use spelling 'Polarisation' for consistency with other lasers.
+ *
+ * unit: none
+ *
+ * @{
+ */
+ static constexpr float_64 POLARISATION_DIRECTION_X = 1.0;
+ static constexpr float_64 POLARISATION_DIRECTION_Y = 0.0;
+ static constexpr float_64 POLARISATION_DIRECTION_Z = 0.0;
+ /** @} */
+ };
+
+ namespace lwfaGaussianBeam
+ {
+ //! Use only the 0th Laguerremode for a standard Gaussian
+ static constexpr uint32_t MODENUMBER = 0;
+ PMACC_CONST_VECTOR(float_X, MODENUMBER + 1, LAGUERREMODES, 1.0);
+ PMACC_CONST_VECTOR(float_X, MODENUMBER + 1, LAGUERREPHASES, 0.0);
+ } // namespace lwfaGaussianBeam
+
+ /** Special structure for parameters of Gaussian laser pulses.
+ *
+ * Inherits from LwfaGaussianBeamBaseParams in order to combine all Gaussian pulse parameters.
+ */
+ struct GaussianBeamParam : public LwfaGaussianBeamBaseParams
+ {
+ /** 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
+ */
+ static constexpr float_64 W0_SI = 5.0e-6 / 1.17741;
+
+ /** The laser pulse will be initialized PULSE_INIT times of the PULSE_LENGTH
+ *
+ * unit: none
+ */
+ static constexpr float_64 PULSE_INIT = 15.0;
+
+ /** Laguerre mode parameters
+ *
+ * @{
+ */
+ using LAGUERREMODES_t = lwfaGaussianBeam::LAGUERREMODES_t;
+ using LAGUERREPHASES_t = lwfaGaussianBeam::LAGUERREPHASES_t;
+ static constexpr uint32_t MODENUMBER = lwfaGaussianBeam::MODENUMBER;
+ /** @} */
+ };
+
+ /**@{*/
+ //! Incident field profile types along each boundary, these 6 types (or aliases) are required.
+ using XMin = profiles::None;
+ using XMax = profiles::None;
+ using YMin = profiles::GaussianBeam;
+ using YMax = profiles::None;
+ using ZMin = profiles::None;
+ using ZMax = profiles::None;
+ /**@}*/
+
+ /** Position in cells of the Huygens surface relative to start of the total domain
+ *
+ * The position is set as an offset, in cells, counted from the start of the total domain.
+ * For the max boundaries, negative position values are allowed.
+ * These negative values are treated as position at (global_domain_size[d] + POSITION[d][1]).
+ * It is also possible to specify the position explicitly as a positive number.
+ * Then it is on a user to make sure the position is correctly calculated wrt the grid size.
+ *
+ * Except moving window simulations, the position must be inside the global domain.
+ * The distance between the Huygens surface and each global domain boundary must be at least
+ * absorber_thickness + (FDTD_spatial_order / 2 - 1). However beware of setting position = direction *
+ * (absorber_thickness + const), as then changing absorber parameters will affect laser positioning.
+ * When all used profiles are None, the check for POSITION validity is skipped.
+ *
+ * For moving window simulations, POSITION for the YMax side can be located outside the initially
+ * simulated volume. In this case, parts of the generation surface outside of the currently simulated
+ * volume is are treated as if they had zero incident field and it is user's responsibility to apply a
+ * source matching such a case.
+ */
+ constexpr int32_t POSITION[3][2] = {
+ {16, -16}, // x direction [negative, positive]
+ {16, -16}, // y direction [negative, positive]
+ {16, -16} // z direction [negative, positive]
+ };
+
+ } // namespace incidentField
+ } // namespace fields
+} // namespace picongpu
diff --git a/share/picongpu/examples/LaserWakefield/include/picongpu/param/laser.param b/share/picongpu/examples/LaserWakefield/include/picongpu/param/laser.param
deleted file mode 100644
index c98ecb6aa2..0000000000
--- a/share/picongpu/examples/LaserWakefield/include/picongpu/param/laser.param
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright 2013-2022 Axel Huebl, Anton Helm, Rene Widera, Richard Pausch, Alexander Debus
- *
- * This file is part of PIConGPU.
- *
- * PIConGPU is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * PIConGPU is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with PIConGPU.
- * If not, see .
- */
-
-/** @file
- *
- * Configure laser profiles. All laser propagate in y direction.
- *
- * Available profiles:
- * - None : no laser init
- * - GaussianBeam : Gaussian beam (focusing)
- * - PulseFrontTilt : Gaussian beam with a tilted pulse envelope
- * in 'x' direction
- * - PlaneWave : a plane wave (Gaussian in time)
- * - Wavepacket : wavepacket (Gaussian in time and space, not
- * focusing)
- * - Polynom : a polynomial laser envelope
- * - ExpRampWithPrepulse : wavepacket with exponential upramps and prepulse
- * - PulseFromSpectrum : Gaussian pulse allowing to set 2nd and 3rd order
- * dispersion by spectral phase (GDD and TOD)
- *
- * In the end, this file needs to define a `Selected` class in namespace
- * `picongpu::fields::laserProfiles`. A typical profile consists of a
- * laser profile class and its parameters. For example:
- *
- * @code{.cpp}
- * using Selected = GaussianBeam< GaussianBeamParam >;
- * @endcode
- */
-
-#pragma once
-
-#include "picongpu/fields/laserProfiles/profiles.def"
-
-#ifndef PARAM_A0
-# define PARAM_A0 8.0
-#endif
-
-#ifndef PARAM_WAVE_LENGTH_SI
-# define PARAM_WAVE_LENGTH_SI 0.8e-6
-#endif
-
-#ifndef PARAM_PULSE_LENGTH_SI
-# define PARAM_PULSE_LENGTH_SI 5.e-15
-#endif
-
-namespace picongpu
-{
- namespace fields
- {
- namespace laserProfiles
- {
- namespace gaussianBeam
- {
- //! Use only the 0th Laguerremode for a standard Gaussian
- static constexpr uint32_t MODENUMBER = 0;
- PMACC_CONST_VECTOR(float_X, MODENUMBER + 1, LAGUERREMODES, 1.0);
- PMACC_CONST_VECTOR(float_X, MODENUMBER + 1, LAGUERREPHASES, 1.0);
- // This is just an example for a more complicated set of Laguerre modes
- // constexpr uint32_t MODENUMBER = 12;
- // PMACC_CONST_VECTOR(float_X, MODENUMBER + 1, LAGUERREMODES, -1.0, 0.0300519, 0.319461, -0.23783,
- // 0.0954839, 0.0318653, -0.144547, 0.0249208, -0.111989, 0.0434385, -0.030038, -0.00896321,
- // -0.0160788);
- // PMACC_CONST_VECTOR(float_X, MODENUMBER + 1, LAGUERREPHASES, 0.0, 1.0344594, -0.9384701, -2.7384883,
- // 0.0016872, 2.4563653, -0.312892, -1.7298303, -0.8039839, 3.0055385, -0.1503778, -9.6980362,
- // -2.8122287);
-
- } // namespace gaussianBeam
-
- struct GaussianBeamParam
- {
- /** unit: meter */
- static constexpr float_64 WAVE_LENGTH_SI = PARAM_WAVE_LENGTH_SI;
-
- /** Convert the normalized laser strength parameter a0 to Volt per meter */
- static constexpr float_64 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;
-
- /** unit: W / m^2 */
- // calculate: _A0 = 8.549297e-6 * sqrt( Intensity[W/m^2] ) * wavelength[m] (linearly polarized)
-
- /** unit: none */
- static constexpr float_64 _A0 = PARAM_A0;
-
- /** unit: Volt / meter */
- static constexpr float_64 AMPLITUDE_SI = _A0 * UNITCONV_A0_to_Amplitude_SI;
-
- /** unit: Volt / meter */
- // static constexpr float_64 AMPLITUDE_SI = 1.738e13;
-
- /** 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) */
- static constexpr float_64 PULSE_LENGTH_SI = PARAM_PULSE_LENGTH_SI;
-
- /** 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 */
- static constexpr float_64 W0_SI = 5.0e-6 / 1.17741;
- /** the distance to the laser focus in y-direction
- * unit: meter */
- static constexpr float_64 FOCUS_POS_SI = 4.62e-5;
-
- /** The laser pulse will be initialized PULSE_INIT times of the PULSE_LENGTH
- *
- * unit: none */
- static constexpr float_64 PULSE_INIT = 15.0;
-
- /** cell from top where the laser is initialized
- *
- * if `initPlaneY == 0` than the absorber are disabled.
- * if `initPlaneY > absorbercells negative Y` the negative absorber in y
- * direction is enabled
- *
- * valid ranges:
- * - initPlaneY == 0
- * - absorber cells negative Y < initPlaneY < cells in y direction of the top gpu
- */
- static constexpr uint32_t initPlaneY = 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
- */
- static constexpr float_X LASER_PHASE = 0.0;
-
- using LAGUERREMODES_t = gaussianBeam::LAGUERREMODES_t;
- using LAGUERREPHASES_t = gaussianBeam::LAGUERREPHASES_t;
- static constexpr uint32_t MODENUMBER = gaussianBeam::MODENUMBER;
-
- /** Available polarisation types
- */
- enum PolarisationType
- {
- LINEAR_X = 1u,
- LINEAR_Z = 2u,
- CIRCULAR = 4u,
- };
- /** Polarization selection
- */
- static constexpr PolarisationType Polarisation = CIRCULAR;
- };
-
- //! currently selected laser profile
- using Selected = GaussianBeam;
-
- } // namespace laserProfiles
- } // namespace fields
-} // namespace picongpu
diff --git a/share/picongpu/examples/LaserWakefield/include/picongpu/param/png.param b/share/picongpu/examples/LaserWakefield/include/picongpu/param/png.param
index 8749ed736b..9928dd7639 100644
--- a/share/picongpu/examples/LaserWakefield/include/picongpu/param/png.param
+++ b/share/picongpu/examples/LaserWakefield/include/picongpu/param/png.param
@@ -48,7 +48,7 @@ namespace picongpu
// 6: Custom: user-provided normalization factors via customNormalizationSI
// 7: Incident: typical fields calculated out of the incident field amplitude,
// uses max amplitude from all enabled incident field profile types ignoring Free
-#define EM_FIELD_SCALE_CHANNEL1 1
+#define EM_FIELD_SCALE_CHANNEL1 7
#define EM_FIELD_SCALE_CHANNEL2 -1
#define EM_FIELD_SCALE_CHANNEL3 -1