ThunderBoltz Documentation

This documentation includes instruction on installation and compilation of ThunderBoltz source code and descriptions of the input and output simulation parameters involved.

Installation

The Python API can be installed via pip.

pip install thunderboltz

The code can also be downloaded from the repository. Use the following command to clone the code into a local repository.

git clone git@github.com:lanl/ThunderBoltz.git

You may need to set up SSH keys in order to access Github. See the Github SSH Guide to set up access to Github repositories.

The basic ThunderBoltz functionality is available either as an executable in bin/thunderboltz.bin or can be compiled from the source in src/thunderboltz/cpp.

Compilation

ThunderBoltz requires a g++ of clang compiler and should be compiled from source directories as

g++ -std=c++17 -o thunderboltz.bin DSMC0D.cpp

Then run with

./thunderboltz.bin inputfile.in

to use a manually constructed indeck file. The code is maintained with the standard -Wall and -Werror compiler options.

Here is an example of how to run a simple ThunderBoltz calculation.

# Make a directory for testing
mkdir example_sim
cd example_sim
# Copy the source over
cp ../src/thunderboltz/* .
# Copy example input files over
cp -r ../indecks/N2/* .
# Compile
g++ -std=c++17 -o thunderboltz.bin DSMC0D.cpp
# Run
./thunderboltz.bin N2vib.in

Simulation Parameters

Input Parameters

thunderboltz.parameters.TBParameters()

The ThunderBoltz simulation settings and their default values.

Output Parameters

thunderboltz.parameters.OutputParameters()

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 get_timeseries() and get_ss_params() respectively.

thunderboltz.parameters.ParticleParameters()

A listing of species dependent properties that can be accessed by 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.

Electron Growth and Memory Management

Depending on the ionization model and field strength, ThunderBoltz may generate a large number of electrons. In these cases, the appropriate amount of memory must be allocated. The correct amount will be allocated automatically in scenarios where no ionization process is used, or when the IonizationNoEgen model is used. This amount will be allocated based on the sum of all NP elements times 4.

However, in scenarios where there is significant electron generation, i.e. at high \(E\) fields with the Ionization model on, the default memory settings are not sufficient and the simulation will exit with the error “Too many particles!”. To prevent this specify the MEM flag in the indeck. MEM will accept any float representing the number of gigabytes to be made available to the particle arrays.

Warning

If the value of MEM is more than the actual number of available GB, then the simulation will still run, but will exit with a segmentation fault once too many particles are created.

Warning

When using multiple cores on the same machine / node, ensure that each process has enough memory requested and that the sum of memory requests does not exceed the available pool of RAM.