Building a module for (P)elegant
Home page and official build instructions
Elgant is a software packages produced by the Accelerator Operations and Physics Group. It requires the EPICS build-system and SDDS. The EPICS build-system is completely based on Makefiles. This makes it a bit harder to compile and more error prone.
Instructions to setup epics/base, epics/extensions and to compile SDDS as
well as elegant can be found
here.
The instructions to build from source are almost at the end of the page.
Instructions to build Pelegant
Getting required configuration files
- file defining constants and some functions
- EPICS base configuration
- EPICS extensions configuration
- Configuration files for elegant, spiffe, genesis, and shower
Elegant 2021.4.0
SDDS 5 and Elegant 2021.4 sources
Setup Environment
Pmodules
Compile on Merlin:
USE_FLAGS="_slurm"
module load gcc/10.3.0 gsl/2.7 lapack/3.10.0 openmpi/4.0.5-1_slurm
Compile on other systems (e.g. Pmod7.psi.ch)
USE_FLAGS=""
module load gcc/10.3.0 gsl/2.7 lapack/3.10.0 openmpi/4.0.5
Elegant, SDDS, etc
SDDS_VERSION=5.1
ELEGANT_VERSION=2021.4.0
ELEGANT_RELASE=-2
DOWNLOAD_DIR="/opt/psi/var/distfiles/elegant"
PREFIX="${PMODULES_ROOT}/MPI/elegant/${ELEGANT_VERSION}${ELEGANT_RELASE}${USE_FLAGS}/${MPI}/${MPI_VERSION}/${COMPILER}/${COMPILER_VERSION}"
export EPICS_BASE="${PREFIX}/epics/base"
export HOST_ARCH=linux-x86_64
export EPICS_HOST_ARCH=linux-x86_64
export RPN_DEFNS="${PREFIX}/RPN_DEFNS/defns.rpn"
export PERLLIB="${PREFIX}/lib/perl"
PATH+=":$PREFIX/epics/extensions/bin/${EPICS_HOST_ARCH}"
ARGS=()
ARGS+=( "GNU_BIN=$GCC_DIR/bin" )
ARGS+=( "LD=/usr/bin/ld" )
ARGS+=( "AR=/usr/bin/ar -rc" )
ARGS+=( "RANLIB=/usr/bin/ranlib" )
ARGS+=( "SYSGSL=1")
Prepare everything
mkdir -p "${PREFIX}"
mkdir -p "${RPN_DEFNS%/*}"
cp "${DOWNLOAD_DIR}/defns.rpn" "${RPN_DEFNS}"
cd "${PREFIX}"
tar xvf "${DOWNLOAD_DIR}/epics.base.configure.tar.gz"
tar xvf "${DOWNLOAD_DIR}/epics.extensions.configure.tar.gz"
tar xvf "${DOWNLOAD_DIR}/oag.apps.configure.tar.gz"
tar xvf "${DOWNLOAD_DIR}/SDDS.${SDDS_VERSION}.tar.gz"
tar xvf "${DOWNLOAD_DIR}/elegant.${ELEGANT_VERSION}.tar.gz"
Configure EPICS base and OAG applications
cd epics/base
make "${ARGS[@]}"
cd "${PREFIX}/oag/apps/configure"
sed -i "s/clean::/clean:/" RULES_PYTHON
make "${ARGS[@]}"
Compile SDDS 5.1
cd "${PREFIX}/epics/extensions/src/SDDS/"
sed -i -e "s/\( sddspseudoinverse_SYS_LIB.*\)/\1 gfortran/" SDDSaps/pseudoInverse/Makefile
sed -i -e "s/\( sddsmatrixop_SYS_LIBS.*\)/\1 gfortran/" SDDSaps/pseudoInverse/Makefile
make "${ARGS[@]}" -C png && \
make "${ARGS[@]}"
make "${ARGS[@]}" -C fftpack
make "${ARGS[@]}" -C pgapack
make "${ARGS[@]}" -C namelist
make "${ARGS[@]}" -C matlib
make "${ARGS[@]}" -C mdbcommon
make "${ARGS[@]}" -C mdblib
Compile elegant 2021.4.0
cd "${PREFIX}/oag/apps/src/physics"
make
cd "${PREFIX}/oag/apps/src/elegant"
make "${ARGS[@]}" STATIC_BUILD=NO
make "${ARGS[@]}" -C elegantTools
Compile Pelegant 2021.4.0
cd "${PREFIX}/epics/extensions/src/SDDS/"
make "${ARGS[@]}" -C SDDSlib clean
make "${ARGS[@]}" MPI=1 -C SDDSlib
cd "${PREFIX}/oag/apps/src/elegant"
make clean
make SYSGSL=1 Pelegant
Final step(s)
mkdir -p "${PREFIX}/lib64"
cp -av "${GSL_DIR}"/lib64/* "${PREFIX}"/lib64
Elegant 2020.2.0
SDDS and Elegant sources
Required Modules
module load gcc/8.4.0 gsl/2.6 OpenBLAS/0.3.10 mpich/3.2.1
or
module load gcc/8.4.0 gsl/2.6 lapack/3.9.0 openmpi/3.1.6
Setup Environment
SDDS_VERSION=4.3
ELEGANT_VERSION=2020.2.0
source "${PMODULES_ROOT}/config/modbuild.conf"
DOWNLOAD_DIR="${PMODULES_DISTFILESDIR}/elegant"
PREFIX="${PMODULES_ROOT}/MPI/elegant/${ELEGANT_VERSION}/${MPI}/${MPI_VERSION}/${COMPILER}/${COMPILER_VERSION}"
export EPICS_BASE="${PREFIX}/epics/base"
export HOST_ARCH=linux-x86_64
export EPICS_HOST_ARCH=linux-x86_64
export RPN_DEFNS="${PREFIX}/RPN_DEFNS/defns.rpn"
export PERLLIB="${PREFIX}/lib/perl"
PATH+=":$PREFIX/epics/extensions/bin/${EPICS_HOST_ARCH}"
ARGS=()
ARGS+=( "GNU_BIN=$GCC_DIR/bin" )
ARGS+=( "LD=/usr/bin/ld" )
ARGS+=( "AR=/usr/bin/ar -rc" )
ARGS+=( "RANLIB=/usr/bin/ranlib" )
ARGS+=( "SYSGSL=1")
Prepare everything
mkdir -p "${PREFIX}"
mkdir -p "${RPN_DEFNS%/*}"
cp "${DOWNLOAD_DIR}/defns.rpn" "${RPN_DEFNS}"
cd "${PREFIX}"
tar xvf "${DOWNLOAD_DIR}/epics.base.configure.tar.gz"
tar xvf "${DOWNLOAD_DIR}/epics.extensions.configure.tar.gz"
tar xvf "${DOWNLOAD_DIR}/oag.apps.configure.tar.gz"
tar xvf "${DOWNLOAD_DIR}/SDDS.${SDDS_VERSION}.tar.gz"
tar xvf "${DOWNLOAD_DIR}/elegant.${ELEGANT_VERSION}.tar.gz"
Configure EPICS base and OAG applications
cd epics/base
make "${ARGS[@]}"
cd "${PREFIX}/oag/apps/configure"
sed -i "s/clean::/clean:/" RULES_PYTHON
make "${ARGS[@]}"
Compile SDDS
cd "${PREFIX}/epics/extensions/src/SDDS/"
sed -i -e "s/\( sddspseudoinverse_SYS_LIB.*\)/\1 gfortran/" SDDSaps/pseudoInverse/Makefile
sed -i -e "s/\( sddsmatrixop_SYS_LIBS.*\)/\1 gfortran/" SDDSaps/pseudoInverse/Makefile
make "${ARGS[@]}" -C png && \
make "${ARGS[@]}"
make "${ARGS[@]}" -C pgapack
make "${ARGS[@]}" -C SDDSlib clean
make "${ARGS[@]}" MPI=1 -C SDDSlib
Compile elegant
cd "${PREFIX}/oag/apps/src/elegant"
make "${ARGS[@]}" STATIC_BUILD=NO
Compile Pelegant
cd "${PREFIX}/oag/apps/src/elegant"
make clean
make SYSGSL=1 Pelegant