PATH ""
MKL_MANUALLY)
if(${GMX_FFT_LIBRARY} STREQUAL "FFTW3")
+ # ${FFTW} must be in upper case
if(GMX_DOUBLE)
- set(FFTW fftw)
+ set(FFTW "FFTW")
else()
- set(FFTW fftwf)
+ set(FFTW "FFTWF")
endif()
- # Note that these calls are expected to function the same way,
- # particularly with respect to setting CMake variables that
- # record the presence of particular FFTW SIMD support.
- # TODO There is no need for this requirement, all the remaining
- # code here can be refactored to have just one check of
- # GMX_BUILD_OWN_FFTW, which simplifies both code paths.
if(GMX_BUILD_OWN_FFTW)
- add_subdirectory(src/contrib/fftw)
+ add_subdirectory(src/contrib/fftw)
+ include_directories(BEFORE ${${FFTW}_INCLUDE_DIRS})
+ # libgmxfftw is always built static, so libgromacs does not
+ # have a dependency on anything, so PKG_FFT should be empty
+ set(PKG_FFT "")
+ set(FFT_STATUS_MESSAGE "Using external FFT library - FFTW3 build managed by GROMACS")
else()
- find_package(FFTW COMPONENTS ${FFTW})
- endif()
+ string(TOLOWER "${FFTW}" LOWERFFTW)
+ find_package(FFTW COMPONENTS ${LOWERFFTW})
- string(TOUPPER "${FFTW}" FFTW)
- if(NOT ${FFTW}_FOUND)
- MESSAGE(FATAL_ERROR "Cannot find FFTW 3 (with correct precision - libfftw3f for mixed-precision GROMACS or libfftw3 for double-precision GROMACS). Either choose the right precision, choose another FFT(W) library (-DGMX_FFT_LIBRARY), enable the advanced option to let GROMACS build FFTW 3 for you (-GMX_BUILD_OWN_FFTW=ON), or use the really slow GROMACS built-in fftpack library (-DGMX_FFT_LIBRARY=fftpack).")
- endif()
+ if(NOT ${FFTW}_FOUND)
+ MESSAGE(FATAL_ERROR "Cannot find FFTW 3 (with correct precision - libfftw3f for mixed-precision GROMACS or libfftw3 for double-precision GROMACS). Either choose the right precision, choose another FFT(W) library (-DGMX_FFT_LIBRARY), enable the advanced option to let GROMACS build FFTW 3 for you (-DGMX_BUILD_OWN_FFTW=ON), or use the really slow GROMACS built-in fftpack library (-DGMX_FFT_LIBRARY=fftpack).")
+ endif()
- set(PKG_FFT "${${FFTW}_PKG}")
- if (GMX_BUILD_OWN_FFTW)
- include_directories(BEFORE ${${FFTW}_INCLUDE_DIRS})
- else()
+ set(PKG_FFT "${${FFTW}_PKG}")
include_directories(${${FFTW}_INCLUDE_DIRS})
- endif()
- set(FFT_LIBRARIES ${${FFTW}_LIBRARIES})
- set(GMX_FFT_FFTW3 1)
- if ((${GMX_SIMD} MATCHES "SSE" OR ${GMX_SIMD} MATCHES "AVX") AND NOT ${FFTW}_HAVE_SIMD)
- message(WARNING "The fftw library found is compiled without SIMD support, which makes it slow. Consider recompiling it or contact your admin")
- else()
- if(${GMX_SIMD} MATCHES "AVX" AND NOT (${FFTW}_HAVE_SSE OR ${FFTW}_HAVE_SSE2))
- # If we end up here we have an AVX Gromacs build, and FFTW
- # with SIMD. FFTW 3.3.5 will have the behaviour that
- # configuring with AVX support also adds SSE support, which is
- # what we want. There is no good way to detect the FFTW
- # version, however.
- message(WARNING "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 both SSE2 and AVX instruction support (use both --enable-sse2 and --enable-avx). More recent versions of FFTW compile support for such narrower SIMD by default.")
+ if ((${GMX_SIMD} MATCHES "SSE" OR ${GMX_SIMD} MATCHES "AVX") AND NOT ${FFTW}_HAVE_SIMD)
+ message(WARNING "The fftw library found is compiled without SIMD support, which makes it slow. Consider recompiling it or contact your admin")
+ else()
- if(${GMX_SIMD} MATCHES "AVX" AND NOT (${FFTW}_HAVE_SSE OR ${FFTW}_HAVE_SSE2 OR ${FFTW}_HAVE_AVX_128 OR ${FFTW}_HAVE_AVX2_128))
- # If we end up here we have an AVX Gromacs build, and FFTW with SIMD, but no 128-bit SIMD, this means AVX is enabled for FFTW.
- message(WARNING "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 both SSE2 and AVX instruction support (use both --enable-sse2 and --enable-avx). The FFTW library will determine at runtime which SIMD instruction set is fastest for different parts of the FFTs.")
++ if(${GMX_SIMD} MATCHES "AVX" AND NOT (${FFTW}_HAVE_SSE OR ${FFTW}_HAVE_SSE2))
++ # If we end up here we have an AVX Gromacs build, and FFTW
++ # with SIMD. FFTW 3.3.5 will have the behaviour that
++ # configuring with AVX support also adds SSE support, which is
++ # what we want. There is no good way to detect the FFTW
++ # version, however.
++ message(WARNING "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 both SSE2 and AVX instruction support (use both --enable-sse2 and --enable-avx). More recent versions of FFTW compile support for such narrower SIMD by default.")
+ endif()
++ set(FFT_STATUS_MESSAGE "Using external FFT library - FFTW3")
endif()
- set(FFT_STATUS_MESSAGE "Using external FFT library - FFTW3")
endif()
- set(FFT_STATUS_MESSAGE "Using external FFT library - FFTW3")
+ set(FFT_LIBRARIES ${${FFTW}_LIBRARIES})
+ set(GMX_FFT_FFTW3 1)
elseif(${GMX_FFT_LIBRARY} STREQUAL "MKL")
# 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
year = {2000},
}
+ @incollection {Pall2015,
+ author = {P{\'a}ll, Szil{\'a}rd and Abraham, Mark James and Kutzner, Carsten and Hess, Berk and Lindahl, Erik},
+ title = { Tackling Exascale Software Challenges in Molecular Dynamics Simulati\
+ ons with {GROMACS} },
+ booktitle = {Solving Software Challenges for Exascale },
+ editor = { Markidis, Stephano and Laure, Erwin },
+ pages = { 3--27 },
+ year = { 2015 },
+ volume = { 8759 },
+ publisher = { Springer International Publishing Switzerland },
+ address = { London }
+ }
+
+ @article {Abraham2015,
+ author = { Abraham, Mark James and Murtola, Teemu and Schulz, Roland and P{\'a}ll, Szil{\'a}rd and Smith, Jeremy C. and Hess, Berk and Lindahl, Erik },
+ title = { {GROMACS}: High performance molecular simulations through multi-level parallelism from laptops to supercomputers },
+ journal = { {SoftwareX} },
+ volume = { 1--2 },
+ publisher = { John Wiley & Sons, Inc. },
+ pages = { 19--25 },
+ year = { 2015 },
+ doi = "http://dx.doi.org/10.1016/j.softx.2015.06.001"
+ }
++
+@Misc{lmfit,
+ author = {Joachim Wuttke},
+ title = {lmfit},
+ howpublished = {http://apps.jcns.fz-juelich.de/doku/sc/lmfit},
+ year = 2013}
+
+@Article{Steen-Saethre2014a,
+ author = {B. Steen-S{\ae}thre and A. C. Hoffmann and D. van der Spoel},
+ title = {Order Parameters and Algorithmic Approaches for Detection and Demarcation of Interfaces in Hydrate−Fluid and Ice−Fluid Systems},
+ journal = {J. Chem. Theor. Comput.},
+ year = 2014,
+ volume = 10,
+ pages = {5606-5615}}
+
+@Article{ Wensink2003a,
+ author = "E. J. W. Wensink and A. C. Hoffmann and P. J. {van
+ Maaren} and D. {van der Spoel}",
+ title = "Dynamic properties of water/alcohol mixtures studied
+ by computer simulation",
+ journal = BTjcp,
+ year = 2003,
+ volume = 119,
+ pages = "7308-7317"
+}
+
+@Article{Guo2002b,
+ author = {Guang-Jun Guo and Yi-Gang Zhang and Keith Refson and Ya-Juan Zhao},
+ title = {Viscosity and stress autocorrelation function in supercooled water: a molecular dynamics study},
+ journal = {Mol. Phys.},
+ year = 2002,
+ volume = 100,
+ pages = {2617-2627}}
+
+@Article{Fanourgakis2012a,
+ author = {George S. Fanourgakis and J. S. Medina and R. Prosmiti},
+ title = {Determining the Bulk Viscosity of Rigid Water Models},
+ journal = {J. Phys. Chem. A},
+ year = 2012,
+ volume = 116,
+ pages = {2564-2570}}
+
+@Article{Palmer1994a,
+ author = {B. J. Palmer},
+ title = {Transverse-current autocorrelation-function calculations of the shear viscosity for molecular liquids.},
+ journal = {Phys. Rev. E},
+ year = 1994,
+ volume = 49,
+ pages = {359-366}}
+
* global for this process (MPI rank). */
hwinfo = gmx_detect_hardware(fplog, cr, bTryUseGPU);
+ gmx_print_detected_hardware(fplog, cr, hwinfo);
+
+ if (fplog != NULL)
+ {
+ /* Print references after all software/hardware printing */
++ please_cite(fplog, "Abraham2015");
+ please_cite(fplog, "Pall2015");
+ please_cite(fplog, "Pronk2013");
+ please_cite(fplog, "Hess2008b");
+ please_cite(fplog, "Spoel2005a");
+ please_cite(fplog, "Lindahl2001a");
+ please_cite(fplog, "Berendsen95a");
+ }
snew(state, 1);
if (SIMMASTER(cr))