|
|
(24 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
− | The recommended way to compile the Einstein Toolkit is to use the [http://simfactory.org Simulation Factory] ("SimFactory").
| + | Please see https://github.com/nds-org/jupyter-et/blob/master/CactusTutorial.ipynb for build instructions on Linux, OSX and Windows. |
− | | |
− | ==Supercomputers==
| |
− | | |
− | SimFactory comes with support for many of the large supercomputers. If you are compiling on one of these, it should be sufficient to run
| |
− | | |
− | sim build --thornlist path/to/thornlist.th
| |
− | | |
− | ==Generic operating systems==
| |
− | | |
− | SimFactory also contains general support for specific operating systems, including Mac OS, Ubuntu, and Scientific Linux. To build a configuration, you need to determine the correct optionlist to use from simfactory/mdb/optionlists. Often the optionlist will contain a comment near the top explaining which packages need to be installed to use the optionlist. You can then choose the optionlist to use on the "sim build" command line:
| |
− | | |
− | sim build --thornlist path/to/thornlist.th --optionlist <optionlist-name>
| |
− | | |
− | ==Writing your own optionlist==
| |
− | | |
− | If your operating system is not supported, you will need to write your own optionlist. The options provided by Cactus are described in the [http://cactuscode.org/documentation/usersguide/UsersGuidech6.html#x9-19000B2.1 Cactus documentation]. This page provides additional information and recommendations.
| |
− | | |
− | The following is based on the ubuntu.cfg optionlist.
| |
− | | |
− | <pre>
| |
− | VERSION = 2012-09-28
| |
− | </pre>
| |
− | | |
− | Cactus will reconfigure when the VERSION string changes.
| |
− | | |
− | ===Compilers===
| |
− | | |
− | <pre>
| |
− | CPP = cpp
| |
− | FPP = cpp
| |
− | CC = gcc
| |
− | CXX = g++
| |
− | F77 = gfortran
| |
− | F90 = gfortran
| |
− | </pre>
| |
− | | |
− | The C and Fortran preprocessors, and the C, C++, Fortran 77 and Fortran 90 compilers, are specified by these options. You can specify a full path if the compiler you want to use is not available on your default path. Note that it is strongly recommended to use compilers from the same family; e.g. don't mix the Intel C Compiler with the GNU Fortran Compiler.
| |
− | | |
− | ===Compilation and linking flags===
| |
− | | |
− | <pre>
| |
− | CPPFLAGS = -DMPICH_IGNORE_CXX_SEEK
| |
− | FPPFLAGS = -traditional
| |
− | CFLAGS = -g3 -march=native -std=gnu99
| |
− | CXXFLAGS = -g3 -march=native -std=gnu++0x
| |
− | F77FLAGS = -g3 -march=native -fcray-pointer -m128bit-long-double -ffixed-line-length-none
| |
− | F90FLAGS = -g3 -march=native -fcray-pointer -m128bit-long-double -ffixed-line-length-none
| |
− | LDFLAGS = -rdynamic
| |
− | </pre>
| |
− | | |
− | Cactus thorns can be written in C or C++. Cactus supports the C99 and C++0x standards respectively. Additionally, the Einstein Toolkit requires the GNU extensions provided by the options gnu99 / gnu++0x. If these extensions are not available, some Einstein Toolkit thorns will not compile.
| |
− | | |
− | -g3 ensures that debugging symbols are included in the object files. It is not necessary to set DEBUG = yes to get debugging symbols.
| |
− | | |
− | The rdynamic linker flag ensures that additional information is available in the executable for producing backtraces at runtime in the event of an internal error.
| |
− | | |
− | <pre>
| |
− | LIBDIRS =
| |
− | | |
− | C_LINE_DIRECTIVES = yes
| |
− | F_LINE_DIRECTIVES = yes
| |
− | </pre>
| |
− | | |
− | === Debugging ===
| |
− | | |
− | <pre>
| |
− | DEBUG = no
| |
− | CPP_DEBUG_FLAGS = -DCARPET_DEBUG
| |
− | FPP_DEBUG_FLAGS = -DCARPET_DEBUG
| |
− | C_DEBUG_FLAGS = -O0
| |
− | CXX_DEBUG_FLAGS = -O0
| |
− | F77_DEBUG_FLAGS = -O0
| |
− | F90_DEBUG_FLAGS = -O0
| |
− | </pre>
| |
− | | |
− | When DEBUG = yes is set (e.g. on the make command line or with SimFactory's --debug option), these debug flags are used. The intention here is to disable optimisation and enable additional code which may slow down execution but makes the code easier to debug.
| |
− | | |
− | === Optimisation ===
| |
− | | |
− | <pre>
| |
− | OPTIMISE = yes
| |
− | CPP_OPTIMISE_FLAGS = -DKRANC_VECTORS # -DCARPET_OPTIMISE -DNDEBUG
| |
− | FPP_OPTIMISE_FLAGS = # -DCARPET_OPTIMISE -DNDEBUG
| |
− | C_OPTIMISE_FLAGS = -O2 -ffast-math
| |
− | CXX_OPTIMISE_FLAGS = -O2 -ffast-math
| |
− | F77_OPTIMISE_FLAGS = -O2 -ffast-math
| |
− | F90_OPTIMISE_FLAGS = -O2 -ffast-math
| |
− | </pre>
| |
− | | |
− | === Profiling ===
| |
− | | |
− | <pre>
| |
− | PROFILE = no
| |
− | CPP_PROFILE_FLAGS =
| |
− | FPP_PROFILE_FLAGS =
| |
− | C_PROFILE_FLAGS = -pg
| |
− | CXX_PROFILE_FLAGS = -pg
| |
− | F77_PROFILE_FLAGS = -pg
| |
− | F90_PROFILE_FLAGS = -pg
| |
− | </pre>
| |
− | === OpenMP ===
| |
− | | |
− | <pre>
| |
− | OPENMP = yes
| |
− | CPP_OPENMP_FLAGS = -fopenmp
| |
− | FPP_OPENMP_FLAGS = -fopenmp
| |
− | C_OPENMP_FLAGS = -fopenmp
| |
− | CXX_OPENMP_FLAGS = -fopenmp
| |
− | F77_OPENMP_FLAGS = -fopenmp
| |
− | F90_OPENMP_FLAGS = -fopenmp
| |
− | </pre>
| |
− | | |
− | === Warnings ===
| |
− | | |
− | <pre>
| |
− | WARN = yes
| |
− | CPP_WARN_FLAGS = -Wall
| |
− | FPP_WARN_FLAGS = -Wall
| |
− | C_WARN_FLAGS = -Wall
| |
− | CXX_WARN_FLAGS = -Wall
| |
− | F77_WARN_FLAGS = -Wall
| |
− | F90_WARN_FLAGS = -Wall
| |
− | </pre>
| |
− | | |
− | ===HDF5===
| |
− | | |
− | If no HDF5 options are given, then HDF5 will be used if it can be automatically detected from standard locations, and will be built from a source package in the HDF5 thorn if not. Alternatively you can specify HDF5_DIR to point to an HF5 installation, for example
| |
− | | |
− | <pre>
| |
− | HDF5_DIR = /usr/local/hdf5-1.9.1
| |
− | </pre>
| |
− | | |
− | The following options disable support for Fortran and C++ when building HDF5, as it is not required by the Einstein Toolkit.
| |
− | | |
− | <pre>
| |
− | HDF5_ENABLE_FORTRAN = no
| |
− | HDF5_ENABLE_CXX = no
| |
− | </pre>
| |
− | | |
− | ===MPI===
| |
− | | |
− | <pre>
| |
− | MPI_DIR = /usr
| |
− | MPI_INC_DIRS = /usr/include/mpich2
| |
− | MPI_LIB_DIRS = /usr/lib
| |
− | MPI_LIBS = mpich fmpich mpl
| |
− | </pre>
| |
− | | |
− | ===Others===
| |
− | | |
− | <pre>
| |
− | PTHREADS = yes
| |
− | </pre>
| |