Source code for thunderboltz.parameters

class Parameters(object):
    """An enumeration of parameters which can be indexed
    like a dictionary."""

    def __index__(self, s):
        return getattr(self, s)

    def get_params(self):
        """Return the set of parameters and their default values
        as a python dictionary."""
        return {k: v for k, v in self.__class__.__dict__.items()
                if "__" not in k}

[docs] class TBParameters(Parameters): """The ThunderBoltz simulation settings and their default values.""" #: (float) Cell length (m), default is ``1e-6``. L=1e-6 #: (int) Number of species, default is ``2``. SP=2 #: (list[int]) Number of particles for each species, #: default is ``[10000, 1000]``. NP=[10000, 1000] #: (list[float]) Temperature (eV) of each particle species, default #: is ``[0.0, 0.0259]``. TP=[0.0, 0.0259] #: (list[float]) Flow velocity for each particle, default is ``[0.0, 0.0]``. VV=[0.0, 0.0] #: (list[int]) Charge (elementary units) of each particle species, #: default is ``[-1.0, 0.0]``. QP=[-1.0, 0.0] #: (list[float]) Mass of each particle species (amu), #: default is ``[5.4857e-4, 28.0]``. MP=[5.4857e-4, 28.0] #: (int) Number of time steps, default is ``1000001``. NS=1000001 #: (int) Number of random samples used to find #: :math:`\max_\epsilon (v\sigma(\epsilon))` for each process, #: default is ``1000``. VS=1000 #: (float) Time increment interval (s), default is ``5e-12``. DT=5.0e-12 #: (float) Electric field in z-direction (V/m), default is #: ``-24640.0``. E=-24640.0 #: (float) E-field oscillation frequency (Hz), default is ``0``. ET=0. #: (list[int]) Magnetic field vector (Tesla), #: default is ``[0.0, 0.0, 0.0]``. B=[0.0, 0.0, 0.0] #: (list[int]) Output velocity dump settings [start, stride, species ID], #: default is ``[1000, 1000000, 0]``. FV=[1000, 1000000, 0] #: (int) Cross section extrapolation — options are ``0`` (extrapolated #: cross sections are set to :math:`0` m :math:`^2`), or #: ``1`` (linearly extrapolated from last two points), default is ``0``. EX=0 #: (float) Request memory (GB) for particle arrays. If 0 is passed, #: then enough space for :math:`4N_{\rm init}` will be #: allocated, default is ``0``. MEM=0. #: (int) When using a SLURM manager on HPC, auto dump particle velocity #: data before job allocation runs out — #: options are ``0`` (don't auto dump) | ``1`` (dump using SLURM setup). SE=0 #: (int) Time step stride for output parameters, default is ``100``. OS=100 #: (int) If ``1``, then the remainder of :math:`N_{\rm pairs}` is #: carried into the next :math:`N_{\rm pairs}` evaluation of the #: same process, default is ``1``. CR=0 #: (list[str,int]) Optionally load particle velocities from a comma separated #: text file, default is ``None``; specify the name of the file at index #: ``0`` and the particle species index it applies to at index ``1``. LV=None
[docs] class WrapParameters(Parameters): """Additional Python interface settings and their defaults. An asterisk (*) at the beginning of the description indicates a parameter that is specific to the built-in He model. """ #: (float) Specify reduced electric field (Td), #: default is ``None``. Ered=None #: (list[float]) Specify reduced magnetic field (Hx), #: default is ``None``. Bred=None #: (int) The index of the neutral gas species (if applicable), #: default is ``1``. gas_index=1 #: (float) Run simulation until duration (s) is complete, #: default is ``None``. duration=None #: (int) Number of background neutral gas particles #: (assumed gas species is of index 1), default is ``None``. NN=None #: (float) Set the ratio :math:`\frac{N_{\rm e}}{N_{\rm gas}}`, #: default is ``None``. pct_ion=None #: (float) Minimum number of pseudo pairs to be generated by the #: smallest cross section of interest, default is ``1.0``. Nmin=1.0 #: (float) The initial energy (eV) of a hypothetical electron per time step, #: default is ``10``. EP_0=10. #: (float) The maximum change in energy (eV) of a hypothetical electron per time #: step, default is ``0.1``. DE=0.1 #: (bool) Flag to calculate ``DT`` / ``NP`` / ``E`` from ``Ered`` / ``L`` / #: ``pct_ion`` / ``DE`` / ``EP_0``, default is ``False``. autostep=False #: (dict[str->float]) Multiply any property involved in the :math:`N_{\rm min}` #: constraint by a constant after the constraint is imposed; useful for #: convergence testing, default is ``{}`` (do nothing). pc_scale={} #: (callable or str) Function for auto-generating indeck and CS object or #: string path to directory with CS data and indeck, #: default is ``None``. indeck=None #: (list[str or int or 2D-array, int]) Initialize particles with velocity data — #: a string at index ``0`` will read velocity data from that file path; #: an int at index ``0`` will attempt to reinitialize a previous calculation #: from a that time step if that step dump file is available; #: an array or DataFrame of shape (NP,3) at index ``0`` #: will create a velocity initialization file with the provided data, #: the value at index 1 should represent the species type. vdf_init=None #: (bool) If specified with ``vdf_init``, truncate the init file #: such that NP is satisfied, default is ``False``. downsample=False # Cross section model #: *(int) For the built-in ``thunderboltz.input.He_TB`` Helium model, include CCC excitation #: processes from the ground state to (up to and including) states with #: principle quantum number ``n``. n=3 #: *(str or bool) For the built-in ``thunderboltz.input.He_TB`` Helium model, use #: either tabulated data, analytic fits, or a mix of both, #: options are ``False`` | ``True`` | ``"mixed"``. analytic_cs="mixed" #: *(int) For the built-in ``thunderboltz.input.He_TB``, this specifies #: the number of tabulated cross section values for analytic sampling. nsamples=250 #: *(float) If ``analytic_cs`` is ``"mixed"``, use numerical data #: at energies lower than this threshold value (in eV), and use analytic #: data at higher energies. mix_thresh=300 #: (bool) Flag to append "FixedParticle2" to each of the reaction types in the indeck fixed_background=True #: (str) Elastic angular distribution function model — #: options are ``"default"``, or ``"He_Park"``. eadf="default" #: *(str or None) The total elastic cross section model for the He built-in — #: options are ``"ICS"`` or ``"MTCS"``, default is ``"ICS"`` if an anisotropic #: angular distribution function is used and ``"MTCS"`` if an isotropic #: angular distribution function is used. ECS=None # Ionization model egen=False #: *(bool) Allow secondary electron generation for the ionization model. #: (str) Electron energy sharing distribution model — options are #: ``"default"`` (one takes all) | ``"equal"`` | ``"uniform"``. eesd="default"
[docs] class OutputParameters(Parameters): """A listing of the main output parameters of the simulation, these keywords are the named columns of the time series and steady state data frames returned by :meth:`~.thunderboltz.ThunderBoltz.get_timeseries` and :meth:`~.thunderboltz.ThunderBoltz.get_ss_params` respectively. These data tables also include the :class:`ParticleParameters` of the species at index :math:`0`. The steady state parameters returned by :meth:`~.thunderboltz.ThunderBoltz.get_ss_params` will also include standard deviations for each parameter indicated by an added "_std" suffix. """ #: (float) The mean energy (eV) of the species at index :math:`0` (usually electrons), #: computed as #: :math:`\langle\epsilon\rangle = \frac{m_0}{2N_0}\sum_{i=1}^{N_0}v_{0i}^2` #: where :math:`m_0` and :math:`N_0` are the mass and particle count #: of the :math:`0^{\rm th}` species, and :math:`v_{0i}` is the velocity #: vector of the :math:`i^{\rm th}` particle of species :math:`0`. MEe=0. #: (float) The reduced flux mobility :math:`(\text{V}^{-1}\text{m}^{-1}\text{s}^{-1})` #: of the species at index :math:`0`, computed as #: :math:`\mu^fn_{\rm gas}=\frac{n_{\rm gas}}{E}\frac{1}{N_0}\sum_{i=1}^{N_0}v_{\parallel,0i}` #: where :math:`N_0` is the particle count of the :math:`0^{\rm th}` species, :math:`E` is #: field magnitude, :math:`n_{\rm gas}` is the density of the background #: gas, and :math:`v_{\parallel,0i}` is the velocity component #: parallel to the E field vector of the :math:`i^{\rm th}` th particle of species :math:`0`. mobN=0. #: (float) The reduced bulk mobility :math:`(\text{V}^{-1}\text{m}^{-1}\text{s}^{-1})` #: of the species at index :math:`0`, computed as #: :math:`\mu^b n_{\rm gas}=\frac{n_{\rm gas}}{E}\frac{d}{dt}\left[\frac{1}{N_0}\sum_{i=1}^{N_0}r_{\parallel,0i}\right]` #: where :math:`N_0` is the particle count of the :math:`0^{\rm th}` species, :math:`E` is #: field magnitude, :math:`n_{\rm gas}` is the density of the background gas, #: and :math:`r_{\parallel,0i}` is displacement component #: parallel to the E field vector of the :math:`i^{\rm th}` th particle of species :math:`0`. mobN_bulk=0. #: (float) The reduced flux Townshend ionization coefficient :math:`(\text{m}^2)` #: of the species at index :math:`0`, computed as #: :math:`\frac{\alpha^f}{n_{\rm gas}} = \frac{1}{n_0 n_{\rm gas}}\frac{dC_{\rm ion}}{dt}\times \left( \frac{1}{N_0}\sum_{i=1}^{N_0}v_{\parallel,0i}\right)^{-1}` #: where :math:`N_0` is the particle count of the :math:`0^{\rm th}` species, :math:`C_{\rm ion}` is #: the count of ionization events, :math:`n_0` and :math:`n_{\rm gas}` are the #: :math:`0^{\rm th}` and background gas densities repectively, and :math:`v_{\parallel,0i}` is velocity component #: parallel to the E field vector of the :math:`i^{\rm th}` th particle of species :math:`0`. a_n=0. #: (float) The reduced bulk Townshend ionization coefficient :math:`(\text{m}^2)` #: of the species at index :math:`0`, computed as #: :math:`\frac{\alpha^b}{n_{\rm gas}} = \frac{1}{n_0 n_{\rm gas}}\frac{dC_{\rm ion}}{dt}\times\left( \frac{d}{dt} \left[\frac{1}{N_0}\sum_{i=1}^{N_0}r_{\parallel,0i}\right] \right)^{-1}`, #: where :math:`N_0` is the particle count of the :math:`0^{\rm th}` species, :math:`C_{\rm ion}` is #: the count of ionization events, :math:`n_0` and :math:`n_{\rm gas}` are the #: :math:`0^{\rm th}` and background gas densities respectively, and :math:`r_{\parallel,0i}` is displacement component #: parallel to the E field vector of the :math:`i^{\rm th}` th particle of species :math:`0`. a_n_bulk=0. #: (float) :math:`n_{\rm gas}`, the number density of the background gas. n_gas=0. #: (float) The electric field component (V/m) in the :math:`z` direction, which #: can change in AC scenarios. E=0. t=0. #: (float) The time (s) elapsed in the simulation. #: (int) The number of time steps elapsed in the simulation, with #: ``t`` :math:`=0` corresponding to ``step`` :math:`=0`, and with #: ``t`` = ``DT`` corresponding to ``step`` :math:`=1`. step=0 #: (float) The ionization rate coefficient, computed as #: :math:`\frac{1}{n_0n_{\rm gas}} \frac{dC_{\rm ion}}{dt}`. k_ion=0. #: (float) The rate coefficient for the first reaction, computed as #: :math:`\frac{1}{n_0n_{\rm gas}} \frac{dC_{\rm 1}}{dt}`. If there are #: :math:`n` reactions included in the model, there will be the #: corresponding rate coefficients, :math:`k_1, k_2, ..., k_n` also #: included in the output tables. k_1=0. #: (float) The diagonal components of the flux diffusion tensor #: :math:`\overleftrightarrow{\boldsymbol{D}}^f = \langle \boldsymbol{r} \boldsymbol{v} \rangle - \langle \boldsymbol{r} \rangle \langle \boldsymbol{v} \rangle` #: are output under ``D_XX``, ``D_YY``, and ``D_ZZ``. D_XX=0. #: (float) The hall components of the flux diffusion tensor #: :math:`\overleftrightarrow{\boldsymbol{D}}^f = \langle \boldsymbol{r} \boldsymbol{v} \rangle - \langle \boldsymbol{r} \rangle \langle \boldsymbol{v} \rangle` #: are combined into the flux Hall diffusion :math:`D^f_{\text{H}} = D^f_{xz} + D^f_{zx}`. D_H=0. #: (float) The diagonal components of the bulk diffusion tensor #: :math:`\overleftrightarrow{\boldsymbol{D}}^b = \frac{1}{2} \frac{\text{d}}{\text{d}t}\langle (\boldsymbol{r} - \langle \boldsymbol{r}\rangle)^2 \rangle` #: are output under ``D_XX_bulk``, ``D_YY_bulk``, and ``D_ZZ_bulk``. D_XX_bulk=0. #: (float) The hall components of the bulk diffusion tensor #: :math:`\overleftrightarrow{\boldsymbol{D}}^b = \frac{1}{2} \frac{\text{d}}{\text{d}t}\langle (\boldsymbol{r} - \langle \boldsymbol{r}\rangle)^2 \rangle` #: are combined into the bulk Hall diffusion :math:`D^b_{\text{H}} = D^b_{xz} + D^b_{zx}`. D_H_bulk=0.
[docs] class ParticleParameters(Parameters): """A listing of species dependent properties that can be accessed by :meth:`~.thunderboltz.ThunderBoltz.get_particle_tables`, which returns a list of data tables (one for each species) where each column of data is labeled with one of the following keywords.""" #: (int) The number of time steps elapsed in the simulation, with #: ``t`` :math:`=0` corresponding to ``step`` :math:`=0`. step=0 Ni=0.0 #: (float) The number density (m :math:`^{-3}`). Ki=0.0 #: (float) The total kinetic energy (eV). Mi=0.0 #: (float) The mean kinetic energy (eV). t=0. #: (float) The time (s) elapsed in the simulation. Rxi=0. #: (float) The mean x component of all particle displacements (m). Ryi=0. #: (float) The mean y component of all particle displacements (m). Rzi=0. #: (float) The mean z component of all particle displacements (m). Vxi=0. #: (float) The mean x component velocity (m/s). Vyi=0. #: (float) The mean y component velocity (m/s). Vzi=0. #: (float) The mean z component velocity (m/s). Txi=0. #: (float) The mean x component temperature (eV). Tyi=0. #: (float) The mean y component temperature (eV). Tzi=0. #: (float) The mean z component temperature (eV). #: (float) All 6 components of the symmetric correlation tensor #: :math:`\langle \boldsymbol{r} \boldsymbol{r} \rangle` are output under #: ``XX``, ``YY``, ``ZZ``, ``XY``, ``XZ``, and ``YZ``. XX=0. #: (float) All 9 components of the position / velocity correlation tensor #: :math:`\langle \boldsymbol{r} \boldsymbol{v} \rangle` are output under #: ``XYX``, ``XVY``, ``XVZ``, ``YVX``, ``YVY``, ``YVZ``, ``ZVX``, ``ZVY``, and ``ZVZ``. XVX=0.
tb_parameters = TBParameters().get_params() wrap_parameters = WrapParameters().get_params() output_parameters = OutputParameters().get_params() particle_parameters = ParticleParameters().get_params()