aboutsummaryrefslogtreecommitdiff
path: root/Docs/source/running_cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Docs/source/running_cpp')
-rw-r--r--Docs/source/running_cpp/parameters.rst135
1 files changed, 98 insertions, 37 deletions
diff --git a/Docs/source/running_cpp/parameters.rst b/Docs/source/running_cpp/parameters.rst
index 13088f69c..32ac12104 100644
--- a/Docs/source/running_cpp/parameters.rst
+++ b/Docs/source/running_cpp/parameters.rst
@@ -171,6 +171,10 @@ Particle initialization
Whether particle's weight is varied with their radius. This only applies to cylindrical geometry.
The only valid value is true.
+ * ``predefined``: use one of WarpX predefined plasma profiles. It requires additional
+ arguments ``<species_name>.predefined_profile_name`` and
+ ``<species_name>.predefined_profile_params`` (see below).
+
* ``<species_name>.momentum_distribution_type`` (`string`)
Distribution of the normalized momentum (`u=p/mc`) for this species. The options are:
@@ -206,6 +210,37 @@ Particle initialization
* If ``true``, each particle is advanced with the average speed of the species
``vzbar`` until it reaches ``zinject_plane``.
+* ``species_name.predefined_profile_name`` (`string`)
+ Only read of ``<species_name>.electrons.profile`` is `predefined`.
+
+ * If ``parabolic_channel``, the plasma profile is a parabolic profile with linear ramps
+ at the beginning and the end of the profile. The density is given by
+
+ .. math::
+
+ n = n_0 n(x,y) n(z)
+
+ with
+
+ .. math::
+
+ n(x,y) = 1 + 4\frac{x^2+y^2}{k_p^2 R_c^4}
+
+ where :math:`k_p` is the plasma wavenumber associated with density :math:`n_0`.
+ Here, :math:`n(z)` is a linear up-ramp from :math:`0` to :math:`L_{ramp,up}`,
+ constant to :math:`1` from :math:`L_{ramp,up}` to :math:`L_{ramp,up} + L_{plateau}`
+ and a linear down-ramp from :math:`L_{ramp,up} + L_{plateau}` to
+ :math:`L_{ramp,up} + L_{plateau}+L_{ramp,down}`. All parameters are given
+ in ``predefined_profile_params``.
+
+* ``<species_name>.predefined_profile_params`` (list of `float`)
+ Parameters for the predefined profiles.
+
+ * If ``species_name.predefined_profile_name`` is ``parabolic_channel``,
+ ``predefined_profile_params`` contains a space-separated list of the
+ following parameters, in this order: :math:`L_{ramp,up}` :math:`L_{plateau}`
+ :math:`L_{ramp,down}` :math:`R_c` :math:`n_0`
+
* ``<species_name>.do_backward_injection`` (`bool`)
Inject a backward-propagating beam to reduce the effect of charge-separation
fields when running in the boosted frame. See examples.
@@ -225,28 +260,35 @@ Particle initialization
Laser initialization
--------------------
-* ``warpx.use_laser`` (`0 or 1`) optional (default `0`)
- Whether to activate the injection of a laser pulse in the simulation
+* ``lasers.nlasers`` (`int`) optional (default `0`)
+ Number of lasers pulses.
+
+* ``lasers.names`` (list of `string`. Must contain ``lasers.nlasers`` elements)
+ Name of each laser. This is then used in the rest of the input deck ;
+ in this documentation we use `<laser_name>` as a placeholder. The parameters below
+ must be provided for each laser pulse.
-* ``laser.position`` (`3 floats in 3D and 2D` ; in meters)
+* ```<laser_name>`.position`` (`3 floats in 3D and 2D` ; in meters)
The coordinates of one of the point of the antenna that will emit the laser.
- The plane of the antenna is entirely defined by ``laser.position`` and ``laser.direction``.
+ The plane of the antenna is entirely defined by ``<laser_name>.position``
+ and ``<laser_name>.direction``.
- ``laser.position`` also corresponds to the origin of the coordinates system
+ ```<laser_name>`.position`` also corresponds to the origin of the coordinates system
for the laser tranverse profile. For instance, for a Gaussian laser profile,
- the peak of intensity will be at the position given by ``laser.position``.
+ the peak of intensity will be at the position given by ``<laser_name>.position``.
This variable can thus be used to shift the position of the laser pulse
transversally.
.. note::
- In 2D, ``laser.position`` is still given by 3 numbers, but the second number is ignored.
+ In 2D, ```<laser_name>`.position`` is still given by 3 numbers,
+ but the second number is ignored.
When running a **boosted-frame simulation**, provide the value of
- ``laser.position`` in the laboratory frame, and use ``warpx.gamma_boost``
+ ``<laser_name>.position`` in the laboratory frame, and use ``warpx.gamma_boost``
to automatically perform the conversion to the boosted frame. Note that,
in this case, the laser antenna will be moving, in the boosted frame.
-* ``laser.polarization`` (`3 floats in 3D and 2D`)
+* ``<laser_name>.polarization`` (`3 floats in 3D and 2D`)
The coordinates of a vector that points in the direction of polarization of
the laser. The norm of this vector is unimportant, only its direction matters.
@@ -254,7 +296,7 @@ Laser initialization
Even in 2D, all the 3 components of this vectors are important (i.e.
the polarization can be orthogonal to the plane of the simulation).
-* ``laser.direction`` (`3 floats in 3D`)
+* ``<laser_name>.direction`` (`3 floats in 3D`)
The coordinates of a vector that points in the propagation direction of
the laser. The norm of this vector is unimportant, only its direction matters.
@@ -262,10 +304,10 @@ Laser initialization
.. warning::
- When running **boosted-frame simulations**, ``laser.direction`` should
+ When running **boosted-frame simulations**, ``<laser_name>.direction`` should
be parallel to ``warpx.boost_direction``, for now.
-* ``laser.e_max`` (`float` ; in V/m)
+* ``<laser_name>.e_max`` (`float` ; in V/m)
Peak amplitude of the laser field.
For a laser with a wavelength :math:`\lambda = 0.8\,\mu m`, the peak amplitude
@@ -275,45 +317,45 @@ Laser initialization
E_{max} = a_0 \frac{2 \pi m_e c}{e\lambda} = a_0 \times (4.0 \cdot 10^{12} \;V.m^{-1})
- When running a **boosted-frame simulation**, provide the value of ``laser.e_max``
+ When running a **boosted-frame simulation**, provide the value of ``<laser_name>.e_max``
in the laboratory frame, and use ``warpx.gamma_boost`` to automatically
perform the conversion to the boosted frame.
-* ``laser.wavelength`` (`float`; in meters)
+* ``<laser_name>.wavelength`` (`float`; in meters)
The wavelength of the laser in vacuum.
When running a **boosted-frame simulation**, provide the value of
- ``laser.wavelength`` in the laboratory frame, and use ``warpx.gamma_boost``
+ ``<laser_name>.wavelength`` in the laboratory frame, and use ``warpx.gamma_boost``
to automatically perform the conversion to the boosted frame.
-* ``laser.profile`` (`string`)
+* ``<laser_name>.profile`` (`string`)
The spatio-temporal shape of the laser. The options that are currently
implemented are:
- ``"Gaussian"``: The transverse and longitudinal profiles are Gaussian.
- ``"Harris"``: The transverse profile is Gaussian, but the longitudinal profile
- is given by the Harris function (see ``laser.profile_duration`` for more details)
+ is given by the Harris function (see ``<laser_name>.profile_duration`` for more details)
- ``"parse_field_function"``: the laser electric field is given by a function in the
- input file. It requires additional argument ``laser.field_function(X,Y,t)``, which
+ input file. It requires additional argument ``<laser_name>.field_function(X,Y,t)``, which
is a mathematical expression , e.g.
- ``laser.field_function(X,Y,t) = "a0*X**2 * (X>0) * cos(omega0*t)"`` where
+ ``<laser_name>.field_function(X,Y,t) = "a0*X**2 * (X>0) * cos(omega0*t)"`` where
``a0`` and ``omega0`` are a user-defined constant, see above. The profile passed
here is the full profile, not only the laser envelope. ``t`` is time and ``X``
- and ``Y`` are coordinates orthogonal to ``laser.direction`` (not necessarily the
+ and ``Y`` are coordinates orthogonal to ``<laser_name>.direction`` (not necessarily the
x and y coordinates of the simulation). All parameters above are required, but
- none of the parameters below are used when ``laser.parse_field_function=1``. Even
- though ``laser.wavelength`` and ``laser.e_max`` should be included in the laser
+ none of the parameters below are used when ``<laser_name>.parse_field_function=1``. Even
+ though ``<laser_name>.wavelength`` and ``<laser_name>.e_max`` should be included in the laser
function, they still have to be specified as they are used for numerical purposes.
-* ``laser.profile_t_peak`` (`float`; in seconds)
+* ``<laser_name>.profile_t_peak`` (`float`; in seconds)
The time at which the laser reaches its peak intensity, at the position
- given by ``laser.position`` (only used for the ``"gaussian"`` profile)
+ given by ``<laser_name>.position`` (only used for the ``"gaussian"`` profile)
When running a **boosted-frame simulation**, provide the value of
- ``laser.profile_t_peak`` in the laboratory frame, and use ``warpx.gamma_boost``
+ ``<laser_name>.profile_t_peak`` in the laboratory frame, and use ``warpx.gamma_boost``
to automatically perform the conversion to the boosted frame.
-* ``laser.profile_duration`` (`float` ; in seconds)
+* ``<laser_name>.profile_duration`` (`float` ; in seconds)
The duration of the laser, defined as :math:`\tau` below:
@@ -330,42 +372,61 @@ Laser initialization
E(\boldsymbol{x},t) \propto \frac{1}{32}\left[10 - 15 \cos\left(\frac{2\pi t}{\tau}\right) + 6 \cos\left(\frac{4\pi t}{\tau}\right) - \cos\left(\frac{6\pi t}{\tau}\right) \right]\Theta(\tau - t)
When running a **boosted-frame simulation**, provide the value of
- ``laser.profile_duration`` in the laboratory frame, and use ``warpx.gamma_boost``
+ ``<laser_name>.profile_duration`` in the laboratory frame, and use ``warpx.gamma_boost``
to automatically perform the conversion to the boosted frame.
-* ``laser.profile_waist`` (`float` ; in meters)
+* ``<laser_name>.profile_waist`` (`float` ; in meters)
The waist of the transverse Gaussian laser profile, defined as :math:`w_0` :
.. math::
E(\boldsymbol{x},t) \propto \exp\left( -\frac{\boldsymbol{x}_\perp^2}{w_0^2} \right)
-* ``laser.profile_focal_distance`` (`float`; in meters)
+* ``<laser_name>.profile_focal_distance`` (`float`; in meters)
The distance from ``laser_position`` to the focal plane.
- (where the distance is defined along the direction given by ``laser.direction``.)
+ (where the distance is defined along the direction given by ``<laser_name>.direction``.)
Use a negative number for a defocussing laser instead of a focussing laser.
When running a **boosted-frame simulation**, provide the value of
- ``laser.profile_focal_distance`` in the laboratory frame, and use ``warpx.gamma_boost``
+ ``<laser_name>.profile_focal_distance`` in the laboratory frame, and use ``warpx.gamma_boost``
to automatically perform the conversion to the boosted frame.
-* ``laser.stc_direction`` (`3 floats`) optional (default `1. 0. 0.`)
+* ``<laser_name>.stc_direction`` (`3 floats`) optional (default `1. 0. 0.`)
Direction of laser spatio-temporal couplings.
See definition in Akturk et al., Opt Express, vol 12, no 19 (2014).
-* ``laser.zeta`` (`float`; in meters.seconds) optional (default `0.`)
- Spatial chirp at focus in direction ``laser.stc_direction``. See definition in
+* ``<laser_name>.zeta`` (`float`; in meters.seconds) optional (default `0.`)
+ Spatial chirp at focus in direction ``<laser_name>.stc_direction``. See definition in
Akturk et al., Opt Express, vol 12, no 19 (2014).
-* ``laser.beta`` (`float`; in seconds) optional (default `0.`)
- Angular dispersion (or angular chirp) at focus in direction ``laser.stc_direction``.
+* ``<laser_name>.beta`` (`float`; in seconds) optional (default `0.`)
+ Angular dispersion (or angular chirp) at focus in direction ``<laser_name>.stc_direction``.
See definition in Akturk et al., Opt Express, vol 12, no 19 (2014).
-* ``laser.phi2`` (`float`; in seconds**2) optional (default `0.`)
+* ``<laser_name>.phi2`` (`float`; in seconds**2) optional (default `0.`)
Temporal chirp at focus.
See definition in Akturk et al., Opt Express, vol 12, no 19 (2014).
+* ``warpx.num_mirrors`` (`int`) optional (default `0`)
+ Users can input perfect mirror condition inside the simulation domain.
+ The number of mirrors is given by ``warpx.num_mirrors``. The mirrors are
+ orthogonal to the `z` direction. The following parameters are required
+ when ``warpx.num_mirrors`` is >0.
+
+* ``warpx.mirror_z`` (list of `float`) required if ``warpx.num_mirrors>0``
+ ``z`` location of the front of the mirrors.
+
+* ``warpx.mirror_z_width`` (list of `float`) required if ``warpx.num_mirrors>0``
+ ``z`` width of the mirrors.
+
+* ``warpx.mirror_z_npoints`` (list of `int`) required if ``warpx.num_mirrors>0``
+ In the boosted frame, depending on `gamma_boost`, ``warpx.mirror_z_width``
+ can be smaller than the cell size, so that the mirror would not work. This
+ parameter is the minimum number of points for the mirror. If
+ ``mirror_z_width < dz/cell_size``, the upper bound of the mirror is increased
+ so that it contains at least ``mirror_z_npoints``.
+
Numerics and algorithms
-----------------------