Skip to content

Parallel, relativistic 1d3v PIC code written in Rust

License

Notifications You must be signed in to change notification settings

tgblackburn/opal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

opal

Parallel, relativistic 1d3v PIC code. Written primarily to do some plasma physics in the strong-field QED regime, but also to test Rust as a platform for HPC.

Build

The following need to be installed:

Opal has been tested with OpenMPI and MPICH.

All other dependencies are Rust crates that are downloaded automatically by Cargo. Then building should be as simple as:

cargo build --release [-j NUM_THREADS] [--features FEATURES]

where NUM_THREADS is the number of separate threads that Cargo is allowed to spawn. FEATURES is a comma-separated list of compile-time options (listed in Cargo.toml) that are disabled by default.

Specify problem

opal takes as its single argument the path to a YAML file describing the input configuration. Output is automatically written to the same directory as this file. The inputs for some test problems can be found in examples. Starting from scratch, the input needs to contain the following sections:

  • control
  • qed
  • electrons
  • ions

and optionally

  • photons (if photon emission or absorption are enabled)
  • constants

The structure of the input file is described in detail here.

Run

opal has a hybrid parallelization scheme, using MPI to split the grid into subdomains, and Rayon for each subdomain.

Assuming Opal has been downloaded to opal_directory and already built,

cd opal_directory
export RAYON_NUM_THREADS=nt
mpirun -n np ./target/release/opal path/to/input.yaml

will run Opal, distributing the domain over np MPI tasks, and assigning nt theads per task. The right balance between the number of tasks and threads is system-dependent.

About

Parallel, relativistic 1d3v PIC code written in Rust

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages