Files
MX_Pmodule/MPI/elegant/README.md
2022-05-02 11:59:43 +00:00

233 lines
6.6 KiB
Markdown

# 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](https://www.aps.anl.gov/Accelerator-Operations-Physics/Software).
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](https://www.aps.anl.gov/Accelerator-Operations-Physics/Software/installationGuide_Linux).
The instructions to build from source are almost at the end of the page.
Instructions to build [`Pelegant`](https://ops.aps.anl.gov/publish/Pelegant_manual/node2.html)
## Getting required configuration files
* [file defining constants and some functions](https://ops.aps.anl.gov/cgi-bin/oagLog4.cgi?name=defns.rpn)
* [EPICS base configuration](http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/cgi-bin/oagLog4.cgi?name=epics.base.configure.tar.gz)
* [EPICS extensions configuration](http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/cgi-bin/oagLog4.cgi?name=epics.extensions.configure.tar.gz)
* [Configuration files for elegant, spiffe, genesis, and shower](http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/cgi-bin/oagLog4.cgi?name=oag.apps.configure.tar.gz)
## Elegant 2021.4.0
### SDDS 5 and Elegant 2021.4 sources
* [SDDS 5.1 source](https://ops.aps.anl.gov/cgi-bin/oagLog4.cgi?name=SDDS.5.1.tar.gz)
* [Elegant 2021.4.0 source](http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/cgi-bin/oagLog4.cgi?name=elegant.2021.4.0.tar.gz)
### 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
* [SDDS 4.3.1 source](http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/cgi-bin/oagLog4.cgi?name=SDDS.4.3.0.tar.gz)
* [Elegant 2020.2.0 source](http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/cgi-bin/oagLog4.cgi?name=elegant.2020.2.0.tar.gz)
### 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
```