Commit 4a0371c3 authored by Nicholas Breen's avatar Nicholas Breen

New upstream version 2019~rc1

parent 044d75cd
...@@ -5,7 +5,7 @@ Installation guide ...@@ -5,7 +5,7 @@ Installation guide
Introduction to building GROMACS Introduction to building GROMACS
================================ ================================
These instructions pertain to building GROMACS 2019-beta3. You might These instructions pertain to building GROMACS 2019-rc1. You might
also want to check the up-to-date installation instructions. also want to check the up-to-date installation instructions.
...@@ -28,8 +28,8 @@ Quick and dirty installation ...@@ -28,8 +28,8 @@ Quick and dirty installation
Or, as a sequence of commands to execute: Or, as a sequence of commands to execute:
tar xfz gromacs-2019-beta3.tar.gz tar xfz gromacs-2019-rc1.tar.gz
cd gromacs-2019-beta3 cd gromacs-2019-rc1
mkdir build mkdir build
cd build cd build
cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON
...@@ -107,19 +107,6 @@ of "xxx" : ...@@ -107,19 +107,6 @@ of "xxx" :
* "-DCMAKE_BUILD_TYPE=Debug" to build GROMACS in debug mode * "-DCMAKE_BUILD_TYPE=Debug" to build GROMACS in debug mode
Building with MiMiC QM/MM support
---------------------------------
MiMiC QM/MM interface integration will require linking against MiMiC
communication library, that establishes the communication channel
between GROMACS and CPMD. Check that the installation folder of the
library is added to CMAKE_PREFIX_PATH if it is installed in non-
standard location. Building QM/MM-capable version requires double-
precision version of GROMACS compiled with MPI support:
* "-DGMX_DOUBLE=ON -DGMX_MPI -DGMX_MIMIC=ON"
Building older versions Building older versions
----------------------- -----------------------
...@@ -165,8 +152,8 @@ Other compilers may work (Cray, Pathscale, older clang) but do not ...@@ -165,8 +152,8 @@ Other compilers may work (Cray, Pathscale, older clang) but do not
offer competitive performance. We recommend against PGI because the offer competitive performance. We recommend against PGI because the
performance with C++ is very bad. performance with C++ is very bad.
The xlc compiler is not supported and has not been tested on POWER The xlc compiler is not supported and version 16.1 does not compile on
architectures for GROMACS-2019-beta3. We recommend to use the gcc POWER architectures for GROMACS-2019-rc1. We recommend to use the gcc
compiler instead, as it is being extensively tested. compiler instead, as it is being extensively tested.
You may also need the most recent version of other compiler toolchain You may also need the most recent version of other compiler toolchain
...@@ -364,6 +351,22 @@ The full list and order(!) of libraries you require are found in ...@@ -364,6 +351,22 @@ The full list and order(!) of libraries you require are found in
Intel’s MKL documentation for your system. Intel’s MKL documentation for your system.
Using ARM Performance Libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The ARM Performance Libraries provides FFT transforms implementation
for ARM architectures. Preliminary support is provided for ARMPL in
GROMACS through its FFTW-compatible API. Assuming that the ARM HPC
toolchain environment including the ARMPL paths are set up (e.g.
through loading the appropriate modules like "module load Module-
Prefix/arm-hpc-compiler-X.Y/armpl/X.Y") use the following cmake
options:
cmake -DGMX_FFT_LIBRARY=fftw3 \
-DFFTWF_LIBRARY="${ARMPL_DIR}/lib/libarmpl_lp64.so" \
-DFFTWF_INCLUDE_DIR=${ARMPL_DIR}/include
Other optional build components Other optional build components
------------------------------- -------------------------------
...@@ -434,8 +437,8 @@ the name of the directory containing the "CMakeLists.txt" file of the ...@@ -434,8 +437,8 @@ the name of the directory containing the "CMakeLists.txt" file of the
code you want to build. For example, download the source tarball and code you want to build. For example, download the source tarball and
use use
tar xfz gromacs-2019-beta3.tgz tar xfz gromacs-2019-rc1.tgz
cd gromacs-2019-beta3 cd gromacs-2019-rc1
mkdir build-gromacs mkdir build-gromacs
cd build-gromacs cd build-gromacs
cmake .. cmake ..
...@@ -594,7 +597,7 @@ to performance loss, e.g. on Intel Skylake-X/SP and AMD Zen. ...@@ -594,7 +597,7 @@ to performance loss, e.g. on Intel Skylake-X/SP and AMD Zen.
11. "IBM_VMX" Power6 and similar Altivec processors have this. 11. "IBM_VMX" Power6 and similar Altivec processors have this.
12. "IBM_VSX" Power7, Power8 and later have this. 12. "IBM_VSX" Power7, Power8, Power9 and later have this.
13. "ARM_NEON" 32-bit ARMv7 with NEON support. 13. "ARM_NEON" 32-bit ARMv7 with NEON support.
...@@ -856,8 +859,9 @@ otherwise fall back on a version of BLAS internal to GROMACS. The ...@@ -856,8 +859,9 @@ otherwise fall back on a version of BLAS internal to GROMACS. The
internal versions are fine for normal use. If you need to specify a internal versions are fine for normal use. If you need to specify a
non-standard path to search, use non-standard path to search, use
"-DCMAKE_PREFIX_PATH=/path/to/search". If you need to specify a "-DCMAKE_PREFIX_PATH=/path/to/search". If you need to specify a
library with a non-standard name (e.g. ESSL on Power machines), then library with a non-standard name (e.g. ESSL on Power machines or ARMPL
set "-DGMX_BLAS_USER=/path/to/reach/lib/libwhatever.a". on ARM machines), then set
"-DGMX_BLAS_USER=/path/to/reach/lib/libwhatever.a".
If you are using Intel MKL for FFT, then the BLAS and LAPACK it If you are using Intel MKL for FFT, then the BLAS and LAPACK it
provides are used automatically. This could be over-ridden with provides are used automatically. This could be over-ridden with
...@@ -868,6 +872,21 @@ will be automatically used for BLAS and LAPACK. This could be over- ...@@ -868,6 +872,21 @@ will be automatically used for BLAS and LAPACK. This could be over-
ridden with "GMX_BLAS_USER", etc. ridden with "GMX_BLAS_USER", etc.
Building with MiMiC QM/MM support
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MiMiC QM/MM interface integration will require linking against MiMiC
communication library, that establishes the communication channel
between GROMACS and CPMD. The MiMiC Communication library can be
downloaded here. Compile and install it. Check that the installation
folder of the MiMiC library is added to CMAKE_PREFIX_PATH if it is
installed in non-standard location. Building QM/MM-capable version
requires double-precision version of GROMACS compiled with MPI
support:
* "-DGMX_DOUBLE=ON -DGMX_MPI -DGMX_MIMIC=ON"
Changing the names of GROMACS binaries and libraries Changing the names of GROMACS binaries and libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...@@ -1022,7 +1041,7 @@ The simplest way to run the checks is to build GROMACS with ...@@ -1022,7 +1041,7 @@ The simplest way to run the checks is to build GROMACS with
"-DREGRESSIONTEST_DOWNLOAD", and run "make check". GROMACS will "-DREGRESSIONTEST_DOWNLOAD", and run "make check". GROMACS will
automatically download and run the tests for you. Alternatively, you automatically download and run the tests for you. Alternatively, you
can download and unpack the GROMACS regression test suite can download and unpack the GROMACS regression test suite
http://gerrit.gromacs.org/download/regressiontests-2019-beta3.tar.gz http://gerrit.gromacs.org/download/regressiontests-2019-rc1.tar.gz
tarball yourself and use the advanced "cmake" option tarball yourself and use the advanced "cmake" option
"REGRESSIONTEST_PATH" to specify the path to the unpacked tarball, "REGRESSIONTEST_PATH" to specify the path to the unpacked tarball,
which will then be used for testing. If the above does not work, then which will then be used for testing. If the above does not work, then
......
...@@ -67,6 +67,9 @@ def do_build(context): ...@@ -67,6 +67,9 @@ def do_build(context):
cmake_opts['CMAKE_BUILD_TYPE'] = 'Debug' cmake_opts['CMAKE_BUILD_TYPE'] = 'Debug'
cmake_opts['GMX_USE_RDTSCP'] = 'DETECT' cmake_opts['GMX_USE_RDTSCP'] = 'DETECT'
if not context.opts.msvc and not context.opts.mdrun_only and not context.opts.static:
cmake_opts['GMXAPI'] = 'ON'
if context.opts.reference: if context.opts.reference:
cmake_opts['CMAKE_BUILD_TYPE'] = 'Reference' cmake_opts['CMAKE_BUILD_TYPE'] = 'Reference'
elif context.opts['release']: elif context.opts['release']:
...@@ -119,13 +122,19 @@ def do_build(context): ...@@ -119,13 +122,19 @@ def do_build(context):
cmake_opts['GMX_FFT_LIBRARY'] = 'mkl' cmake_opts['GMX_FFT_LIBRARY'] = 'mkl'
elif context.opts.fftpack: elif context.opts.fftpack:
cmake_opts['GMX_FFT_LIBRARY'] = 'fftpack' cmake_opts['GMX_FFT_LIBRARY'] = 'fftpack'
if context.opts.mkl or context.opts.atlas: if context.opts.mkl or context.opts.atlas or context.opts.armpl:
cmake_opts['GMX_EXTERNAL_BLAS'] = 'ON' cmake_opts['GMX_EXTERNAL_BLAS'] = 'ON'
cmake_opts['GMX_EXTERNAL_LAPACK'] = 'ON' cmake_opts['GMX_EXTERNAL_LAPACK'] = 'ON'
if context.opts.clFFT: if context.opts.clFFT:
cmake_opts['GMX_EXTERNAL_CLFFT'] = 'ON' cmake_opts['GMX_EXTERNAL_CLFFT'] = 'ON'
cmake_opts['clFFT_ROOT'] = context.env.clFFT_root cmake_opts['clFFT_ROOT'] = context.env.clFFT_root
if context.opts.armpl:
cmake_opts['FFTWF_LIBRARY'] = os.path.join(context.env.armpl_dir, 'lib/libarmpl_lp64.so')
cmake_opts['FFTWF_INCLUDE_DIR'] = os.path.join(context.env.armpl_dir, 'include')
cmake_opts['GMX_BLAS_USER'] = os.path.join(context.env.armpl_dir, 'lib/libarmpl_lp64.so')
cmake_opts['GMX_LAPACK_USER'] = os.path.join(context.env.armpl_dir, 'lib/libarmpl_lp64.so')
if context.opts.hwloc is False: if context.opts.hwloc is False:
cmake_opts['GMX_HWLOC'] = 'OFF' cmake_opts['GMX_HWLOC'] = 'OFF'
......
...@@ -67,7 +67,9 @@ icc-18 msvc-2017 fftpack simd=avx2_256 release ...@@ -67,7 +67,9 @@ icc-18 msvc-2017 fftpack simd=avx2_256 release
#gcc-7 armhpc-18.2 openmp simd=ARM_NEON_ASIMD release #gcc-7 armhpc-18.2 openmp simd=ARM_NEON_ASIMD release
# Test ARM HPC compier toolchain with armclang # Test ARM HPC compier toolchain with armclang
armclang-18.4 armhpc-18.4 openmp simd=ARM_NEON_ASIMD release-with-assert # Test ARMPL for FFTs
# Test linking against ARMPL for BLAS/LAPACK
armclang-18.4 armhpc-18.4 armpl openmp simd=ARM_NEON_ASIMD release-with-assert
# TODO # TODO
# Add SIMD + OpenMP + CUDA asan build # Add SIMD + OpenMP + CUDA asan build
......
...@@ -101,11 +101,23 @@ if(${GMX_FFT_LIBRARY} STREQUAL "FFTW3") ...@@ -101,11 +101,23 @@ if(${GMX_FFT_LIBRARY} STREQUAL "FFTW3")
set(FFT_WARNING_MESSAGE "The FFTW library was compiled with neither --enable-sse nor --enable-sse2; those would have enabled SSE(2) SIMD instructions. This will give suboptimal performance. You should (re)compile the FFTW library with --enable-sse2 and --enable-avx (and --enable-avx2 or --enable-avx512 if supported).") set(FFT_WARNING_MESSAGE "The FFTW library was compiled with neither --enable-sse nor --enable-sse2; those would have enabled SSE(2) SIMD instructions. This will give suboptimal performance. You should (re)compile the FFTW library with --enable-sse2 and --enable-avx (and --enable-avx2 or --enable-avx512 if supported).")
endif() endif()
endif() endif()
set(FFT_STATUS_MESSAGE "Using external FFT library - FFTW3")
find_path(ARMPL_INCLUDE_DIR "armpl.h" HINTS ${${FFTW}_INCLUDE_DIRS}
NO_DEFAULT_PATH
NO_CMAKE_ENVIRONMENT_PATH
NO_CMAKE_PATH
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_SYSTEM_PATH)
if (ARMPL_INCLUDE_DIR)
set(GMX_FFT_ARMPL_FFTW3 1)
set(FFT_STATUS_MESSAGE "Using external FFT library - ARM Performance Library (FFTW3 compatibility mode)")
else()
set(GMX_FFT_FFTW3 1)
set(FFT_STATUS_MESSAGE "Using external FFT library - FFTW3")
endif()
endif() endif()
set(FFT_LIBRARIES ${${FFTW}_LIBRARIES}) set(FFT_LIBRARIES ${${FFTW}_LIBRARIES})
set(GMX_FFT_FFTW3 1)
elseif(${GMX_FFT_LIBRARY} STREQUAL "MKL") elseif(${GMX_FFT_LIBRARY} STREQUAL "MKL")
# Intel 11 and up makes life somewhat easy if you just want to use # Intel 11 and up makes life somewhat easy if you just want to use
# all their stuff. It's not easy if you only want some of their # all their stuff. It's not easy if you only want some of their
......
...@@ -71,7 +71,7 @@ function(gmx_manage_lmfit) ...@@ -71,7 +71,7 @@ function(gmx_manage_lmfit)
# we will not be installing any content. # we will not be installing any content.
install(TARGETS lmfit EXPORT libgromacs) install(TARGETS lmfit EXPORT libgromacs)
set(HAVE_LMFIT_VALUE TRUE) set(HAVE_LMFIT 1 CACHE INTERNAL "Is lmfit found?")
elseif(GMX_USE_LMFIT STREQUAL "EXTERNAL") elseif(GMX_USE_LMFIT STREQUAL "EXTERNAL")
# Find an external lmfit library. # Find an external lmfit library.
find_package(Lmfit ${GMX_LMFIT_MINIMUM_REQUIRED_VERSION}) find_package(Lmfit ${GMX_LMFIT_MINIMUM_REQUIRED_VERSION})
...@@ -79,7 +79,7 @@ function(gmx_manage_lmfit) ...@@ -79,7 +79,7 @@ function(gmx_manage_lmfit)
message(FATAL_ERROR "External lmfit could not be found, please adjust your pkg-config path to include the lmfit.pc file") message(FATAL_ERROR "External lmfit could not be found, please adjust your pkg-config path to include the lmfit.pc file")
endif() endif()
set(HAVE_LMFIT_VALUE TRUE) set(HAVE_LMFIT 1 CACHE INTERNAL "Is lmfit found?")
else() else()
# Create a dummy link target so the calling code doesn't need to know # Create a dummy link target so the calling code doesn't need to know
# whether lmfit support is being compiled. # whether lmfit support is being compiled.
...@@ -88,6 +88,6 @@ function(gmx_manage_lmfit) ...@@ -88,6 +88,6 @@ function(gmx_manage_lmfit)
# we will not be installing any content. # we will not be installing any content.
install(TARGETS lmfit EXPORT libgromacs) install(TARGETS lmfit EXPORT libgromacs)
set(HAVE_LMFIT_VALUE FALSE) set(HAVE_LMFIT 0 CACHE INTERNAL "Is lmfit found?")
endif() endif()
endfunction() endfunction()
...@@ -62,10 +62,18 @@ macro(find_power_vsx_toolchain_flags TOOLCHAIN_C_FLAGS_VARIABLE TOOLCHAIN_CXX_FL ...@@ -62,10 +62,18 @@ macro(find_power_vsx_toolchain_flags TOOLCHAIN_C_FLAGS_VARIABLE TOOLCHAIN_CXX_FL
if(CPU_DETECTION_BRAND MATCHES "POWER7") if(CPU_DETECTION_BRAND MATCHES "POWER7")
gmx_test_cflag(GNU_C_VSX_POWER7 "-mcpu=power7 -mtune=power7" ${TOOLCHAIN_C_FLAGS_VARIABLE}) gmx_test_cflag(GNU_C_VSX_POWER7 "-mcpu=power7 -mtune=power7" ${TOOLCHAIN_C_FLAGS_VARIABLE})
gmx_test_cflag(GNU_CXX_VSX_POWER7 "-mcpu=power7 -mtune=power7" ${TOOLCHAIN_CXX_FLAGS_VARIABLE}) gmx_test_cflag(GNU_CXX_VSX_POWER7 "-mcpu=power7 -mtune=power7" ${TOOLCHAIN_CXX_FLAGS_VARIABLE})
elseif(CPU_DETECTION_BRAND MATCHES "POWER8")
# Enable power8 vector extensions on such platforms.
gmx_test_cflag(GNU_C_VSX_POWER8 "-mcpu=power8 -mpower8-vector -mpower8-fusion" ${TOOLCHAIN_C_FLAGS_VARIABLE})
gmx_test_cflag(GNU_CXX_VSX_POWER8 "-mcpu=power8 -mpower8-vector -mpower8-fusion" ${TOOLCHAIN_CXX_FLAGS_VARIABLE})
elseif(CPU_DETECTION_BRAND MATCHES "POWER9")
# Enable power9 vector extensions on such platforms.
# TODO consider whether adding " -mpower9-vector -mpower9-fusion"
# is an advantage.
gmx_test_cflag(GNU_C_VSX_POWER9 "-mcpu=power9 -mtune=power9" ${TOOLCHAIN_C_FLAGS_VARIABLE})
gmx_test_cflag(GNU_CXX_VSX_POWER9 "-mcpu=power9 -mtune=power9" ${TOOLCHAIN_CXX_FLAGS_VARIABLE})
else() else()
# Enable power8 vector extensions on all platforms except old Power7. # Don't add arch-specific flags for unknown architectures.
gmx_test_cflag(GNU_C_VSX_POWER8 "-mcpu=power8 -mpower8-vector -mpower8-fusion -mdirect-move" ${TOOLCHAIN_C_FLAGS_VARIABLE})
gmx_test_cflag(GNU_CXX_VSX_POWER8 "-mcpu=power8 -mpower8-vector -mpower8-fusion -mdirect-move" ${TOOLCHAIN_CXX_FLAGS_VARIABLE})
endif() endif()
# Altivec was originally single-only, and it took a while for compilers # Altivec was originally single-only, and it took a while for compilers
# to support the double-precision features in VSX. # to support the double-precision features in VSX.
......
...@@ -113,6 +113,14 @@ using myInt = int; ...@@ -113,6 +113,14 @@ using myInt = int;
// Test template using statement // Test template using statement
template<class T> using myPointer = T*; template<class T> using myPointer = T*;
myPointer<int> x; myPointer<int> x;
// Test in-class array initalizers used with constructor initializer lists
struct TestStruct
{
float a[3][3] = {{0}}; // in-class initializer
float b; // not initialized until constructor initializer list
TestStruct();
};
TestStruct::TestStruct() : b(0) {}
int main() { int main() {
// Test nullptr // Test nullptr
double *x = nullptr; double *x = nullptr;
...@@ -146,6 +154,8 @@ int main() { ...@@ -146,6 +154,8 @@ int main() {
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.0.23026") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.0.23026")
message(FATAL_ERROR "GROMACS requires version 2015 (19.0.23026) or later of the MSVC C++ compiler for complete C++11 support") message(FATAL_ERROR "GROMACS requires version 2015 (19.0.23026) or later of the MSVC C++ compiler for complete C++11 support")
endif() endif()
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "XL")
message(FATAL_ERROR "No known version of xlC can compile the normal C++11 code in GROMACS, highest version checked is 16.1.0")
endif() endif()
if(CXX11_SUPPORTED) if(CXX11_SUPPORTED)
set(${CXX11_CXX_FLAG_NAME} ${CXX11_CXX_FLAG} PARENT_SCOPE) set(${CXX11_CXX_FLAG_NAME} ${CXX11_CXX_FLAG} PARENT_SCOPE)
......
...@@ -44,9 +44,9 @@ ...@@ -44,9 +44,9 @@
# if convert is working or not. # if convert is working or not.
function(GMX_TEST_IMAGEMAGICK VARIABLE) function(GMX_TEST_IMAGEMAGICK VARIABLE)
set(value_ OFF)
if(NOT ${ImageMagick_CONVERT_FOUND}) if(NOT ${ImageMagick_CONVERT_FOUND})
MESSAGE(STATUS "No image conversion possible without ImageMagick") MESSAGE(STATUS "No image conversion possible without ImageMagick")
set(value_ OFF)
elseif(NOT DEFINED ${VARIABLE}) elseif(NOT DEFINED ${VARIABLE})
set(TEMPDIR "${CMAKE_CURRENT_BINARY_DIR}/imagemagicktmp") set(TEMPDIR "${CMAKE_CURRENT_BINARY_DIR}/imagemagicktmp")
FILE(MAKE_DIRECTORY ${TEMPDIR}) FILE(MAKE_DIRECTORY ${TEMPDIR})
...@@ -58,13 +58,21 @@ function(GMX_TEST_IMAGEMAGICK VARIABLE) ...@@ -58,13 +58,21 @@ function(GMX_TEST_IMAGEMAGICK VARIABLE)
OUTPUT_QUIET OUTPUT_QUIET
ERROR_QUIET ERROR_QUIET
) )
FILE(REMOVE_RECURSE ${TEMPDIR}) if (EXISTS ${SAMPLE_OUTPUT})
if (${TEST_OUTPUT} EQUAL 0)
set(value_ ON) set(value_ ON)
else() else()
MESSAGE(STATUS "Could not convert sample image, ImageMagick convert can not be used") if (GMX_BUILD_MANUAL)
set(type_ "WARNING")
else()
set(type_ "STATUS")
endif()
MESSAGE(${type_} "Could not convert sample image, ImageMagick convert can not be used")
set(value_ OFF)
endif() endif()
FILE(REMOVE_RECURSE ${TEMPDIR})
endif()
if(NOT DEFINED ${VARIABLE})
set(${VARIABLE} ${value_} CACHE INTERNAL "Test if image conversion works")
mark_as_advanced(${VARIABLE})
endif() endif()
set(${VARIABLE} ${value_} CACHE INTERNAL "Test if image conversion works")
mark_as_advanced(${VARIABLE})
endfunction() endfunction()
...@@ -201,7 +201,7 @@ set(GMX_VERSION_PATCH 0) ...@@ -201,7 +201,7 @@ set(GMX_VERSION_PATCH 0)
# candidates, where it signifies the most recent such release from # candidates, where it signifies the most recent such release from
# this branch; it will be empty before the first such release, as well # this branch; it will be empty before the first such release, as well
# as after the final release is out. # as after the final release is out.
set(GMX_VERSION_SUFFIX "-beta3") set(GMX_VERSION_SUFFIX "-rc1")
# Conventionally with libtool, any ABI change must change the major # Conventionally with libtool, any ABI change must change the major
# version number, the minor version number should change if it's just # version number, the minor version number should change if it's just
...@@ -241,7 +241,7 @@ set(REGRESSIONTEST_BRANCH "refs/heads/release-2019") ...@@ -241,7 +241,7 @@ set(REGRESSIONTEST_BRANCH "refs/heads/release-2019")
# build the regressiontests tarball with all the right naming. The # build the regressiontests tarball with all the right naming. The
# naming affects the md5sum that has to go here, and if it isn't right # naming affects the md5sum that has to go here, and if it isn't right
# release workflow will report a failure. # release workflow will report a failure.
set(REGRESSIONTEST_MD5SUM "10279cbb59912e11959fdd3981ad9c6f" CACHE INTERNAL "MD5 sum of the regressiontests tarball for this GROMACS version") set(REGRESSIONTEST_MD5SUM "69da7f6a5bfcdb38b202eb9f9df69d01" CACHE INTERNAL "MD5 sum of the regressiontests tarball for this GROMACS version")
math(EXPR GMX_VERSION_NUMERIC math(EXPR GMX_VERSION_NUMERIC
"${GMX_VERSION_MAJOR}*10000 + ${GMX_VERSION_PATCH}") "${GMX_VERSION_MAJOR}*10000 + ${GMX_VERSION_PATCH}")
......
...@@ -119,12 +119,13 @@ else() ...@@ -119,12 +119,13 @@ else()
elseif(NOT SPHINX_FOUND) elseif(NOT SPHINX_FOUND)
set(MANUAL_BUILD_IS_POSSIBLE OFF) set(MANUAL_BUILD_IS_POSSIBLE OFF)
set(MANUAL_BUILD_NOT_POSSIBLE_REASON "Sphinx has not been found and is needed to create the LaTex input files") set(MANUAL_BUILD_NOT_POSSIBLE_REASON "Sphinx has not been found and is needed to create the LaTex input files")
elseif(NOT PDFLATEX_COMPILER OR NOT IMAGE_CONVERT_POSSIBLE) elseif(NOT PDFLATEX_COMPILER)
set(MANUAL_BUILD_IS_POSSIBLE OFF) set(MANUAL_BUILD_IS_POSSIBLE OFF)
set(MANUAL_BUILD_NOT_POSSIBLE_REASON "pdflatex or some other dependency (ImageMagick convert) is not available") set(MANUAL_BUILD_NOT_POSSIBLE_REASON "pdflatex is not available")
if (NOT IMAGE_CONVERT_POSSIBLE) elseif(NOT IMAGE_CONVERT_POSSIBLE)
set(NO_IMAGE_CONVERT_REASON "Can not convert files for online or pdf manual") set(MANUAL_BUILD_IS_POSSIBLE OFF)
endif() set(MANUAL_BUILD_NOT_POSSIBLE_REASON "a working form of ImageMagick convert is not available")
set(NO_IMAGE_CONVERT_REASON "Can not convert files for online or pdf manual")
# TODO Later, identify other dependencies like bibtex, # TODO Later, identify other dependencies like bibtex,
# make_index, date, some graphics conversion program, # make_index, date, some graphics conversion program,
# etc. Perhaps patch UseLATEX.cmake and contribute upstream. # etc. Perhaps patch UseLATEX.cmake and contribute upstream.
...@@ -229,6 +230,7 @@ if (SPHINX_FOUND) ...@@ -229,6 +230,7 @@ if (SPHINX_FOUND)
reference-manual/special/qmmm.rst reference-manual/special/qmmm.rst
reference-manual/special/vmd-imd.rst reference-manual/special/vmd-imd.rst
reference-manual/special/membrane-embedding.rst reference-manual/special/membrane-embedding.rst
reference-manual/special/mimic-qmmm.rst
# Analysis chapter # Analysis chapter
reference-manual/analysis.rst reference-manual/analysis.rst
reference-manual/analysis/using-groups.rst reference-manual/analysis/using-groups.rst
...@@ -345,6 +347,7 @@ if (SPHINX_FOUND) ...@@ -345,6 +347,7 @@ if (SPHINX_FOUND)
dev-manual/includestyle.rst dev-manual/includestyle.rst
dev-manual/index.rst dev-manual/index.rst
dev-manual/jenkins.rst dev-manual/jenkins.rst
dev-manual/known-issues.rst
dev-manual/language-features.rst dev-manual/language-features.rst
dev-manual/naming.rst dev-manual/naming.rst
dev-manual/overview.rst dev-manual/overview.rst
......
...@@ -289,6 +289,8 @@ latex_elements = { ...@@ -289,6 +289,8 @@ latex_elements = {
'pointsize': '11', 'pointsize': '11',
# Additional stuff for the LaTeX preamble. # Additional stuff for the LaTeX preamble.
# The tocdepth setting is needed to overwrite the default value set by Sphinx
# to get a more detailed toctree in the pdf version of the manual.
'preamble': r''' 'preamble': r'''
\usepackage{here} \usepackage{here}
\usepackage{picins} \usepackage{picins}
...@@ -304,6 +306,7 @@ latex_elements = { ...@@ -304,6 +306,7 @@ latex_elements = {
\usepackage{pdflscape} \usepackage{pdflscape}
\pagenumbering{roman} \pagenumbering{roman}
\usepackage{array} \usepackage{array}
\setcounter{tocdepth}{2}
''', ''',
# Format output to avoid empty pages # Format output to avoid empty pages
'classoptions': ',openany,oneside' 'classoptions': ',openany,oneside'
......
...@@ -58,6 +58,7 @@ locations in the developer guide. ...@@ -58,6 +58,7 @@ locations in the developer guide.
documentation-generation documentation-generation
style style
tools tools
known-issues
********************* *********************
Doxygen documentation Doxygen documentation
......
.. _gmx-dev-known-issues:
Known issues relevant for developers
====================================
This is a non-exhaustive list of known issues that have been observed
and can be of interest for developers. These have not been solved
because they are either outside the scope of the GROMACS project
or are are simply too difficult or tedious to address ourselves.
FP exceptions with CUDA 7.0
---------------------------
When using CUDA 7.0 in a ``Debug`` build, if the PME FFT task is offloaded
to a GPU, a floating point exception will abort the :ref:`mdrun <gmx mdrun>` execution.
The exception originates from the CUDA FFT (cuFFT) library.
To avoid this issue, we advise using a later CUDA version.
...@@ -12,23 +12,36 @@ Welcome to the |Gromacs| documentation! ...@@ -12,23 +12,36 @@ Welcome to the |Gromacs| documentation!
The complete documentation is also available as a `printable PDF here`_. The complete documentation is also available as a `printable PDF here`_.
.. toctree::
.. toctree:: :maxdepth: 1
:maxdepth: 1
download
download release-notes/index
release-notes/index install-guide/index
install-guide/index user-guide/index
user-guide/index how-to/index
how-to/index reference-manual/index
reference-manual/index dev-manual/index
dev-manual/index
==================
================== Indices and tables
Indices and tables ==================
==================
* :ref:`genindex`
* :ref:`genindex`
.. only:: latex
The release notes can be found online at http://manual.gromacs.org/current/release-notes/index.html
.. toctree::
:maxdepth: 1
download
install-guide/index
user-guide/index
how-to/index
reference-manual/index
dev-manual/index
.. _printable PDF here: `gmx-manual`_ .. _printable PDF here: `gmx-manual`_
......
...@@ -83,18 +83,6 @@ appropriate value instead of ``xxx`` : ...@@ -83,18 +83,6 @@ appropriate value instead of ``xxx`` :
* ``-DGMX_FFT_LIBRARY=xxx`` to select whether to use ``fftw3``, ``mkl`` or ``fftpack`` libraries for `FFT support`_ * ``-DGMX_FFT_LIBRARY=xxx`` to select whether to use ``fftw3``, ``mkl`` or ``fftpack`` libraries for `FFT support`_
* ``-DCMAKE_BUILD_TYPE=Debug`` to build |Gromacs| in debug mode * ``-DCMAKE_BUILD_TYPE=Debug`` to build |Gromacs| in debug mode
Building with MiMiC QM/MM support
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MiMiC QM/MM interface integration will require linking against MiMiC
communication library, that establishes the communication channel between
|Gromacs| and CPMD. Check that the installation folder of the library
is added to CMAKE_PREFIX_PATH if it is installed in non-standard location.
Building QM/MM-capable version requires double-precision version of |Gromacs|
compiled with MPI support:
* ``-DGMX_DOUBLE=ON -DGMX_MPI -DGMX_MIMIC=ON``
Building older versions Building older versions
^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
...@@ -135,9 +123,9 @@ Other compilers may work (Cray, Pathscale, older clang) but do ...@@ -135,9 +123,9 @@ Other compilers may work (Cray, Pathscale, older clang) but do
not offer competitive performance. We recommend against PGI because not offer competitive performance. We recommend against PGI because
the performance with C++ is very bad. the performance with C++ is very bad.
The xlc compiler is not supported and has not been tested on POWER The xlc compiler is not supported and version 16.1 does not compile on
architectures for |Gromacs|\ -\ |version|. We recommend to use the gcc POWER architectures for |Gromacs|\ -\ |version|. We recommend to use
compiler instead, as it is being extensively tested. the gcc compiler instead, as it is being extensively tested.
You may also need the most recent version of other compiler toolchain You may also need the most recent version of other compiler toolchain
components beside the compiler itself (e.g. assembler or linker); components beside the compiler itself (e.g. assembler or linker);
...@@ -334,6 +322,24 @@ If you need to customize this further, use ...@@ -334,6 +322,24 @@ If you need to customize this further, use
The full list and order(!) of libraries you require are found in Intel's MKL documentation for your system. The full list and order(!) of libraries you require are found in Intel's MKL documentation for your system.
Using ARM Performance Libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The ARM Performance Libraries provides FFT transforms implementation for ARM
architectures.
Preliminary support is provided for ARMPL in |Gromacs| through its FFTW-compatible API.
Assuming that the ARM HPC toolchain environment including the ARMPL paths
are set up (e.g. through loading the appropriate modules like
``module load Module-Prefix/arm-hpc-compiler-X.Y/armpl/X.Y``) use the following cmake
options:
::
cmake -DGMX_FFT_LIBRARY=fftw3 \
-DFFTWF_LIBRARY="${ARMPL_DIR}/lib/libarmpl_lp64.so" \
-DFFTWF_INCLUDE_DIR=${ARMPL_DIR}/include