See also

You need to have an environment loaded (. $HOME/picongpu.profile) that provides all PIConGPU dependencies to complete this chapter.

Basics

Preparation

First, decide where to store input files, a good place might be $HOME (~) because it is usually backed up. Second, decide where to store your output of simulations which needs to be placed on a high-bandwidth, large-storage file system which we will refer to as $SCRATCH.

As in our compiling from source section, we need a few directories to structure our workflow:

# source code
mkdir $HOME/src
# temporary build directory
mkdir $HOME/build

# PIConGPU input files
mkdir $HOME/paramSets
# PIConGPU simulation output
mkdir $SCRATCH/runs

Step-by-Step

TL;DR

(“too long, didn’t read and know how compiling works”)

pic-create ~/paramSets/originalSet ~/paramSets/myLWFA

cd ~/build
pic-configure $HOME/paramSets/myLWFA
make -j install

cd ~/paramSets/myLWFA
tbg -s qsub -c submit/0016gpus.cfg -t submit/hypnos-hzdr/k20_profile.tpl $SCRATCH/runs/lwfa_001

1. Create an Input (Parameter) Set

# clone the LWFA example to $HOME/paramSets/myLWFA
pic-create $PICSRC/examples/LaserWakefield/ $HOME/paramSets/myLWFA

Now edit $HOME/paramSets/case001/include/simulation_defines/param/* to change the physical configuration of this parameter set.

Now edit $HOME/paramSets/case001/submit/*.cfg to adjust runtime parameters (simulation size, number of GPUs, plugins, …).

Hint: you can further create parameter sets from parameter sets.

2. Compile Simulation

New .param files in inputs or changes of parameters in excisting files require a re-compile of PIConGPU. Our script pic-configure is a wrapper for CMake to quickly specify which parameter set and source version of PIConGPU shall be used.

# go to an empty build directory
cd $HOME/build
# clean it if necessary
rm -rf ../build/*

# configure case001
pic-configure $HOME/paramSets/myLWFA

# compile PIConGPU with the current parameter set (myLWFA)
# - "make -j install" runs implicitly "make -j" and then "make install"
# - make install copies resulting binaries to parameter set
make -j install

We always configure one parameter set for one compilation. If you adjust .param input files just now, you can just go back to $HOME/build and run make -j install again without further need to clean the directory or configuration.

3. Run Simulation

# go to param set with up-to-date PIConGPU binaries
cd $HOME/paramSets/myLWFA

# example run for the HPC System "hypnos" using a PBS batch system
tbg -s qsub -c submit/0016gpus.cfg -t submit/hypnos-hzdr/k20_profile.tpl $SCRATCH/runs/lwfa_001

This will create the directory $SCRATCH/runs/lwfa_001 were all simulation output will be written to. tbg will further create a subfolder picongpu/ in the directory of the run with the same structure as myLWFA to archive your input files.

Further Reading

Individual input files, their syntax and usage are explained in the following sections.

See pic-create --help for more options during parameter set creation:

pic-create create a new parameter set for simulation input
merge default picongpu parameters and a given example's input

usage: pic-create [OPTION] [src_dir] dest_dir
If no src_dir is set picongpu a default case is cloned

-f | --force         - merge data if destination already exists
-h | --help          - show this help message

Dependencies: rsync

See pic-configure --help for more options during parameter set configuration:

configure create a cmake call for picongpu 
and get fast access to selected picongpu cmake options

usage: configure [OPTION] <parameter_DIRECTORY>
If no path_to_CMakeLists.txt is set the directory of this binary is used as source directory.

-i | --install       - path were picongpu should be installed (default is <parameter_DIRECTORY>)
-a | --arch          - set cuda architecture (semicolon separated list, e.g.: "20;35;37;52;60")
-c | --cmake         - overwrite options for cmake (e.g.: -c "-DPIC_VERBOSE=1")
-t <presetNumber>    - configure this preset from cmakeFlags
-h | --help          - show this help message

After running configure you can run ccmake . to set additional compile options (optimizations, debug levels, hardware version, etc.). This will influence your build done via make.

You can pass further options to configure PIConGPU directly instead of using ccmake ., by passing -c "-DOPTION1=VALUE1 -DOPTION2=VALUE2".

The picongpu/ directory of a run can also be reused to clone parameters via pic-create by using this run as origin directory or to create a new binary with configure: e.g. pic-configure -i $HOME/paramSets/myLWFA2 $SCRATCH/runs/lwfa_001.

See tbg --help for more information about the tbg tool.