Summary

GENESIS 1.3 is a time-dependent three-dimensional FEL code. It is focused to simulate single-pass free-electron lasers, both FEL amplifier and SASE FEL, although the flexible input can be used to easily extend the capacity of GENESIS 1.3 to cover FEL oscillators or multistage setups.

Using  genesis

 To initialize the environment use the module command:

[max]% xwhich genesis

 Provides by module(s)
   ... module load maxwell genesis/4.0.0; which genesis: /software/genesis/4.0.0/genesis
   ... module load maxwell genesis/2.0; which genesis: /software/genesis/2.0/genesis
   ... module load maxwell genesis/3.2.2; which genesis: /software/genesis/3.2.2/genesis
   ... module load maxwell genesis/4.5.1                        which genesis: /software/genesis/4.5.1/genesis 

 Documentation: https://confluence.desy.de/display/IS/genesis
 URL:           http://genesis.web.psi.ch/
 Manual:        http://genesis.web.psi.ch/Manual/parameter.html
 License:       unknown

 

 Problems with old MPI versions

The combination of old mpi (v1.10), mpiio and beegfs is not working properly, at least not on "modern" hardware. Since you will be hardly able to avoid mpiio or beegfs you will need to get rid of the old mpi, means recompile with e.g. openmpi3 or openmpi4.

There is a genesis version available via module load maxwell genesis/4.5.1 which was compiled against openmpi4 (/software/openmpi/4.0.3).


#!/bin/bash
#SBATCH --partition=allcpu
#SBATCH --constraint='[Gold-6240|Gold-6140|75F3|7402]'
unset LD_PRELOAD
source /etc/profile.d/modules.sh
module purge
module load maxwell genesis/4.5.1

# some mpi settings
export UCX_LOG_LEVEL=error
export OMPI_MCA_pml=ucx
export OMPI_MCA_opal_warn_on_missing_libcuda=0

rm -f *out.h5 #just to make sure output files don't exist
mpirun -N $(( $(nproc) /2 )) gencore OK.in

Note: Make sure to set constraints so that all nodes have identical CPUs at least. The choice of constraints depends on the partitions you intend to use. For example

sinfo -p maxcpu,short,exfel,xfel-sim -o '%n %f'

Will list all nodes for the partitions specified together with the corresponding features.

 Note: make sure to use only physical cores.  Using -N $(( $(nproc) /2 )) will distribute processes evenly over all nodes involved.