Murphy relies the following external libraries:
- MPICH or OpenMPI or any other recent MPI implementation,
- hdf5 for the I/O operations (version >= 1.10),
- p4est for the parallel gestion of the tree (branch
feature-mesh-edge). - google test (optional) to run the regression tests.
The compilation relies on a Makefile (provided) and an arch file (platform dependent).
Trying to compile on a cluster? Maybe this can help you.
To compile Murphy you have three different options (listed from the more advanced to the easiest one). Each of them will give you a different ARCH_FILE file that is used to compile the framework.
- Local libraries: install the depencies yourself (you should use a
make_arch/make.YourArchitectureto indicate the library paths, seemake.docker_gccas an example). Then, use the your created file for theARCHfile:ARCH_FILE=make_arch/make.YourArchitecture. - Docker: use the
Dockerfilein the folderdocker/or you can also download the image from DockerHub (rundocker pull vanreeslab/murphy:v1.10). Then, the defaultARCH_FILEfile (make_arch/make.docker_gcc) is valid, no need to adapt it. - VSCode: You can use the remote container extension to open, build and run the code direction into a Docker container:
- install the Remote Container extension in VSCode,
- get the DockerHub image (run
docker pull vanreeslab/murphy:v1.10), - open the murphy folder in VSCode and accept to open in a container.
We recommend to use the last approach as it provides the fastest hand-on approach. However, for advance debugging, the first option is usually the more reliable choice. To download the image, simply use
docker pull vanreeslab/murphy:v1.10
To build the container and sync your murphy folder, MY_MURPHY, run
docker run --name murphy -it -v MY_MURPHY:/murphy vanreeslab/murphy:v1.10
You are now within the container and you can access the folder in /murphy, which is synced with your local machine.
To exit, simply type exit and to relaunch it, enter docker start -i murphy.
Two containers are available on the vanreeslab account: murphy-ci for the continuous integration and murphy which has a debugging version of p4est compiled as well as a user defined to improve the VSCode interface.
The first time you compiler, you need to create the build directory:
mkdir build
To check the values (libs, paths,...) that make will use, you can do a dry-run:
ARCH_FILE=make_arch/make.MyArchFile make info
To compile the library, given the arch file, use
ARCH_FILE=make_arch/make.MyArchFile make -j
You will now have an executable murphy that you can call.
By default, the make file uses some default values. If an ARCH file is given, we use the values defined in the ARCH file.
You can specify the following variables:
- flags
CXX_FLAGS: the compilation flags you want to use (default:none)GIT_COMMIT: the commit associated to the current version of the code (default: taken from the current repo usinggit describe --always --dirty)
- FFTW library
FFTW_INC: the folder with the fftw headers (default/usr/include)FFTW_LIB: the folder with the fftw libraries (default/usr/lib)FFTW_LIBNAME: the name of the fftw library on your system (default:-lfftw3_omp -lfftw3)
- HDF5 library
HDF5_INC: the folder with the hdf5 headers (default/usr/include)HDF5_LIB: the folder with the hdf5 libraries (default/usr/lib)HDF5_LIBNAME: the name of the hdf5 library on your system (default:-lhdf5)
- P4est library
P4EST_INC: the folder with the p4est headers (default/usr/include)P4EST_LIB: the folder with the p4est libraries (default/usr/lib)P4EST_LIBNAME: the name of the p4est library on your system (default:-lsc -lp4est)
- Google Test library
GTEST_INC: the folder with the google test headers (default/usr/include)GTEST_LIB: the folder with the google test libraries (default/usr/lib)GTEST_LIBNAME: the name of the google test library on your system (default:-lgtest)
Some compilations flags are available to change the behavior of the code:
-DBLOCK_GS=Xsets the number of ghost points to use (defaultX=2)-DWAVELET_N=Xdictates the interpolation order of the wavelets (defaultX=2)-DWAVELET_NT=Xdictates the moment order of the wavelets (defaultX=2)-DLOG_ALLRANKSwill enable log on every processor. By default, only the master logs-DVERBOSEenable extended logs-DNDEBUGdisable the assertion checks and the other debuging sections-DLOG_MUTEdisable every logs-DCOLOR_PROFenable color output in the profiler (disabled by default)-DMPI_NONASYNCask for non-asynchronous MPI calls + remove the fancy optimization options-DOLD_GCCreplaces thealigned_allocbyposix_memalignto support GCC 8
To use them, you can append the make command, e.g. to change the wavelet behavior
make OPTS="-DBLOCK_GS=4 -DWAVELET_N=4"or add it to the ARCH file:
override OPTS += -DBLOCK_GS=4 -DWAVELET_N=2In doubts, you should always run make info to test the different options.
See the details about automatic testing in this page.
To run the tests, you need to recompile all the sources (it's important to delete the old ones if you want to retrieve)
make destroy
ARCH_FILE=make_arch/make.docker_gcc_test make test -j
Then you can lunch the tests
./murphy_test
To get the doxygen documentation, go to the main folder and enter
doxygen doc/Doxyfile
You will need dot to get a visual graphs (see HAVE_DOT option in the Doxyfile).
On MacOS, you can install it using homebrew: brew install graphviz.
- the compilation fails and the error indicates that files change sizes during the compilation:
you might be the victim of slow disk access between docker and your laptop. To solve that, you need to follow this and set the consistency to
delegated.
here are the links to the details needed to build murphy on different clusters