Summary
Source: https://github.com/mark-glass/comsyl
License: MIT License
Path: /software/comsyl
Documentation: https://github.com/mark-glass/comsyl/wiki
COMSYL makes the coherent mode decomposition of synchrotron radiation emitted by electrons passing through an undulator placed in a storage ring. COMSYL permits naturally the statistical analysis and propagation of the cross spectral density along the beamline optics. The coherence properties of the X-ray beam at any point of the beamline are completely given in terms of the eigenvalues and coherent modes of the cross spectral density (copied from https://github.com/mark-glass/comsyl ).
Using comsyl
comsyl is available as a standalone installation, compiled with openmpi
[max]% module load maxwell comsyl [max]% mpirun -np 4 python /software/comsyl/comsyl1env/comsyl/comsyl/calculateAutocorrelation.py /software/comsyl/comsyl1env/comsyl/comsyl/configurations/septest_cm_new_u18_2m_1h.json
Sample batch script
#!/bin/bash #SBATCH --partition=all #SBATCH --time=2-00:00:00 #SBATCH --job-name=comsyl #SBATCH --output=sbatch-comsyl.out #SBATCH --nodes=1 unset LD_PRELOAD source /etc/profile.d/modules.sh module purge module load maxwell comsyl mkdir -p calculations # output directory used by samples # sample 1: runs for a few minutes time mpirun -np 4 --mca pml ucx python /software/comsyl/comsyl1env/comsyl/comsyl/calculateAutocorrelation.py \ /software/comsyl/comsyl1env/comsyl/comsyl/configurations/septest_cm_new_u18_2m_1h.json # sample 2: runs for several hours. this sample required petsc configuration --with-64-bit-indices mpirun -N $(( $(nproc) / 2)) --mca pml ucx python /software/comsyl/comsyl1env/comsyl/comsyl/calculateAutocorrelation.py \ /software/comsyl/comsyl1env/comsyl/comsyl/configurations/high_flux/hf_new_u18_1m_3h.json
Building comsyl
Installation instructions for comsyl can be found at https://github.com/mark-glass/comsyl/wiki/Install-COMSYL. We had to deviate a bit from the proposed procedure:
# # base environment # instdir=/software/comsyl scrdir=/scratch/$USER mkdir -p $instdir $scrdir cd $instdir virtualenv-3.6 -p python3 --system-site-packages comsyl1env source $instdir/comsyl1env/bin/activate python -m pip install --upgrade pip # *** changed: # petsc uses a bit of deprecated code, so downgrade pip install numpy==1.18.4 module load mpi/opnempi-x86_64 export PYTHONPATH=/usr/lib64/python3.6/site-packages/openmpi # # srxraylib # cd $scrdir git clone https://github.com/lucarebuffi/srxraylib cd srxraylib python setup.py build pip install -e . --no-binary :all: cd $scrdir rm -rf srxraylib # # syned # cd .. git clone https://github.com/lucarebuffi/syned cd syned python setup.py build pip install -e . --no-binary :all: # if fails use instead: python setup.py develop cd $scrdir rm -rf syned # # comsyl # cd $instdir git clone https://github.com/mark-glass/comsyl cd comsyl/ python setup.py build python setup.py develop # *** changed: # just copy the python modules into PYTHONPATH cp -riv comsyl comsyl.egg-info ../lib/python3.6/site-packages/ # *** changed: patch comsyl # numpy linspace expects an integer for the number of evenly spaced samples # dim_x * resample_x is however a float which non-ancient numpy versions won't accept # diff $instdir/comsyl1env/lib/python3.6/site-packages/comsyl/waveoptics/Wavefront.py $instdir/comsyl1env/lib/python3.6/site-packages/comsyl/waveoptics/Wavefront.py~ 489c489 < new_x = np.linspace(x_min, x_max, int(dim_x * resample_x)) --- > new_x = np.linspace(x_min, x_max, dim_x * resample_x) 503c503 < new_y = np.linspace(y_min, y_max, int(dim_y * resample_y)) --- > new_y = np.linspace(y_min, y_max, dim_y * resample_y) # # *** changed: petsc/slepc # the combination of petsc, slepc from the installation instruction is not valid # versions of petsc, slepc should match # - use a recent version of petsc, slepc # - add --with-petsc4py=1, also build the python module # - add --with-64-bit-indices, some of the samples won't run without # - don't optimize for hardware cd $instdir wget https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.15.2.tar.gz tar xf $scrdir/petsc-3.15.2.tar.gz cd petsc-3.15.2/ export PETSC_DIR=`pwd` export PETSC_ARCH=arch-linux2-c-opt ./configure --with-mpi-f90=/usr/bin/mpif90.openmpi --with-mpi-dir=/usr/lib64/openmpi --with-scalar-type=complex --with-debug=0 COPTFLAGS='-O3' CXXOPTFLAGS='-O3' FOPTFLAGS='-O3' --with-petsc4py=1 --with-64-bit-indices make -j 8 export PYTHONPATH=$instdir/petsc-3.15.2/arch-linux2-c-opt/lib:$PYTHONPATH # # slepc # cd $instdir wget https://slepc.upv.es/download/distrib/slepc-3.15.1.tar.gz tar xf slepc-3.15.1.tar.gz cd slepc-3.15.1/ export SLEPC_DIR=`pwd` make SLEPC_DIR=$instdir/slepc-3.15.1 PETSC_DIR=$instdir/petsc-3.15.2 PETSC_ARCH=arch-linux2-c-opt # # srw ... use install from comsyl # - nothing done