option(GMX_FAHCORE "Build a library with mdrun functionality" OFF)
mark_as_advanced(GMX_FAHCORE)
-option(GMX_COOL_QUOTES "Enable Gromacs cool quotes" ON)
+option(GMX_COOL_QUOTES "Enable GROMACS cool quotes" ON)
mark_as_advanced(GMX_COOL_QUOTES)
gmx_add_cache_dependency(GMX_COOL_QUOTES BOOL "NOT GMX_FAHCORE" OFF)
if(NOT DEFINED GMX_EXTERNAL_BOOST AND NOT Boost_FOUND)
message("Boost >= 1.44 not found. Using minimal internal version. "
"This may cause trouble if you plan on compiling/linking other "
- "software that uses Boost against Gromacs.")
+ "software that uses Boost against GROMACS.")
endif()
endif()
option(GMX_EXTERNAL_BOOST "Use external Boost instead of minimal built-in version"
message(FATAL_ERROR
"Boost >= 1.44 not found. "
"You can set GMX_EXTERNAL_BOOST=OFF to compile against minimal "
- "version of Boost included with Gromacs.")
+ "version of Boost included with GROMACS.")
endif()
if(NOT DEFINED GMX_BUILD_UNITTESTS AND NOT HAVE_LIBXML2)
These files are semi-automatic translations by f2c from the original netlib BLAS library.
The source has been modified to (mostly) use modern C formatting, and to get rid of
-compiler warnings. Any errors in doing this should be blamed on the Gromacs developers, and
+compiler warnings. Any errors in doing this should be blamed on the GROMACS developers, and
not the reference BLAS implementation.
The reference BLAS implementation is available from http://www.netlib.org/blas
via anonymous ftp and the World Wide Web. Thus, it can be included in commercial software
packages (and has been). We only ask that proper credit be given to the authors."
-While the rest of Gromacs is LGPL, we think it's only fair to give you the same rights to
+While the rest of GROMACS is LGPL, we think it's only fair to give you the same rights to
our modified BLAS files as the original netlib versions, so do what you want with them.
However, be warned that we have only tested that they to the right thing in the cases used
-in Gromacs (primarily full & sparse matrix diagonalization), so in most cases it is a much
+in GROMACS (primarily full & sparse matrix diagonalization), so in most cases it is a much
better idea to use the full reference implementation.
Erik Lindahl, 2008-10-07.
These files are semi-automatic translations by f2c from the original netlib LAPACK library.
The source has been modified to (mostly) use modern C formatting, and to get rid of
-compiler warnings. Any errors in doing this should be blamed on the Gromacs developers, and
+compiler warnings. Any errors in doing this should be blamed on the GROMACS developers, and
not the reference LAPACK implementation.
The reference LAPACK implementation is available from http://www.netlib.org/lapack
via anonymous ftp and the World Wide Web. Thus, it can be included in commercial software
packages (and has been). We only ask that proper credit be given to the authors."
-While the rest of Gromacs is LGPL, we think it's only fair to give you the same rights to
+While the rest of GROMACS is LGPL, we think it's only fair to give you the same rights to
our modified LAPACK files as the original netlib versions, so do what you want with them.
However, be warned that we have only tested that they to the right thing in the cases used
-in Gromacs (primarily full & sparse matrix diagonalization), so in most cases it is a much
+in GROMACS (primarily full & sparse matrix diagonalization), so in most cases it is a much
better idea to use the full reference implementation.
Erik Lindahl, 2008-10-07.
-Gromacs is a versatile and high-performance toolkit for molecular simulations, and extensively used both in biomolecular and materials sciences.
+GROMACS is a versatile and high-performance toolkit for molecular simulations, and extensively used both in biomolecular and materials sciences.
The precompiled binary distributions come with threads support for efficient parallelization on multi-core workstations, but if you want to use large-scale MPI parallelization you will need to build from source on the target system due to MPI library compatibility issues.
execute_process(COMMAND ${CMAKE_OBJDUMP} --reloc ${${FFTW}_LIBRARY} OUTPUT_VARIABLE ${FFTW}_OBJDUMP)
if (${${FFTW}_OBJDUMP} MATCHES "R_X86_64" #Should always be true for static libraries. Checks that objdump works properly and that the library isn't dynamic
AND NOT ${${FFTW}_OBJDUMP} MATCHES "R_X86_64_PLT32")
- message(FATAL_ERROR "The FFTW library ${${FFTW}_LIBRARY} cannot be used with shared libraries. Provide a different FFTW library by setting ${FFTW}_LIBRARY. If you don't have a different one, recompile FFTW with \"--enable-shared\" or \"--with-pic\". Or disable shared libraries for Gromacs by setting BUILD_SHARED_LIBS to \"no\". Note: Disabling shared libraries requires up to 10x as much disk space.")
+ message(FATAL_ERROR "The FFTW library ${${FFTW}_LIBRARY} cannot be used with shared libraries. Provide a different FFTW library by setting ${FFTW}_LIBRARY. If you don't have a different one, recompile FFTW with \"--enable-shared\" or \"--with-pic\". Or disable shared libraries for GROMACS by setting BUILD_SHARED_LIBS to \"no\". Note: Disabling shared libraries requires up to 10x as much disk space.")
endif()
endif()
set(CMAKE_REQUIRED_LIBRARIES)
include(FindThreads)
if(CMAKE_USE_WIN32_THREADS_INIT AND NOT HAVE_PROCESSOR_NUMBER)
- message(WARNING "Incomplete Windows Processor Group API. If you want Gromacs to be able to set thread affinity, choose a Mingw distribution with a complete API (e.g. Mingw-w64).")
+ message(WARNING "Incomplete Windows Processor Group API. If you want GROMACS to be able to set thread affinity, choose a Mingw distribution with a complete API (e.g. Mingw-w64).")
endif()
if (CMAKE_USE_WIN32_THREADS_INIT AND HAVE_PROCESSOR_NUMBER)
#
# This file is part of the GROMACS molecular simulation package.
#
-# Copyright (c) 2012,2013,2014, by the GROMACS development team, led by
+# Copyright (c) 2012,2013,2014,2015, by the GROMACS development team, led by
# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
# and including many others, as listed in the AUTHORS file in the
# top-level source directory and at http://www.gromacs.org.
# the research papers on the package. Check out http://www.gromacs.org.
# Custom build type "Reference", to be used for creating new
-# reference values in the Gromacs regression tests.
+# reference values in the GROMACS regression tests.
set( CMAKE_CXX_FLAGS_REFERENCE "-O0 -g" CACHE STRING "C++ flags for regressiontests reference runs." FORCE)
set( CMAKE_C_FLAGS_REFERENCE "-O0 -g" CACHE STRING "C flags for regressiontests reference runs." FORCE)
set( CMAKE_EXE_LINKER_FLAGS_REFERENCE "" CACHE STRING "Linker flags for regressiontests reference runs.")
set(GMX_THREAD_MPI OFF CACHE BOOL "Disabled for regressiontests reference builds" FORCE)
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR NOT "${CMAKE_C_COMPILER_VERSION}" MATCHES "4.7")
- message(WARNING "Reference values for regressiontests should use Gromacs compiled with "
+ message(WARNING "Reference values for regressiontests should use GROMACS compiled with "
"gcc 4.7, but your configuration is using ${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION}.")
endif()
endif()
#
# This file is part of the GROMACS molecular simulation package.
#
-# Copyright (c) 2014, by the GROMACS development team, led by
+# Copyright (c) 2014,2015, by the GROMACS development team, led by
# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
# and including many others, as listed in the AUTHORS file in the
# top-level source directory and at http://www.gromacs.org.
set(CPACK_PACKAGE_VENDOR "gromacs.org")
set(CPACK_PACKAGE_CONTACT "gmx-users@gromacs.org")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
- "Gromacs - a toolkit for high-performance molecular simulation")
+ "GROMACS - a toolkit for high-performance molecular simulation")
# Set version info.
set(CPACK_PACKAGE_VERSION_MAJOR ${GMX_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${GMX_VERSION_MINOR})
# To help us fund GROMACS development, we humbly ask that you cite
# the research papers on the package. Check out http://www.gromacs.org.
-# Manage the Gromacs shared library setup.
+# Manage the GROMACS shared library setup.
########################################################################
# Shared/static library settings
if (UNIX AND GMX_PREFER_STATIC_LIBS)
if(BUILD_SHARED_LIBS)
# Warn the user about the combination. But don't overwrite the request.
- message(WARNING "Searching for static libraries requested, and building shared Gromacs libraries requested. This might cause problems linking later.")
+ message(WARNING "Searching for static libraries requested, and building shared GROMACS libraries requested. This might cause problems linking later.")
endif()
# On Linux .a is the static library suffix, on Mac OS X .lib can also
# be used, so we'll add both to the preference list.
IF( WIN32)
if (NOT BUILD_SHARED_LIBS)
if(NOT GMX_PREFER_STATIC_LIBS)
- message(WARNING "Shared system libraries requested, and static Gromacs libraries requested.")
+ message(WARNING "Shared system libraries requested, and static GROMACS libraries requested.")
endif()
else()
if(MINGW)
endif()
if(GMX_PREFER_STATIC_LIBS)
#this combination segfaults (illegal passing of file handles)
- message(FATAL_ERROR "Static system libraries requested, and shared Gromacs libraries requested.")
+ message(FATAL_ERROR "Static system libraries requested, and shared GROMACS libraries requested.")
endif()
# Visibility not yet implemented
# add_definitions(-DUSE_VISIBILITY -DTMPI_USE_VISIBILITY)
# and the first iteration can sometimes be done as a pair in single precision. This should
# be plenty enough for Molecular Dynamics applications. Many of our double precision math
# functions still achieve very close to full double precision, but we do not guarantee that
-# they will be able to achieve higher accuracy if you set this beyond 44 bits. Gromacs will
+# they will be able to achieve higher accuracy if you set this beyond 44 bits. GROMACS will
# work - but some unit tests might fail.
#
set(GMX_SIMD_ACCURACY_BITS_DOUBLE 44 CACHE STRING "Target mantissa bits for SIMD double math")
gmx_test_avx_gcc_maskload_bug(GMX_SIMD_X86_AVX_GCC_MASKLOAD_BUG "${SIMD_C_FLAGS}")
set(GMX_SIMD_X86_AVX_128_FMA 1)
- set(SIMD_STATUS_MESSAGE "Enabling 128-bit AVX SIMD Gromacs SIMD (with fused-multiply add)")
+ set(SIMD_STATUS_MESSAGE "Enabling 128-bit AVX SIMD GROMACS SIMD (with fused-multiply add)")
elseif(${GMX_SIMD} STREQUAL "AVX_256")
#
# This file is part of the GROMACS molecular simulation package.
#
-# Copyright (c) 2012,2013,2014, by the GROMACS development team, led by
+# Copyright (c) 2012,2013,2014,2015, by the GROMACS development team, led by
# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
# and including many others, as listed in the AUTHORS file in the
# top-level source directory and at http://www.gromacs.org.
endif()
if (CMAKE_C_COMPILER_ID STREQUAL "PGI")
- message(WARNING "All tested PGI compiler versions (up to 12.9.0) generate binaries which produce incorrect results, or even fail to compile Gromacs. Highly recommended to use a different compiler. If you choose to use PGI, make sure to run the regressiontests.")
+ message(WARNING "All tested PGI compiler versions (up to 12.9.0) generate binaries which produce incorrect results, or even fail to compile GROMACS. Highly recommended to use a different compiler. If you choose to use PGI, make sure to run the regressiontests.")
endif()
if(CMAKE_COMPILER_IS_GNUCC AND
dev-manual/tools.rst
dev-manual/uncrustify.rst
install-guide/index.rst
- man/gromacs.7.rst
user-guide/index.rst
user-guide/getting-started.rst
user-guide/flow.rst
# TODO: Make this remove obsolete .rst files.
gmx_add_custom_output_target(sphinx-programs OUTPUT STAMP
COMMAND ${CMAKE_COMMAND} -E make_directory programs
+ COMMAND ${CMAKE_COMMAND} -E make_directory man
COMMAND gmx -quiet help -export rst
DEPENDS gmx
WORKING_DIRECTORY ${SPHINX_INPUT_DIR}
# -*- coding: utf-8 -*-
#
-# Gromacs documentation build configuration file, created by
+# GROMACS documentation build configuration file, created by
# sphinx-quickstart on Tue Jan 13 14:28:44 2015.
#
# This file is execfile()d with the current directory set to its
.. _MKL: https://software.intel.com/en-us/intel-mkl
.. _VMD: http://www.ks.uiuc.edu/Research/vmd/
.. _PyMOL: http://www.pymol.org
-.. _continuous integration server used by Gromacs: http://jenkins.gromacs.org
+.. _continuous integration server used by GROMACS: http://jenkins.gromacs.org
.. _Jenkins: http://jenkins-ci.org
.. _webpage: http://www.gromacs.org
.. _ftp site: ftp://ftp.gromacs.org/pub/gromacs/
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
- ('index', 'Gromacs.tex', u'Gromacs Documentation',
- u'Gromacs development team', 'manual'),
+ ('index', 'Gromacs.tex', u'GROMACS Documentation',
+ u'GROMACS development team', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- ('index', 'Gromacs', u'Gromacs Documentation',
- u'Gromacs development team', 'Gromacs', 'One line description of project.',
+ ('index', 'GROMACS', u'GROMACS Documentation',
+ u'GROMACS development team', 'GROMACS', 'One line description of project.',
'Miscellaneous'),
]
* Consistent usage of ::
- #include "..." // This should be used for Gromacs headers
+ #include "..." // This should be used for GROMACS headers
and ::
# version.
parser.add_option('-s', '--style', type='choice', default='pub-priv',
choices=('single-group', 'pub-priv', 'pub-local'),
- help='Style for Gromacs includes')
+ help='Style for GROMACS includes')
parser.add_option('--absolute', action='store_true',
help='Write all include paths relative to src/')
options, args = parser.parse_args()
It will check the settings made at configuration time and include a
suitable low-level implementation (that can be either single, double,
or both). It also contains the routines for memory alignment, and
-based on the current Gromacs precision it will set aliases to 'real'
+based on the current \Gromacs precision it will set aliases to 'real'
SIMD datatypes (see further down) so the implementations do not have
-to care about Gromacs-specific details. However, note that you might
-not get all SIMD support you hoped for: If you compiled Gromacs in
+to care about \Gromacs-specific details. However, note that you might
+not get all SIMD support you hoped for: If you compiled \Gromacs in
double precision but the hardware only supports single-precision SIMD
-there will not be any SIMD routines for default Gromacs 'real' precision.
+there will not be any SIMD routines for default \Gromacs 'real' precision.
There are \#defines you can use to check this, as described further down.
</dd>
<dt>`gromacs/simd/impl_reference.h`</dt>
<dd>
This file contains a few rvec-related SIMD functions, e.g. to
calculate scalar products, norms, or cross products. They obviously
-cannot operate on scalar Gromacs rvec types, but use separate SIMD
+cannot operate on scalar \Gromacs rvec types, but use separate SIMD
variables for X,Y, and Z vector components.
</dd>
</dl>
<dl>
<dt>`#gmx_simd_int32_t`</dt>
<dd>
-This is used for integers when converting to/from Gromacs default "real" type.
+This is used for integers when converting to/from \Gromacs default "real" type.
The corresponding routines have suffix `_i`, e.g. `gmx_simd_add_i()`.
</dd>
<dt>`gmx_simd_fint32_t`</dt>
</dd>
</dl>
-Operations on these types will be defined to either float/double (or corresponding integers) based on the current Gromacs precision, so the documentation is occasionally more detailed for the lower-level actual implementation functions.
+Operations on these types will be defined to either float/double (or corresponding integers) based on the current \Gromacs precision, so the documentation is occasionally more detailed for the lower-level actual implementation functions.
SIMD4 Macros
------------
reStructuredText help for the commands, which in turn is used to generate man
and HTML help. Internally, this executes `gmx help -export rst`, which
triggers special handling in the internal help module.
+See documentation for
+\linktodevmanual{build-system,special targets in the build system} for details
+of which targets to use for generating the documentation..
If this option is set, the help module loops through all the modules in the
binary, writing help for each into a separate file. The help module writes
Additionally, a list of all the modules is generated (`gromacs.7` for man
pages, and alphabetical and by-topic lists for the HTML pages).
-TODO: Document/link to existing documentation for targets that use the rst help
-
Handling C %main() functions {#section_wrapperbinary_cmain}
----------------------------
- \subpage page_analysisframework <br/>
Provides an overview of the framework that the \Gromacs library provides for
writing (trajectory) analysis tools.
+ - \subpage page_onlinehelp <br/>
+ Provides an overview of the formatting markup available in help texts.
- \subpage page_usinglibrary <br/>
Provides general guidance for writing software that uses the \Gromacs
library.
--- /dev/null
+Help formatting {#page_onlinehelp}
+===============
+
+Some parts of \Gromacs use in-source strings as a documentation source. The
+most notable use of these is the description and options list printed out by
+the `-h` command line, and this case is exposed also to code that uses \Gromacs
+as a library to write command-line tools. The help text is declared as an
+array of strings:
+
+ const char *const desc[] = {
+ "First paragraph.",
+ "",
+ "Second paragraph",
+ "with more text",
+ "and [TT]some formatting[tt].",
+ };
+
+The array variable is then passed to a function that exposes it as the help
+text. Some of the help content is also generated based on, e.g., the list of
+options that the program declares.
+
+The same approach is also used internally in \Gromacs in a few other places.
+The same help text is used for console output (like in the `-h` case), as well
+as for producing reStructuredText. The reStructuredText output is passed to
+Sphinx to produce a HTML user guide and Unix man pages.
+
+Formatting markup
+=================
+
+Partly due to historical reasons, the markup allowed within the help text is a
+mixture of reStructuredText and \Gromacs-specific markup. The allowed
+formatting is currently not that extensive, but basic constructs should work.
+
+The general approach to formatting is that the text is written to
+reStructuredText as-is, after replacement of the \Gromacs-specific markup, with
+line breaks between each string in the input array. This means that the commas
+at the end of each line (separating the strings) are critical for proper
+formatting. This also means that any reStructuredText construct will appear
+correctly in the HTML and man pages (as long as the output format supports it).
+
+For console output, there input string is parsed for some basic
+reStructuredText constructs to be able to rewrap the text to the console width
+(currently fixed at 78 characters). This parsing is one major constraint on
+what reStructuredText constructs can be used; paragraph-level markup that is
+not recognized by this parser results in messy console output. Inline markup
+is currently not processed in any way, so any construct that renders reasonably
+in plain text can in principle be used.
+
+reStructuredText
+----------------
+
+The following reStructuredText constructs are recognized and work for console
+output:
+ - Paragraphs, i.e., blocks of text separated by an empty line. Text within
+ each paragraph is wrapped separately, and indentation is preserved (as long
+ as the whole paragraph has the same indentation level, which is expected for
+ reStructuredText). This means that block quotes are also rendered
+ reasonably, since they are just indented paragraphs.
+ - Literal blocks, i.e., indented paragraphs where the preceding paragraph ends
+ with `::`. Line breaks within such paragraphs are preserved. The rules for
+ handling the `::` are the same as in reStructuredText.
+ Multiple paragraphs within a literal block are not currently supported.
+ - Titles, i.e., a line underlined by a punctuation character.
+ Title formatting is currently preserved as-is, so it must be manually
+ ensured that the used punctuation character properly fits into the context
+ (i.e., other titles in the same generated reStructuredText document).
+ Titles with both under- and overline are not currently supported.
+ - Bullet lists. Only lists that start with `*` are currently recognized.
+ Indentation for the second and subsequent lines is determined from
+ the first non-space character after the bullet and/or from the second line
+ in the input (if these are not the same, the minimum is used).
+ Note that in reStructuredText, the `*` must not be indented with respect to
+ the preceding paragraph; otherwise, the bullet list is rendered within a
+ block quote. Also, an empty line needs to precede a bullet list.
+ - Enumerated lists. Only lists that start with digits are supported (e.g.,
+ `1.`). Multi-digit numbers can be used.
+ Indentation is determined as for bullet lists.
+ Lists are not renumbered automatically.
+
+\Gromacs-specific markup
+------------------------
+
+Markup within paragraphs is currently done with \Gromacs-specific constructs
+limited with brackets. In the future, some of these may get replaced with more
+reStructuredText constructs. The following are used:
+ - `[TT]`/`[tt]`: text between these tags is formatted in a monospace font.
+ - `[BB]`/`[bb]`: text between these tags is formatted in a bold font.
+ - `[IT]`/`[it]`: text between these tags is formatted in an italic font.
+ - `[MAG]`/`[mag]`: text between these tags is rendered between `|` (bar)
+ characters (which is a special character in reStructuredText).
+ - `[PAR]`: this is replaced by two newlines to produce a paragraph break.
+ For any new help text, an explicit empty line is preferred.
+Various other markup constructs, mainly related to math, are also used in some
+places, but currently these are always replaced with the same text irrespective
+of the output format, and a new approach is needed for proper math support.
+
+Additionally, the following replacements are possible (not necessarily in all
+contexts):
+ - `[REF]`/`[ref]`: replaced with a link to a section that describes the term
+ between these tags. Only affects the reStructuredText output; the tags are
+ simply removed from console output.
+ The mechanism for managing these crosslinks would need additional work.
+ - `[THISMODULE]`: replaced with the name of the current module/command
+ (e.g., `gmx angle`).
+ - `[PROGRAM]`: replaced with the name of the current executable (e.g., `gmx`).
+
+\if libapi
+Implementation
+==============
+
+See \ref module_onlinehelp module documentation for implementation details.
+
+See \ref page_wrapperbinary for details of how the reStructuredText help is
+exported and processed further.
+\endif
+++ /dev/null
-man1
-man7/gromacs.7
+++ /dev/null
-:orphan:
-
-GROMACS
-=======
-
-Description
------------
-
-**GROMACS** is a full-featured suite of programs to perform molecular dynamics
-simulations - in other words, to simulate the behavior of systems with hundreds
-to millions of particles, using Newtonian equations of motion.
-It is primarily used for research on proteins, lipids, and polymers, but can be
-applied to a wide variety of chemical and biological research questions.
-
-Synopsis
---------
-
-The following commands make up the GROMACS suite. Please refer to their
-individual man pages for further details.
-
-.. include:: bytopic.rst
-
-Additional documentation
-------------------------
-
-Consult the manual at <http://www.gromacs.org> for an introduction to molecular
-dynamics in general and GROMACS in particular, as well as an overview of the
-individual programs.
-
-References
-----------
-
-The development of GROMACS is mainly funded by academic research grants.
-To help us fund development, the authors humbly ask that you cite the GROMACS papers:
-
-H.J.C. Berendsen, D. van der Spoel and R. van Drunen. **GROMACS: A message-passing
-parallel molecular dynamics implementation**. Comp. Phys. Comm. *91*, 43-56 (1995)
-
-Erik Lindahl, Berk Hess and David van der Spoel. **GROMACS 3.0: A package for
-molecular simulation and trajectory analysis**. J. Mol. Mod. *7*, 306-317 (2001)
-
-B. Hess, C. Kutzner, D. van der Spoel, and E. Lindahl. **GROMACS 4: Algorithms for
-Highly Efficient, Load-Balanced, and Scalable Molecular Simulation**.
-J. Chem. Theory Comput. *4*, 3, 435-447 (2008),
-<http://dx.doi.org/10.1021/ct700301q>
-
-Authors
--------
-
-Current developers:
-
-David van der Spoel <spoel@gromacs.org>
-Berk Hess <hess@gromacs.org>
-Erik Lindahl <lindahl@gromacs.org>
-
-A full list of present and former contributors
-is available at <http://www.gromacs.org>
-
-This manual page is largely based on the GROMACS online reference, and the text
-was prepared originally by Nicholas Breen <nbreen@ofb.net>.
-
-Bugs
-----
-
-GROMACS has no major known bugs, but be warned that it stresses your CPU more
-than most software. Systems with slightly flaky hardware may prove unreliable
-while running heavy-duty simulations. If at all possible, please try to
-reproduce bugs on another machine before reporting them.
With constraints, the equations become significantly more complicated,
in that each of these equations need to be solved iteratively for the
-constraint forces. Previous to Gromacs 5.1, these iterative
-constraints were solved as described in~\cite{Yu2010}. From Gromacs
+constraint forces. Before {\gromacs} 5.1, these iterative
+constraints were solved as described in~\cite{Yu2010}. From {\gromacs}
5.1 onward, MTTK with constraints has been removed because of
numerical stability issues with the iterations.
Environment Variables
=====================
-Gromacs programs may be influenced by the use of
+|Gromacs| programs may be influenced by the use of
environment variables. First of all, the variables set in
the ``GMXRC`` file are essential for running and
-compiling Gromacs. Some other useful environment variables are
+compiling |Gromacs|. Some other useful environment variables are
listed in the following sections. Most environment variables function
by being set in your shell to any non-NULL value. Specific
requirements are described below if other values need to be set. You
Print constraint virial and force virial energy terms.
``GMX_MAXBACKUP``
- Gromacs automatically backs up old
+ |Gromacs| automatically backs up old
copies of files when trying to write a new file of the same
name, and this variable controls the maximum number of
backups that will be made, default 99. If set to 0 it fails to
``ghostview`` and ``rasmol``. Set to empty to disable
automatic viewing of a particular file type. The command will
be forked off and run in the background at the same priority
- as the Gromacs tool (which might not be what you want).
+ as the |Gromacs| tool (which might not be what you want).
Be careful not to use a command which blocks the terminal
(e.g. ``vi``), since multiple instances might be run.
* box vectors (free format, space separated reals), values:
v1(x) v2(y) v3(z) v1(y) v1(z) v2(x) v2(z) v3(x) v3(y),
the last 6 values may be omitted (they will be set to zero).
- Gromacs only supports boxes with v1(y)=v1(z)=v2(z)=0.
+ |Gromacs| only supports boxes with v1(y)=v1(z)=v2(z)=0.
This format is fixed, ie. all columns are in a fixed
position. Optionally (for now only yet with trjconv) you can write gro
the default case, the binaries are located in
``/usr/local/gromacs/bin``, however, you can ask your local system
administrator for more information, and then follow the advice for
-:ref:`getting access to Gromacs`.
+:ref:`getting access to GROMACS`.
Flowchart of typical simulation
-------------------------------
-# This is a Gromacs template makefile for your own utility programs using pkg-config.
+# This is a GROMACS template makefile for your own utility programs using pkg-config.
#
# Copy this file to whatever directory you are using for your own software
#
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2011,2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2011,2012,2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
{
static const char *const desc[] = {
"This is a template for writing your own analysis tools for",
- "Gromacs. The advantage of using Gromacs for this is that you",
+ "GROMACS. The advantage of using GROMACS for this is that you",
"have access to all information in the topology, and your",
"program will be able to handle all types of coordinates and",
- "trajectory files supported by Gromacs. In addition,",
+ "trajectory files supported by GROMACS. In addition,",
"you get a lot of functionality for free from the trajectory",
"analysis library, including support for flexible dynamic",
"selections. Go ahead an try it![PAR]",
-530
+586
If You Want Something Done You Have to Do It Yourself_(Highlander II)
I Live the Life They Wish They Did_(Tricky)
Jesus Built My Hotrod_(Ministry)
We'll celebrate a woman for anything, as long as it's not her talent._(Colleen McCullough)
I believe the big bang of self-driving cars is about to come._(Jen-Hsun Huang, CEO NVIDIA)
This is where we have been working hard to push down performance._(Szilard Pall, GTC 2015 talk)
-
-
+Some of these pro-drug messages come from popular culture._(John Walters)
+Don't pay any attention to what they write about you. Just measure it in inches._(Andy Warhol)
+Art is what you can get away with._(Andy Warhol)
+I spent a lot of money on booze, birds and fast cars. The rest I just squandered._(George Best)
+The only greatness for man is immortality._(James Dean)
+Do not quench your inspiration and your imagination; do not become the slave of your model._(Vincent Van Gogh)
+You always pass failure on the way to success._(Mickey Rooney)
+I always seem to get inspiration and renewed vitality by contact with this great novel land of yours which sticks up out of the Atlantic._(Winston Churchill)
+I am at two with nature._(Woody Allen)
+I'm no model lady. A model's just an imitation of the real thing._(Mae West)
+Science is the great antidote to the poison of enthusiasm and superstition._(Adam Smith, Wealth of Nations, 1776)
+Science is a wonderful thing if one does not have to earn one's living at it._(Albert Einstein)
+Science is the record of dead religions._(Oscar Wilde)
+Physics isn't a religion. If it were, we'd have a much easier time raising money._(Leon Lederman)
+It is now quite lawful for a Catholic woman to avoid pregnancy by a resort to mathematics, though she is still forbidden to resort to physics and chemistry._(Henry Louis Mencken)
+An expert is a person who has made all the mistakes that can be made in a very narrow field._(Niels Bohr)
+In my opinion, we don't devote nearly enough scientific research to finding a cure for jerks._(Bill Watterson)
+Scientists do not join hands every Sunday and sing "Yes gravity is real! I know gravity is real! I will have faith! I believe in my heart that what goes up, up, up must come down, down, down. Amen!" If they did, we would think they were pretty insecure about the concept._(Dan Barker)
+Take away paradox from the thinker and you have a professor._(Soren Kirkegaard)
+Measuring programming progress by lines of code is like measuring aircraft building progress by weight._(Bill Gates)
+Protons give an atom its identity, electrons its personality._(Bill Bryson)
+Money won't buy happiness, but it will pay the salaries of a large research staff to study the problem._(Bill Vaughan)
+Torture numbers, and they'll confess to anything._(Greg Easterbrook)
+Should we force science down the throats of those that have no taste for it? Is it our duty to drag them kicking and screaming into the twenty-first century? I am afraid that it is._(George Porter)
+A computer would deserve to be called intelligent if it could deceive a human into believing that it was human._(Alan Turing)
+Any one who considers arithmetical methods of producing random digits is, of course, in a state of sin._(John von Neumann)
+No, no, you're not thinking, you're just being logical._(Niels Bohr)
+As an adolescent I aspired to lasting fame, I craved factual certainty, and I thirsted for a meaningful vision of human life -- so I became a scientist. This is like becoming an archbishop so you can meet girls._(Matt Cartmill)
+Problems worthy / of attack / prove their worth / by hitting back._(Piet Hein)
+Naive you are if you believe life favours those who aren't naive._(Piet Hein)
+Never measure the height of a mountain until you have reached the top. Then you will see how low it was._(Dag Hammarskjold)
+Praise those of your critics for whom nothing is up to standard._(Dag Hammarskjold)
+Inventions have long since reached their limit, and I see no hope for further development._(Julius Sextus Frontinus, 1st century A.D.)
+Lottery: A tax on people who are bad at math._(Ambrose Bierce)
+Even if you are on the right track, you will get run over if you just sit there._(Will Rogers)
+Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to build bigger and better idiots. So far, the universe is winning._(Rick Cook)
+There's a limit to how many times you can read how great you are and what an inspiration you are, but I'm not there yet._(Randy Pausch)
+Throughout my academic career, I'd given some pretty good talks. But being considered the best speaker in the computer science department is like being known as the tallest of the Seven Dwarfs._(Randy Pausch)
+If everything seems under control, you're just not going fast enough._(Mario Andretti)
+Sincerity is the key to success. Once you can fake that you’ve got it made._(Groucho Marx)
+This work contains many things which are new and interesting. Unfortunately, everything that is new is not interesting, and everything which is interesting, is not new._(Lev Landau)
+Does college pay? They do if you are a good open-field runner._(Will Rogers)
+Academe, n.: An ancient school where morality and philosophy were taught. Academy, n.: A modern school where football is taught._(Ambrose Bierce)
+This simulation is not as the former._(Malvolio, Act II, scene V of Shaphespeare's Twelfth Night)
+Here, kitty, kitty..._(Erwin Schroedinger)
+Sir, spare your threats: The bug which you would fright me with I seek._(Hermione, Act III, scene II of Shakespeare's Winter's Tale)
+Erwin with his psi can do / Calculations quite a few. / But one thing has not been seen / Just what psi really mean._(Felix Bloch)
+Only entropy comes easy._(Anton Chekov)
+The lovliest theories are being overthrown by these damned experiments; it is no fun being a chemist any more._(Justus von Liebig, letter to J.J. Berzelius 1834)
+If all else fails, immortality can always be assured by spectacular error._(John Kenneth Galbraith)
+Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live._(Martin Golding)
+If I have not seen as far as others, it is because giants were standing on my shoulders._(Hal Abelson)
+Weaseling out of things is important to learn. It's what separates us from the animals... except the weasels._(Homer Simpson)
+In science, truth always wins._(Max Perutz)
+Creativity in science, as in art, cannot be organized. It arises spontaneously from individual talent. Well-run laboratories can foster it, but hierarchical organizations, inflexible bureaucratic rules, and mountains of futile paperwork can kill it._(Max Perutz)
+Every electron is sacred._(Greg McMullan, on Cryo-EM detectors)
- The Gromacs Crew
\ No newline at end of file
+ The GROMACS Crew
\ No newline at end of file
#include "gromacs/onlinehelp/helpwritercontext.h"
#include "gromacs/options/basicoptions.h"
#include "gromacs/options/options.h"
+#include "gromacs/utility/arrayref.h"
#include "gromacs/utility/baseversion.h"
#include "gromacs/utility/exceptions.h"
#include "gromacs/utility/file.h"
const CommandLineModuleMap &modules,
const CommandLineModuleGroupList &groups);
- void exportHelp(HelpExportInterface *exporter) const;
+ void exportHelp(HelpExportInterface *exporter);
boost::scoped_ptr<RootHelpTopic> rootTopic_;
const ProgramContextInterface &programContext_;
struct RootHelpText
{
- static const char name[];
static const char title[];
static const char *const text[];
};
-// The first two are not used.
-const char RootHelpText::name[] = "";
-const char RootHelpText::title[] = "";
-const char *const RootHelpText::text[] = { "" };
+// These are used for the gmx.1 man page.
+// TODO: Do not hardcode them here, but pass them from the outside to make this
+// code more generic.
+const char RootHelpText::title[] = "molecular dynamics simulation suite";
+const char *const RootHelpText::text[] = {
+ "|Gromacs| is a full-featured suite of programs to perform molecular",
+ "dynamics simulations, i.e., to simulate the behavior of systems with",
+ "hundreds to millions of particles using Newtonian equations of motion.",
+ "It is primarily used for research on proteins, lipids, and polymers, but",
+ "can be applied to a wide variety of chemical and biological research",
+ "questions.",
+};
/*! \brief
* Help topic that forms the root of the help tree for the help subcommand.
*
* \ingroup module_commandline
*/
-class RootHelpTopic : public CompositeHelpTopic<RootHelpText>
+class RootHelpTopic : public AbstractCompositeHelpTopic
{
public:
/*! \brief
{
}
+ virtual const char *name() const { return helpModule_.binaryName_.c_str(); }
+ virtual const char *title() const { return title_.c_str(); }
+
//! Adds a top-level topic and optionally marks it as exported.
void addTopic(HelpTopicPointer topic, bool bExported)
{
addSubTopic(move(topic));
}
//! Exports all the top-level topics with the given exporter.
- void exportHelp(HelpExportInterface *exporter) const;
+ void exportHelp(HelpExportInterface *exporter);
virtual void writeHelp(const HelpWriterContext &context) const;
private:
+ // unused because of the writeHelp() override
+ virtual std::string helpText() const { return ""; }
+
const CommandLineHelpModuleImpl &helpModule_;
+ std::string title_;
std::vector<std::string> exportedTopics_;
GMX_DISALLOW_COPY_AND_ASSIGN(RootHelpTopic);
};
-void RootHelpTopic::exportHelp(HelpExportInterface *exporter) const
+void RootHelpTopic::exportHelp(HelpExportInterface *exporter)
{
std::vector<std::string>::const_iterator topicName;
for (topicName = exportedTopics_.begin();
GMX_RELEASE_ASSERT(topic != NULL, "Exported help topic no longer found");
exporter->exportTopic(*topic);
}
+ // For now, the title is only set for the export to make it not appear in
+ // console output, which makes things consistent for 'gmx help' and
+ // 'gmx help <command>'.
+ title_ = RootHelpText::title;
+ exporter->exportTopic(*this);
}
void RootHelpTopic::writeHelp(const HelpWriterContext &context) const
{
- if (context.outputFormat() != eHelpOutputFormat_Console)
- {
- // TODO: Implement once the situation with Redmine issue #969 is more
- // clear.
- GMX_THROW(NotImplementedError(
- "Root help is not implemented for this output format"));
- }
{
- CommandLineCommonOptionsHolder optionsHolder;
- CommandLineHelpContext cmdlineContext(*helpModule_.context_);
- cmdlineContext.setModuleDisplayName(helpModule_.binaryName_);
+ CommandLineCommonOptionsHolder optionsHolder;
+ boost::scoped_ptr<CommandLineHelpContext> cmdlineContext;
+ if (helpModule_.context_ != NULL)
+ {
+ cmdlineContext.reset(new CommandLineHelpContext(*helpModule_.context_));
+ }
+ else
+ {
+ cmdlineContext.reset(new CommandLineHelpContext(context));
+ }
+ cmdlineContext->setModuleDisplayName(helpModule_.binaryName_);
optionsHolder.initOptions();
+ Options &options = *optionsHolder.options();
+ options.setDescription(RootHelpText::text);
// TODO: Add <command> [<args>] into the synopsis.
- CommandLineHelpWriter(*optionsHolder.options())
- .writeHelp(cmdlineContext);
+ CommandLineHelpWriter(options)
+ .setShowDescriptions(context.outputFormat() != eHelpOutputFormat_Console)
+ .writeHelp(*cmdlineContext);
+ }
+ if (context.outputFormat() == eHelpOutputFormat_Console)
+ {
+ // TODO: Consider printing a list of "core" commands. Would require someone
+ // to determine such a set...
+ writeSubTopicList(context,
+ "Additional help is available on the following topics:");
+ // TODO: Make these respect the binary name passed in, to make tests work better.
+ context.writeTextBlock("To access the help, use '[PROGRAM] help <topic>'.");
+ context.writeTextBlock("For help on a command, use '[PROGRAM] help <command>'.");
+ }
+ else
+ {
+ context.writeTitle(formatString("%s commands", helpModule_.binaryName_.c_str()));
+ context.writeTextBlock(
+ "The following commands are available. Please refer to their "
+ "individual man pages or [TT][PROGRAM] help <command>[tt] "
+ "for further details.");
+ context.writeTextBlock("");
+ context.writeTextBlock(".. include:: /man/bytopic.rst");
}
- // TODO: Consider printing a list of "core" commands. Would require someone
- // to determine such a set...
- writeSubTopicList(context,
- "Additional help is available on the following topics:");
- // TODO: Make these respect the binary name passed in, to make tests work better.
- context.writeTextBlock("To access the help, use '[PROGRAM] help <topic>'.");
- context.writeTextBlock("For help on a command, use '[PROGRAM] help <command>'.");
}
/********************************************************************
private:
FileOutputRedirectorInterface *outputRedirector_;
+ const std::string &binaryName_;
HelpLinks links_;
boost::scoped_ptr<File> indexFile_;
boost::scoped_ptr<File> manPagesFile_;
HelpExportReStructuredText::HelpExportReStructuredText(
const CommandLineHelpModuleImpl &helpModule)
: outputRedirector_(helpModule.outputRedirector_),
+ binaryName_(helpModule.binaryName_),
links_(eHelpOutputFormat_Rst)
{
File linksFile("links.dat", "r");
// This would make Sphinx reruns much faster.
File file(outputRedirector_->openFileForWriting("programs/" + tag + ".rst"));
file.writeLine(formatString(".. _%s:", displayName.c_str()));
- if (0 == displayName.compare("gmx mdrun"))
+ if (0 == displayName.compare(binaryName_ + " mdrun"))
{
// Make an extra link target for the convenience of
// MPI-specific documentation
file.writeLine(" See also");
file.writeLine(" --------");
file.writeLine();
- file.writeLine(" :manpage:`gromacs(7)`");
+ file.writeLine(formatString(" :manpage:`%s(1)`", binaryName_.c_str()));
file.writeLine();
file.writeLine(" More information about |Gromacs| is available at <http://www.gromacs.org/>.");
file.close();
{
indexFile_->close();
indexFile_.reset();
- manPagesFile_->writeLine(" ('man/gromacs.7', 'gromacs', 'molecular dynamics simulation suite', '', 7)");
+ // TODO: Generalize.
+ manPagesFile_->writeLine(
+ formatString(" ('programs/%s', '%s', '%s', '', 1)",
+ binaryName_.c_str(), binaryName_.c_str(),
+ RootHelpText::title));
manPagesFile_->writeLine("]");
manPagesFile_->close();
manPagesFile_.reset();
indexFile_->writeLine(title);
indexFile_->writeLine(std::string(std::strlen(title), '-'));
manPagesFile_->writeLine(title);
- manPagesFile_->writeLine(std::string(std::strlen(title), '+'));
+ manPagesFile_->writeLine(std::string(std::strlen(title), '^'));
ModuleGroupContents::const_iterator module;
for (module = modules.begin(); module != modules.end(); ++module)
indexFile_->writeLine(formatString("| :doc:`%s <%s>` - %s",
displayName.c_str(), tag.c_str(),
module->second));
- manPagesFile_->writeLine(formatString("| ``%s`` - %s",
- displayName.c_str(),
+ manPagesFile_->writeLine(formatString(":manpage:`%s(1)`\n %s",
+ tag.c_str(),
module->second));
}
indexFile_->writeLine();
const std::string path("programs/" + std::string(topic.name()) + ".rst");
File file(outputRedirector_->openFileForWriting(path));
HelpWriterContext context(&file, eHelpOutputFormat_Rst, &links_);
+ if (topic.name() == binaryName_)
+ {
+ context.writeTextBlock(":orphan:");
+ context.writeTextBlock("");
+ }
HelpManager manager(topic, context);
manager.writeCurrentTopic();
}
{
}
-void CommandLineHelpModuleImpl::exportHelp(HelpExportInterface *exporter) const
+void CommandLineHelpModuleImpl::exportHelp(HelpExportInterface *exporter)
{
// TODO: Would be nicer to have the file names supplied by the build system
// and/or export a list of files from here.
return 0;
}
- File &outputFile = impl_->outputRedirector_->standardOutput();
- HelpLinks links(eHelpOutputFormat_Console);
+ File &outputFile = impl_->outputRedirector_->standardOutput();
+ HelpLinks links(eHelpOutputFormat_Console);
initProgramLinks(&links, *impl_);
- boost::scoped_ptr<CommandLineHelpContext> context(
- new CommandLineHelpContext(&outputFile,
- eHelpOutputFormat_Console, &links));
- context->setShowHidden(impl_->bHidden_);
+ CommandLineHelpContext context(&outputFile, eHelpOutputFormat_Console, &links);
+ context.setShowHidden(impl_->bHidden_);
if (impl_->moduleOverride_ != NULL)
{
- context->setModuleDisplayName(impl_->programContext_.displayName());
- impl_->moduleOverride_->writeHelp(*context);
+ context.setModuleDisplayName(impl_->programContext_.displayName());
+ impl_->moduleOverride_->writeHelp(context);
return 0;
}
- impl_->context_ = context.get();
+ impl_->context_ = &context;
- HelpManager helpManager(*impl_->rootTopic_, context->writerContext());
+ HelpManager helpManager(*impl_->rootTopic_, context.writerContext());
try
{
for (int i = 1; i < argc; ++i)
for (i = bugs_.begin(); i != bugs_.end(); ++i)
{
const char *const bug = *i;
- TextLineWrapperSettings settings;
- settings.setIndent(2);
- settings.setFirstLineIndent(0);
- settings.setLineLength(78);
- context.outputFile().writeLine(
- context.substituteMarkupAndWrapToString(
- settings, formatString("* %s", bug)));
+ context.writeTextBlock(formatString("* %s", bug));
}
}
('programs/test-help', 'test-help', "Print help information", '', 1),
('programs/test-module', 'test-module', "First module", '', 1),
('programs/test-other', 'test-other', "Second module", '', 1),
- ('man/gromacs.7', 'gromacs', 'molecular dynamics simulation suite', '', 7)
+ ('programs/test', 'test', 'molecular dynamics simulation suite', '', 1)
]
]]></String>
<String Name="programs/test-help.rst"><![CDATA[
See also
--------
- :manpage:`gromacs(7)`
+ :manpage:`test(1)`
More information about |Gromacs| is available at <http://www.gromacs.org/>.
]]></String>
See also
--------
- :manpage:`gromacs(7)`
+ :manpage:`test(1)`
More information about |Gromacs| is available at <http://www.gromacs.org/>.
]]></String>
See also
--------
- :manpage:`gromacs(7)`
+ :manpage:`test(1)`
More information about |Gromacs| is available at <http://www.gromacs.org/>.
]]></String>
]]></String>
<String Name="man/bytopic.rst"><![CDATA[
Group 1
-+++++++
-| ``test module`` - First module
+^^^^^^^
+:manpage:`test-module(1)`
+ First module
Group 2
-+++++++
-| ``test other`` - Second module
+^^^^^^^
+:manpage:`test-other(1)`
+ Second module
]]></String>
<String Name="programs/topic1.rst"><![CDATA[
Another topic
=============
Help text
+]]></String>
+ <String Name="programs/test.rst"><![CDATA[
+:orphan:
+
+molecular dynamics simulation suite
+===================================
+Synopsis
+--------
+::
+
+ test [-[no]h] [-[no]quiet] [-[no]version] [-[no]copyright] [-nice <int>]
+ [-[no]backup]
+
+Description
+-----------
+|Gromacs| is a full-featured suite of programs to perform molecular
+dynamics simulations, i.e., to simulate the behavior of systems with
+hundreds to millions of particles using Newtonian equations of motion.
+It is primarily used for research on proteins, lipids, and polymers, but
+can be applied to a wide variety of chemical and biological research
+questions.
+
+Options
+-------
+Other options:
+
+``-[no]h`` (no)
+ Print help and quit
+``-[no]quiet`` (no)
+ Do not print common startup info or quotes
+``-[no]version`` (no)
+ Print extended version information and quit
+``-[no]copyright`` (yes)
+ Print copyright information on startup
+``-nice`` <int> (19)
+ Set the nicelevel (default depends on command)
+``-[no]backup`` (yes)
+ Write backups if output files exist
+
+test commands
+-------------
+The following commands are available. Please refer to their individual man pages or ``commandline-test help <command>`` for further details.
+
+.. include:: /man/bytopic.rst
]]></String>
</ReferenceData>
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
printf("Error when detecting floating-point word order.\n"
"Do you have a non-IEEE system?\n"
"If possible, use the XDR libraries provided with your system,\n"
- "instead of the Gromacs fallback XDR source.\n");
+ "instead of the GROMACS fallback XDR source.\n");
exit(0);
}
}
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
{
gmx_fatal(FARGS,
"No matrix data found in file. Note that the Hessian matrix format changed\n"
- "in Gromacs 3.3 to enable portable files and sparse matrix storage.\n");
+ "in GROMACS 3.3 to enable portable files and sparse matrix storage.\n");
}
/* Read generating Gromacs version */
}
gmx_fio_do_int(fio, prec);
- fprintf(stderr, "Reading %s precision matrix generated by Gromacs %s\n",
+ fprintf(stderr, "Reading %s precision matrix generated by GROMACS %s\n",
(prec == 1) ? "double" : "single", gmxver);
gmx_fio_do_int(fio, i);
if (strncmp(buf, "VERSION", 7))
{
gmx_fatal(FARGS, "Can not read file %s,\n"
- " this file is from a Gromacs version which is older than 2.0\n"
+ " this file is from a GROMACS version which is older than 2.0\n"
" Make a new one with grompp or use a gro or pdb file, if possible",
gmx_fio_getname(fio));
}
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2009,2010,2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2009,2010,2012,2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
printf("\nNo VMD Plugins found\n"
"Set the environment variable VMD_PLUGIN_PATH to the molfile folder within the\n"
"VMD installation.\n"
- "The architecture (e.g. 32bit versus 64bit) of Gromacs and VMD has to match.\n");
+ "The architecture (e.g. 32bit versus 64bit) of GROMACS and VMD has to match.\n");
return 0;
}
for (i = 0; i < globbuf.gl_pathc && vmdplugin->api == NULL; i++)
"when writing a [REF].pdb[ref] file with two or three structures (you",
"can use [TT]rasmol -nmrpdb[tt] to view such a [REF].pdb[ref] file).[PAR]",
- " Overlap calculations between covariance analysis:[BR]",
- " [BB]Note:[bb] the analysis should use the same fitting structure[PAR]",
-
+ "Overlap calculations between covariance analysis",
+ "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^",
+ "",
+ "[BB]Note:[bb] the analysis should use the same fitting structure",
+ "",
"[TT]-over[tt]: calculate the subspace overlap of the eigenvectors in",
"file [TT]-v2[tt] with eigenvectors [TT]-first[tt] to [TT]-last[tt]",
"in file [TT]-v[tt].[PAR]",
"of an arbitrary group, in absolute box coordinates. If you are calculating",
"profiles along the Z axis box dimension bZ, output would be from -bZ/2 to",
"bZ/2 if you center based on the entire system.",
- "Note that this behaviour has changed in Gromacs 5.0; earlier versions",
+ "Note that this behaviour has changed in GROMACS 5.0; earlier versions",
"merely performed a static binning in (0,bZ) and shifted the output. Now",
"we compute the center for each frame and bin in (-bZ/2,bZ/2).[PAR]",
"The first problem that while both proteins and lipids have low volume",
"compressibility, lipids have quite high area compressiblity. This means the",
"shape of the box (thickness and area/lipid) will fluctuate substantially even",
- "for a fully relaxed system. Since Gromacs places the box between the origin",
+ "for a fully relaxed system. Since GROMACS places the box between the origin",
"and positive coordinates, this in turn means that a bilayer centered in the",
"box will move a bit up/down due to these fluctuations, and smear out your",
"profile. The easiest way to fix this (if you want pressure coupling) is",
"Some fluctuation-dependent properties can be calculated provided",
"the correct energy terms are selected, and that the command line option",
"[TT]-fluct_props[tt] is given. The following properties",
- "will be computed:[BR]",
- "Property Energy terms needed[BR]",
- "---------------------------------------------------[BR]",
- "Heat capacity C[SUB]p[sub] (NPT sims): Enthalpy, Temp [BR]",
- "Heat capacity C[SUB]v[sub] (NVT sims): Etot, Temp [BR]",
- "Thermal expansion coeff. (NPT): Enthalpy, Vol, Temp[BR]",
- "Isothermal compressibility: Vol, Temp [BR]",
- "Adiabatic bulk modulus: Vol, Temp [BR]",
- "---------------------------------------------------[BR]",
+ "will be computed:",
+ "",
+ "=============================== ===================",
+ "Property Energy terms needed",
+ "=============================== ===================",
+ "Heat capacity C[SUB]p[sub] (NPT sims): Enthalpy, Temp",
+ "Heat capacity C[SUB]v[sub] (NVT sims): Etot, Temp",
+ "Thermal expansion coeff. (NPT): Enthalpy, Vol, Temp",
+ "Isothermal compressibility: Vol, Temp",
+ "Adiabatic bulk modulus: Vol, Temp",
+ "=============================== ===================",
+ "",
"You always need to set the number of molecules [TT]-nmol[tt].",
"The C[SUB]p[sub]/C[SUB]v[sub] computations do [BB]not[bb] include any corrections",
"for quantum effects. Use the [gmx-dos] program if you need that (and you do).[PAR]"
strcat(buf, ")");
}
}
- out = xvgropen(opt2fn("-o", NFILE, fnm), "Gromacs Energies", "Time (ps)", buf,
+ out = xvgropen(opt2fn("-o", NFILE, fnm), "GROMACS Energies", "Time (ps)", buf,
oenv);
snew(leg, nset+1);
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
{
const char *desc[] = {
"[THISMODULE] calculates the three principal axes of inertia for a group",
- "of atoms. NOTE: Old versions of Gromacs wrote the output data in a",
- "strange transposed way. As of Gromacs-5.0, the output file paxis1.dat",
+ "of atoms. NOTE: Old versions of GROMACS wrote the output data in a",
+ "strange transposed way. As of GROMACS 5.0, the output file paxis1.dat",
"contains the x/y/z components of the first (major) principal axis for",
"each frame, and similarly for the middle and minor axes in paxis2.dat",
"and paxis3.dat."
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2007,2008,2009,2010,2011,2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2007,2008,2009,2010,2011,2012,2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
int gmx_spatial(int argc, char *argv[])
{
const char *desc[] = {
- "[THISMODULE] calculates the spatial distribution function and ",
- "outputs it in a form that can be read by VMD as Gaussian98 cube format. ",
- "For a system of 32,000 atoms and a 50 ns trajectory, the SDF can be generated ",
- "in about 30 minutes, with most of the time dedicated to the two runs through ",
- "[TT]trjconv[tt] that are required to center everything properly. ",
- "This also takes a whole bunch of space (3 copies of the trajectory file). ",
- "Still, the pictures are pretty and very informative when the fitted selection is properly made. ",
- "3-4 atoms in a widely mobile group (like a free amino acid in solution) works ",
- "well, or select the protein backbone in a stable folded structure to get the SDF ",
- "of solvent and look at the time-averaged solvation shell. ",
- "It is also possible using this program to generate the SDF based on some arbitrary ",
- "Cartesian coordinate. To do that, simply omit the preliminary [gmx-trjconv] steps. \n",
- "USAGE: \n",
- "1. Use [gmx-make_ndx] to create a group containing the atoms around which you want the SDF \n",
- "2. [TT]gmx trjconv -s a.tpr -f a.tng -o b.tng -boxcenter tric -ur compact -pbc none[tt] \n",
- "3. [TT]gmx trjconv -s a.tpr -f b.tng -o c.tng -fit rot+trans[tt] \n",
- "4. run [THISMODULE] on the [TT]c.tng[tt] output of step #3. \n",
- "5. Load [TT]grid.cube[tt] into VMD and view as an isosurface. \n",
- "[BB]Note[bb] that systems such as micelles will require [TT]gmx trjconv -pbc cluster[tt] between steps 1 and 2\n",
- "WARNINGS:[BR]",
- "The SDF will be generated for a cube that contains all bins that have some non-zero occupancy. ",
- "However, the preparatory [TT]-fit rot+trans[tt] option to [gmx-trjconv] implies that your system will be rotating ",
- "and translating in space (in order that the selected group does not). Therefore the values that are ",
- "returned will only be valid for some region around your central group/coordinate that has full overlap ",
- "with system volume throughout the entire translated/rotated system over the course of the trajectory. ",
- "It is up to the user to ensure that this is the case. \n",
- "BUGS:[BR]",
- "When the allocated memory is not large enough, a segmentation fault may occur. This is usually detected ",
- "and the program is halted prior to the fault while displaying a warning message suggesting the use of the [TT]-nab[tt] (Number of Additional Bins)",
- "option. However, the program does not detect all such events. If you encounter a segmentation fault, run it again ",
- "with an increased [TT]-nab[tt] value. \n",
- "RISKY OPTIONS:[BR]",
- "To reduce the amount of space and time required, you can output only the coords ",
- "that are going to be used in the first and subsequent run through [gmx-trjconv]. ",
- "However, be sure to set the [TT]-nab[tt] option to a sufficiently high value since ",
- "memory is allocated for cube bins based on the initial coordinates and the [TT]-nab[tt] ",
- "option value. \n"
+ "[THISMODULE] calculates the spatial distribution function and",
+ "outputs it in a form that can be read by VMD as Gaussian98 cube format.",
+ "For a system of 32,000 atoms and a 50 ns trajectory, the SDF can be generated",
+ "in about 30 minutes, with most of the time dedicated to the two runs through",
+ "[TT]trjconv[tt] that are required to center everything properly.",
+ "This also takes a whole bunch of space (3 copies of the trajectory file).",
+ "Still, the pictures are pretty and very informative when the fitted selection is properly made.",
+ "3-4 atoms in a widely mobile group (like a free amino acid in solution) works",
+ "well, or select the protein backbone in a stable folded structure to get the SDF",
+ "of solvent and look at the time-averaged solvation shell.",
+ "It is also possible using this program to generate the SDF based on some arbitrary",
+ "Cartesian coordinate. To do that, simply omit the preliminary [gmx-trjconv] steps.",
+ "",
+ "Usage:",
+ "",
+ "1. Use [gmx-make_ndx] to create a group containing the atoms around which you want the SDF",
+ "2. [TT]gmx trjconv -s a.tpr -f a.tng -o b.tng -boxcenter tric -ur compact -pbc none[tt]",
+ "3. [TT]gmx trjconv -s a.tpr -f b.tng -o c.tng -fit rot+trans[tt]",
+ "4. run [THISMODULE] on the [TT]c.tng[tt] output of step #3.",
+ "5. Load [TT]grid.cube[tt] into VMD and view as an isosurface.",
+ "",
+ "[BB]Note[bb] that systems such as micelles will require [TT]gmx trjconv -pbc cluster[tt] between steps 1 and 2.",
+ "",
+ "Warnings",
+ "^^^^^^^^",
+ "",
+ "The SDF will be generated for a cube that contains all bins that have some non-zero occupancy.",
+ "However, the preparatory [TT]-fit rot+trans[tt] option to [gmx-trjconv] implies that your system will be rotating",
+ "and translating in space (in order that the selected group does not). Therefore the values that are",
+ "returned will only be valid for some region around your central group/coordinate that has full overlap",
+ "with system volume throughout the entire translated/rotated system over the course of the trajectory.",
+ "It is up to the user to ensure that this is the case.",
+ "",
+ "Risky options",
+ "^^^^^^^^^^^^^",
+ "",
+ "To reduce the amount of space and time required, you can output only the coords",
+ "that are going to be used in the first and subsequent run through [gmx-trjconv].",
+ "However, be sure to set the [TT]-nab[tt] option to a sufficiently high value since",
+ "memory is allocated for cube bins based on the initial coordinates and the [TT]-nab[tt]",
+ "option value."
+ };
+ const char *bugs[] = {
+ "When the allocated memory is not large enough, a segmentation fault may occur. This is usually detected "
+ "and the program is halted prior to the fault while displaying a warning message suggesting the use of the [TT]-nab[tt] (Number of Additional Bins) "
+ "option. However, the program does not detect all such events. If you encounter a segmentation fault, run it again "
+ "with an increased [TT]-nab[tt] value."
};
static gmx_bool bPBC = FALSE;
/* This is the routine responsible for adding default options,
* calling the X/motif interface, etc. */
if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
- NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
+ NFILE, fnm, asize(pa), pa, asize(desc), desc, asize(bugs), bugs, &oenv))
{
return 0;
}
"In that case the reference group would be the protein and the group",
"of molecules would consist of all the water atoms. When an index group",
"of the first n waters is made, the ordered trajectory can be used",
- "with any Gromacs program to analyze the n closest waters.",
+ "with any GROMACS program to analyze the n closest waters.",
"[PAR]",
"If the output file is a [REF].pdb[ref] file, the distance to the reference target",
"will be stored in the B-factor field in order to color with e.g. Rasmol.",
sep_line(fp);
fprintf(fp, "\n P E R F O R M A N C E R E S U L T S\n");
sep_line(fp);
- fprintf(fp, "%s for Gromacs %s\n", output_env_get_program_display_name(oenv),
+ fprintf(fp, "%s for GROMACS %s\n", output_env_get_program_display_name(oenv),
gmx_version());
if (!bThreads)
{
"",
"At present, three input modes are supported.",
"",
- " * With option [TT]-it[tt], the user provides a file which contains the",
- " file names of the umbrella simulation run-input files ([REF].tpr[ref] files),",
- " AND, with option [TT]-ix[tt], a file which contains file names of",
- " the pullx [TT]mdrun[tt] output files. The [REF].tpr[ref] and pullx files must",
- " be in corresponding order, i.e. the first [REF].tpr[ref] created the",
- " first pullx, etc.",
- " * Same as the previous input mode, except that the the user",
- " provides the pull force output file names ([TT]pullf.xvg[tt]) with option [TT]-if[tt].",
- " From the pull force the position in the umbrella potential is",
- " computed. This does not work with tabulated umbrella potentials.",
- " * With option [TT]-ip[tt], the user provides file names of (gzipped) [REF].pdo[ref] files, i.e.",
- " the GROMACS 3.3 umbrella output files. If you have some unusual"
- " reaction coordinate you may also generate your own [REF].pdo[ref] files and",
- " feed them with the [TT]-ip[tt] option into to [THISMODULE]. The [REF].pdo[ref] file header",
- " must be similar to the following::",
+ "* With option [TT]-it[tt], the user provides a file which contains the",
+ " file names of the umbrella simulation run-input files ([REF].tpr[ref] files),",
+ " AND, with option [TT]-ix[tt], a file which contains file names of",
+ " the pullx [TT]mdrun[tt] output files. The [REF].tpr[ref] and pullx files must",
+ " be in corresponding order, i.e. the first [REF].tpr[ref] created the",
+ " first pullx, etc.",
+ "* Same as the previous input mode, except that the the user",
+ " provides the pull force output file names ([TT]pullf.xvg[tt]) with option [TT]-if[tt].",
+ " From the pull force the position in the umbrella potential is",
+ " computed. This does not work with tabulated umbrella potentials.",
+ "* With option [TT]-ip[tt], the user provides file names of (gzipped) [REF].pdo[ref] files, i.e.",
+ " the GROMACS 3.3 umbrella output files. If you have some unusual"
+ " reaction coordinate you may also generate your own [REF].pdo[ref] files and",
+ " feed them with the [TT]-ip[tt] option into to [THISMODULE]. The [REF].pdo[ref] file header",
+ " must be similar to the following::",
"",
- " # UMBRELLA 3.0",
- " # Component selection: 0 0 1",
- " # nSkip 1",
- " # Ref. Group 'TestAtom'",
- " # Nr. of pull groups 2",
- " # Group 1 'GR1' Umb. Pos. 5.0 Umb. Cons. 1000.0",
- " # Group 2 'GR2' Umb. Pos. 2.0 Umb. Cons. 500.0",
- " #####",
+ " # UMBRELLA 3.0",
+ " # Component selection: 0 0 1",
+ " # nSkip 1",
+ " # Ref. Group 'TestAtom'",
+ " # Nr. of pull groups 2",
+ " # Group 1 'GR1' Umb. Pos. 5.0 Umb. Cons. 1000.0",
+ " # Group 2 'GR2' Umb. Pos. 2.0 Umb. Cons. 500.0",
+ " #####",
"",
- " The number of pull groups, umbrella positions, force constants, and names ",
- " may (of course) differ. Following the header, a time column and ",
- " a data column for each pull group follows (i.e. the displacement",
- " with respect to the umbrella center). Up to four pull groups are possible ",
- " per [REF].pdo[ref] file at present.",
+ " The number of pull groups, umbrella positions, force constants, and names ",
+ " may (of course) differ. Following the header, a time column and ",
+ " a data column for each pull group follows (i.e. the displacement",
+ " with respect to the umbrella center). Up to four pull groups are possible ",
+ " per [REF].pdo[ref] file at present.",
"",
"By default, all pull groups found in all pullx/pullf files are used in WHAM. If only ",
"some of the pull groups should be used, a pull group selection file (option [TT]-is[tt]) can ",
"",
"By default, the output files are",
"",
- " * [TT]-o[tt] PMF output file",
- " * [TT]-hist[tt] Histograms output file",
+ "* [TT]-o[tt] PMF output file",
+ "* [TT]-hist[tt] Histograms output file",
"",
"Always check whether the histograms sufficiently overlap.[PAR]",
"The umbrella potential is assumed to be harmonic and the force constants are ",
"read from the [REF].tpr[ref] or [REF].pdo[ref] files. If a non-harmonic umbrella force was applied ",
- "a tabulated potential can be provided with [TT]-tab[tt].[PAR]",
- "WHAM OPTIONS[BR]------------[BR]",
+ "a tabulated potential can be provided with [TT]-tab[tt].",
"",
- " * [TT]-bins[tt] Number of bins used in analysis",
- " * [TT]-temp[tt] Temperature in the simulations",
- " * [TT]-tol[tt] Stop iteration if profile (probability) changed less than tolerance",
- " * [TT]-auto[tt] Automatic determination of boundaries",
- " * [TT]-min,-max[tt] Boundaries of the profile",
+ "WHAM options",
+ "^^^^^^^^^^^^",
+ "",
+ "* [TT]-bins[tt] Number of bins used in analysis",
+ "* [TT]-temp[tt] Temperature in the simulations",
+ "* [TT]-tol[tt] Stop iteration if profile (probability) changed less than tolerance",
+ "* [TT]-auto[tt] Automatic determination of boundaries",
+ "* [TT]-min,-max[tt] Boundaries of the profile",
"",
"The data points that are used to compute the profile",
"can be restricted with options [TT]-b[tt], [TT]-e[tt], and [TT]-dt[tt]. ",
"periodicity of the system and generate a periodic PMF. The first and the last bin of the",
"reaction coordinate will assumed be be neighbors.[PAR]",
"Option [TT]-sym[tt] symmetrizes the profile around z=0 before output, ",
- "which may be useful for, e.g. membranes.[PAR]",
- "PARALLELIZATION[BR]----------------[BR]",
- "If available, the number of OpenMP threads used by g_wham is controlled with [TT]-nt[tt].[PAR]",
- "AUTOCORRELATIONS[BR]----------------[BR]",
+ "which may be useful for, e.g. membranes.",
+ "",
+ "Parallelization",
+ "^^^^^^^^^^^^^^^",
+ "",
+ "If available, the number of OpenMP threads used by g_wham is controlled with [TT]-nt[tt].",
+ "",
+ "Autocorrelations",
+ "^^^^^^^^^^^^^^^^",
+ "",
"With [TT]-ac[tt], [THISMODULE] estimates the integrated autocorrelation ",
"time (IACT) [GRK]tau[grk] for each umbrella window and weights the respective ",
"window with 1/[1+2*[GRK]tau[grk]/dt]. The IACTs are written ",
"less robust) method such as fitting to a double exponential, you can ",
"compute the IACTs with [gmx-analyze] and provide them to [THISMODULE] with the file ",
"[TT]iact-in.dat[tt] (option [TT]-iiact[tt]), which should contain one line per ",
- "input file ([REF].pdo[ref] or pullx/f file) and one column per pull group in the respective file.[PAR]",
- "ERROR ANALYSIS[BR]--------------[BR]",
+ "input file ([REF].pdo[ref] or pullx/f file) and one column per pull group in the respective file.",
+ "",
+ "Error analysis",
+ "^^^^^^^^^^^^^^",
+ "",
"Statistical errors may be estimated with bootstrap analysis. Use it with care, ",
"otherwise the statistical error may be substantially underestimated. ",
"More background and examples for the bootstrap technique can be found in ",
"Four bootstrapping methods are supported and ",
"selected with [TT]-bs-method[tt].",
"",
- " * [TT]b-hist[tt] Default: complete histograms are considered as independent ",
- " data points, and the bootstrap is carried out by assigning random weights to the ",
- " histograms (\"Bayesian bootstrap\"). Note that each point along the reaction coordinate",
- " must be covered by multiple independent histograms (e.g. 10 histograms), otherwise the ",
- " statistical error is underestimated.",
- " * [TT]hist[tt] Complete histograms are considered as independent data points. ",
- " For each bootstrap, N histograms are randomly chosen from the N given histograms ",
- " (allowing duplication, i.e. sampling with replacement).",
- " To avoid gaps without data along the reaction coordinate blocks of histograms ",
- " ([TT]-histbs-block[tt]) may be defined. In that case, the given histograms are ",
- " divided into blocks and only histograms within each block are mixed. Note that ",
- " the histograms within each block must be representative for all possible histograms, ",
- " otherwise the statistical error is underestimated.",
- " * [TT]traj[tt] The given histograms are used to generate new random trajectories,",
- " such that the generated data points are distributed according the given histograms ",
- " and properly autocorrelated. The autocorrelation time (ACT) for each window must be ",
- " known, so use [TT]-ac[tt] or provide the ACT with [TT]-iiact[tt]. If the ACT of all ",
- " windows are identical (and known), you can also provide them with [TT]-bs-tau[tt]. ",
- " Note that this method may severely underestimate the error in case of limited sampling, ",
- " that is if individual histograms do not represent the complete phase space at ",
- " the respective positions.",
- " * [TT]traj-gauss[tt] The same as method [TT]traj[tt], but the trajectories are ",
- " not bootstrapped from the umbrella histograms but from Gaussians with the average ",
- " and width of the umbrella histograms. That method yields similar error estimates ",
- " like method [TT]traj[tt].",
+ "* [TT]b-hist[tt] Default: complete histograms are considered as independent ",
+ " data points, and the bootstrap is carried out by assigning random weights to the ",
+ " histograms (\"Bayesian bootstrap\"). Note that each point along the reaction coordinate",
+ " must be covered by multiple independent histograms (e.g. 10 histograms), otherwise the ",
+ " statistical error is underestimated.",
+ "* [TT]hist[tt] Complete histograms are considered as independent data points. ",
+ " For each bootstrap, N histograms are randomly chosen from the N given histograms ",
+ " (allowing duplication, i.e. sampling with replacement).",
+ " To avoid gaps without data along the reaction coordinate blocks of histograms ",
+ " ([TT]-histbs-block[tt]) may be defined. In that case, the given histograms are ",
+ " divided into blocks and only histograms within each block are mixed. Note that ",
+ " the histograms within each block must be representative for all possible histograms, ",
+ " otherwise the statistical error is underestimated.",
+ "* [TT]traj[tt] The given histograms are used to generate new random trajectories,",
+ " such that the generated data points are distributed according the given histograms ",
+ " and properly autocorrelated. The autocorrelation time (ACT) for each window must be ",
+ " known, so use [TT]-ac[tt] or provide the ACT with [TT]-iiact[tt]. If the ACT of all ",
+ " windows are identical (and known), you can also provide them with [TT]-bs-tau[tt]. ",
+ " Note that this method may severely underestimate the error in case of limited sampling, ",
+ " that is if individual histograms do not represent the complete phase space at ",
+ " the respective positions.",
+ "* [TT]traj-gauss[tt] The same as method [TT]traj[tt], but the trajectories are ",
+ " not bootstrapped from the umbrella histograms but from Gaussians with the average ",
+ " and width of the umbrella histograms. That method yields similar error estimates ",
+ " like method [TT]traj[tt].",
"",
"Bootstrapping output:",
"",
- " * [TT]-bsres[tt] Average profile and standard deviations",
- " * [TT]-bsprof[tt] All bootstrapping profiles",
+ "* [TT]-bsres[tt] Average profile and standard deviations",
+ "* [TT]-bsprof[tt] All bootstrapping profiles",
"",
"With [TT]-vbs[tt] (verbose bootstrapping), the histograms of each bootstrap are written, ",
"and, with bootstrap method [TT]traj[tt], the cumulative distribution functions of ",
if (mm)
{
const char msg_version_difference[] =
- "The current Gromacs major & minor version are not identical to those that\n"
- "generated the checkpoint file. In principle Gromacs does not support\n"
+ "The current GROMACS major & minor version are not identical to those that\n"
+ "generated the checkpoint file. In principle GROMACS does not support\n"
"continuation from checkpoints between different versions, so we advise\n"
"against this. If you still want to try your luck we recommend that you use\n"
"the -noappend flag to keep your output files from the two versions separate.\n"
"file have changed between the different major & minor versions.\n";
const char msg_mismatch_notice[] =
- "Gromacs patchlevel, binary or parallel settings differ from previous run.\n"
+ "GROMACS patchlevel, binary or parallel settings differ from previous run.\n"
"Continuation is exact, but not guaranteed to be binary identical.\n";
const char msg_logdetails[] =
static void gmx_print_version_info(FILE *fp)
{
- fprintf(fp, "Gromacs version: %s\n", gmx_version());
+ fprintf(fp, "GROMACS version: %s\n", gmx_version());
const char *const git_hash = gmx_version_git_full_hash();
if (git_hash[0] != '\0')
{
}
if (print_to_stderr)
{
- fprintf(stderr, "Compiled SIMD instructions: %s (Gromacs could use %s on this machine, which is better)\n",
+ fprintf(stderr, "Compiled SIMD instructions: %s (GROMACS could use %s on this machine, which is better)\n",
gmx_cpuid_simd_string[compiled_simd],
gmx_cpuid_simd_string[simd]);
}
"\n"
"It appears as if you are trying to run a QM/MM calculation, but the force\n"
"field you are using does not contain atom numbers fields. This is an\n"
- "optional field (introduced in Gromacs 3.3) for general runs, but mandatory\n"
+ "optional field (introduced in GROMACS 3.3) for general runs, but mandatory\n"
"for QM/MM. The good news is that it is easy to add - put the atom number as\n"
"an integer just before the mass column in ffXXXnb.itp.\n"
"NB: United atoms have the same atom numbers as normal ones.\n\n");
if (strchr(ffdir, '/') == NULL)
{
- fprintf(out, ";\tForce field was read from the standard Gromacs share directory.\n;\n\n");
+ fprintf(out, ";\tForce field was read from the standard GROMACS share directory.\n;\n\n");
}
else if (ffdir[0] == '.')
{
if (ir->cutoff_scheme == ecutsGROUP)
{
warning_note(wi,
- "The group cutoff scheme is deprecated in Gromacs 5.0 and will be removed in a future "
+ "The group cutoff scheme is deprecated since GROMACS 5.0 and will be removed in a future "
"release when all interaction forms are supported for the verlet scheme. The verlet "
"scheme already scales better, and it is compatible with GPUs and other accelerators.");
sprintf(err_buf, "Can't use postive delta-lambda (%g) with expanded ensemble simulations", fep->delta_lambda);
CHECK(fep->delta_lambda > 0 && (ir->efep == efepEXPANDED));
- sprintf(err_buf, "Can only use expanded ensemble with md-vv for now; should be supported for other integrators in 5.0");
+ sprintf(err_buf, "Can only use expanded ensemble with md-vv (for now)");
CHECK(!(EI_VV(ir->eI)) && (ir->efep == efepEXPANDED));
sprintf(err_buf, "Free-energy not implemented for Ewald");
These files are semi-automatic translations by f2c from the original netlib BLAS library.
The source has been modified to (mostly) use modern C formatting, and to get rid of
-compiler warnings. Any errors in doing this should be blamed on the Gromacs developers, and
+compiler warnings. Any errors in doing this should be blamed on the GROMACS developers, and
not the reference BLAS implementation.
The reference BLAS implementation is available from http://www.netlib.org/blas
via anonymous ftp and the World Wide Web. Thus, it can be included in commercial software
packages (and has been). We only ask that proper credit be given to the authors."
-While the rest of Gromacs is LGPL, we think it's only fair to give you the same rights to
+While the rest of GROMACS is LGPL, we think it's only fair to give you the same rights to
our modified BLAS files as the original netlib versions, so do what you want with them.
However, be warned that we have only tested that they to the right thing in the cases used
-in Gromacs (primarily full & sparse matrix diagonalization), so in most cases it is a much
+in GROMACS (primarily full & sparse matrix diagonalization), so in most cases it is a much
better idea to use the full reference implementation.
Erik Lindahl, 2008-10-07.
These files are semi-automatic translations by f2c from the original netlib LAPACK library.
The source has been modified to (mostly) use modern C formatting, and to get rid of
-compiler warnings. Any errors in doing this should be blamed on the Gromacs developers, and
+compiler warnings. Any errors in doing this should be blamed on the GROMACS developers, and
not the reference LAPACK implementation.
The reference LAPACK implementation is available from http://www.netlib.org/lapack
via anonymous ftp and the World Wide Web. Thus, it can be included in commercial software
packages (and has been). We only ask that proper credit be given to the authors."
-While the rest of Gromacs is LGPL, we think it's only fair to give you the same rights to
+While the rest of GROMACS is LGPL, we think it's only fair to give you the same rights to
our modified LAPACK files as the original netlib versions, so do what you want with them.
However, be warned that we have only tested that they to the right thing in the cases used
-in Gromacs (primarily full & sparse matrix diagonalization), so in most cases it is a much
+in GROMACS (primarily full & sparse matrix diagonalization), so in most cases it is a much
better idea to use the full reference implementation.
Erik Lindahl, 2008-10-07.
#ifdef GMX_SIMD_HAVE_REAL
gmx_bool bUseSIMD;
/* MSVC 2010 produces buggy SIMD PBC code, disable SIMD for MSVC <= 2010 */
-#if defined _MSC_VER && _MSC_VER < 1700
+#if defined _MSC_VER && _MSC_VER < 1700 && !defined(__ICL)
bUseSIMD = FALSE;
#else
bUseSIMD = fr->use_simd_kernels;
#include "gromacs/utility/smalloc.h"
/* MSVC 2010 produces buggy SIMD PBC code, disable SIMD for MSVC <= 2010 */
-#if defined GMX_SIMD_HAVE_REAL && !(defined _MSC_VER && _MSC_VER < 1700)
+#if defined GMX_SIMD_HAVE_REAL && !(defined _MSC_VER && _MSC_VER < 1700) && !defined(__ICL)
#define LINCS_SIMD
#endif
#ifdef GMX_NBNXN_SIMD_4XN
*kernel_type = nbnxnk4xN_SIMD_4xN;
#else
- gmx_fatal(FARGS, "SIMD 4xN kernels requested, but Gromacs has been compiled without support for these kernels");
+ gmx_fatal(FARGS, "SIMD 4xN kernels requested, but GROMACS has been compiled without support for these kernels");
#endif
}
if (getenv("GMX_NBNXN_SIMD_2XNN") != NULL)
#ifdef GMX_NBNXN_SIMD_2XNN
*kernel_type = nbnxnk4xN_SIMD_2xNN;
#else
- gmx_fatal(FARGS, "SIMD 2x(N+N) kernels requested, but Gromacs has been compiled without support for these kernels");
+ gmx_fatal(FARGS, "SIMD 2x(N+N) kernels requested, but GROMACS has been compiled without support for these kernels");
#endif
}
if (bIsMaster)
{
fprintf(stderr,
- "NOTE: This version of Gromacs has been compiled in single precision,\n"
+ "NOTE: This version of GROMACS has been compiled in single precision,\n"
" which MIGHT not be accurate enough for normal mode analysis.\n"
- " Gromacs now uses sparse matrix storage, so the memory requirements\n"
+ " GROMACS now uses sparse matrix storage, so the memory requirements\n"
" are fairly modest even if you recompile in double precision.\n\n");
}
#endif
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
if (maxsr < 0)
{
gmx_fatal(FARGS, "%s, %d: Negative number of short range atoms.\n"
- "Call your Gromacs dealer for assistance.", __FILE__, __LINE__);
+ "Call your GROMACS dealer for assistance.", __FILE__, __LINE__);
}
/* This is just for initial allocation, so we do not reallocate
* all the nlist arrays many times in a row.
#include "gromacs/math/units.h"
#include "gromacs/math/vec.h"
#include "gromacs/random/random.h"
-#include "gromacs/simd/simd.h"
#include "gromacs/timing/wallcycle.h"
#include "gromacs/timing/walltime_accounting.h"
#include "gromacs/topology/mtop_util.h"
gmx_fatal(FARGS, "Unknown integrator %s", ei_names[inputrec->eI]);
}
-#ifdef GMX_SIMD
- /* Make sure we don't detect SIMD overflow generated before this point */
- gmx_simd_check_and_reset_overflow();
-#endif
-
while (bNotLastFrame)
{
frame_step = rerun_fr.step;
epot = enerd->term[F_EPOT];
bEnergyOutOfBounds = FALSE;
-#ifdef GMX_SIMD_X86_SSE2_OR_HIGHER
- /* With SSE the energy can overflow, check for this */
- if (gmx_simd_check_and_reset_overflow())
- {
- if (debug)
- {
- fprintf(debug, "Found an SSE overflow, assuming the energy is out of bounds\n");
- }
- bEnergyOutOfBounds = TRUE;
- }
-#endif
+
/* If the compiler doesn't optimize this check away
* we catch the NAN energies.
* The epot>GMX_REAL_MAX check catches inf values,
--- /dev/null
+/*
+ * This file is part of the GROMACS molecular simulation package.
+ *
+ * Copyright (c) 2015, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * If you want to redistribute modifications to GROMACS, please
+ * consider that scientific software is very special. Version
+ * control is crucial - bugs must be traceable. We will be happy to
+ * consider code for inclusion in the official distribution, but
+ * derived work must not be called official GROMACS. Details are found
+ * in the README & COPYING files - if they are missing, get the
+ * official version at http://www.gromacs.org.
+ *
+ * To help us fund GROMACS development, we humbly ask that you cite
+ * the research papers on the package. Check out http://www.gromacs.org.
+ */
+/*! \libinternal \defgroup module_onlinehelp Help Formatting for Online Help (onlinehelp)
+ * \ingroup group_utilitymodules
+ * \brief
+ * Provides functionality for formatting help text for console and reStructuredText.
+ *
+ * This module provides helper functions and classes for formatting text to the
+ * console and as reStructuredText through a single interface. The main
+ * components of the module are:
+ * - gmx::HelpWriterContext provides a single interface that can produce both
+ * output formats from the same input strings and API calls. Whenever
+ * possible, the output format should be abstracted using this interface,
+ * but in some cases code still writes out raw reStructuredText.
+ * - rstparser.h provides the functionality to parse reStructuredText such that
+ * it can be rewrapped for console output.
+ * - helpformat.h provides some general text-processing classes, currently
+ * focused on producing aligned tables for console output.
+ * - helptopicinterface.h, helptopic.h, and helpmanager.h provide classes for
+ * managing a hierarchy of help topics and printing out help from this
+ * hierarchy.
+ *
+ * The formatting syntax for strings accepted by this module is described in
+ * \ref page_onlinehelp. The module is currently exposed outside \Gromacs only
+ * through this formatting syntax, not any API calls.
+ *
+ * \author Teemu Murtola <teemu.murtola@gmail.com>
+ */
+/*! \internal \file
+ * \brief
+ * Dummy header for \ref module_onlinehelp documentation.
+ */
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2012,2014, by the GROMACS development team, led by
+ * Copyright (c) 2012,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
* To help us fund GROMACS development, we humbly ask that you cite
* the research papers on the package. Check out http://www.gromacs.org.
*/
-/*! \libinternal \defgroup module_onlinehelp Help Formatting for Online Help (onlinehelp)
- * \ingroup group_utilitymodules
- * \brief
- * Provides functionality for formatting help text for console and other
- * formats.
- *
- * This module provides helper functions and classes for formatting console
- * help, as well as man pages and HTML help from the source code. It should
- * not be necessary to call any methods in this module outside the \Gromacs
- * library.
- *
- * \author Teemu Murtola <teemu.murtola@gmail.com>
- */
/*! \libinternal \file
* \brief
* Declares gmx::HelpTopicInterface.
#include "gromacs/utility/programcontext.h"
#include "gromacs/utility/stringutil.h"
+#include "rstparser.h"
+
namespace gmx
{
{ "[TANH]", "tanh(" },
{ "[tanh]", ")" },
{ "[PAR]", "\n\n" },
- { "[BR]", "\n"},
{ "[GRK]", "" },
{ "[grk]", "" }
};
{ "[TANH]", "tanh(" },
{ "[tanh]", ")" },
{ "[PAR]", "\n\n" },
- // [BR] is fundamentally incompatible with rst
- { "[BR]", "\n\n"},
{ "[GRK]", "" },
{ "[grk]", "" }
};
return result;
}
-/*! \brief
- * Returns `true` if a list item starts in \p text at \p index.
- *
- * Does not throw.
- */
-bool startsListItem(const std::string &text, size_t index)
-{
- if (text.length() <= index + 1)
- {
- return false;
- }
- if (text[index] == '*' && std::isspace(text[index+1]))
- {
- return true;
- }
- if (std::isdigit(text[index]))
- {
- while (index < text.length() && std::isdigit(text[index]))
- {
- ++index;
- }
- if (text.length() > index + 1 && text[index] == '.'
- && std::isspace(text[index+1]))
- {
- return true;
- }
- }
- return false;
-}
-
//! \}
} // namespace
const int baseIndent = wrapper->settings().indent();
result = repall(result, sandrTty);
result = replaceLinks(result);
- std::string paragraph;
+ std::string paragraph;
paragraph.reserve(result.length());
- size_t i = 0;
- int nextBreakSize = 0;
- bool bLiteral = false;
- while (i < result.length())
+ RstParagraphIterator iter(result);
+ while (iter.nextParagraph())
{
- while (i < result.length() && result[i] == '\n')
- {
- ++i;
- }
- if (i == result.length())
- {
- break;
- }
- const int breakSize = nextBreakSize;
- int currentLine = 0;
- bool bLineStart = true;
- int currentIndent = 0;
- int firstIndent = 0;
- int indent = 0;
- paragraph.clear();
- for (;; ++i)
- {
- if (result[i] == '\n' || i == result.length())
- {
- if (currentLine == 0)
- {
- firstIndent = currentIndent;
- }
- else if (currentLine == 1)
- {
- indent = currentIndent;
- }
- ++currentLine;
- bLineStart = true;
- currentIndent = 0;
- if (i + 1 >= result.length() || result[i + 1] == '\n')
- {
- nextBreakSize = 2;
- break;
- }
- if (!bLiteral)
- {
- if (!std::isspace(result[i - 1]))
- {
- paragraph.push_back(' ');
- }
- continue;
- }
- }
- else if (bLineStart)
- {
- if (std::isspace(result[i]))
- {
- ++currentIndent;
- continue;
- }
- else if (startsListItem(result, i))
- {
- if (currentLine > 0)
- {
- while (i > 0 && result[i - 1] != '\n')
- {
- --i;
- }
- paragraph = stripString(paragraph);
- nextBreakSize = 1;
- break;
- }
- int prefixLength = 0;
- while (!std::isspace(result[i + prefixLength]))
- {
- ++prefixLength;
- }
- while (i + prefixLength < result.length()
- && std::isspace(result[i + prefixLength]))
- {
- ++prefixLength;
- }
- indent = currentIndent + prefixLength;
- }
- bLineStart = false;
- }
- paragraph.push_back(result[i]);
- }
- if (endsWith(paragraph, "::"))
- {
- bLiteral = true;
- if (paragraph.length() == 2)
- {
- if (breakSize == 0)
- {
- nextBreakSize = 0;
- }
- continue;
- }
- if (paragraph[paragraph.length() - 3] == ' ')
- {
- paragraph.resize(paragraph.length() - 3);
- }
- else
- {
- paragraph.resize(paragraph.length() - 1);
- }
- }
- else
- {
- bLiteral = false;
- }
- if (breakSize > 0)
- {
- wrapper->wrap(std::string(breakSize, '\n'));
- }
- wrapper->settings().setFirstLineIndent(baseFirstLineIndent + firstIndent);
- wrapper->settings().setIndent(baseIndent + indent);
+ iter.getParagraphText(¶graph);
+ wrapper->settings().setFirstLineIndent(baseFirstLineIndent + iter.firstLineIndent());
+ wrapper->settings().setIndent(baseIndent + iter.indent());
wrapper->wrap(paragraph);
- wrapper->settings().setFirstLineIndent(baseFirstLineIndent);
- wrapper->settings().setIndent(baseIndent);
}
+ wrapper->settings().setFirstLineIndent(baseFirstLineIndent);
+ wrapper->settings().setIndent(baseIndent);
break;
}
case eHelpOutputFormat_Rst:
--- /dev/null
+/*
+ * This file is part of the GROMACS molecular simulation package.
+ *
+ * Copyright (c) 2015, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * If you want to redistribute modifications to GROMACS, please
+ * consider that scientific software is very special. Version
+ * control is crucial - bugs must be traceable. We will be happy to
+ * consider code for inclusion in the official distribution, but
+ * derived work must not be called official GROMACS. Details are found
+ * in the README & COPYING files - if they are missing, get the
+ * official version at http://www.gromacs.org.
+ *
+ * To help us fund GROMACS development, we humbly ask that you cite
+ * the research papers on the package. Check out http://www.gromacs.org.
+ */
+/*! \internal \file
+ * \brief
+ * Implements classes from rstparser.h.
+ *
+ * \author Teemu Murtola <teemu.murtola@gmail.com>
+ * \ingroup module_onlinehelp
+ */
+#include "gmxpre.h"
+
+#include "rstparser.h"
+
+#include <cctype>
+
+#include <algorithm>
+
+#include "gromacs/utility/stringutil.h"
+
+namespace gmx
+{
+
+namespace
+{
+
+/*! \brief
+ * Counts the number of leading spaces in a text range.
+ *
+ * Does not throw.
+ */
+int countLeadingSpace(const std::string &text, size_t start, size_t end)
+{
+ for (size_t i = start; i < end; ++i)
+ {
+ if (!std::isspace(text[i]))
+ {
+ return i - start;
+ }
+ }
+ return end - start;
+}
+
+/*! \brief
+ * Returns `true` if a list item starts in \p text at \p index.
+ *
+ * Does not throw.
+ */
+bool startsListItem(const std::string &text, size_t index)
+{
+ if (text.length() <= index + 1)
+ {
+ return false;
+ }
+ if (text[index] == '*' && std::isspace(text[index+1]))
+ {
+ return true;
+ }
+ if (std::isdigit(text[index]))
+ {
+ while (index < text.length() && std::isdigit(text[index]))
+ {
+ ++index;
+ }
+ if (text.length() > index + 1 && text[index] == '.'
+ && std::isspace(text[index+1]))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+/*! \brief
+ * Returns `true` if a table starts in \p text at \p index.
+ *
+ * The function only inspects the first line for something that looks like a
+ * reStructuredText table, and accepts also some malformed tables.
+ * Any issues should be apparent when Sphinx parses the reStructuredText
+ * export, so full validation is not done here.
+ *
+ * Does not throw.
+ */
+bool startsTable(const std::string &text, size_t index)
+{
+ if (text[index] == '=')
+ {
+ while (index < text.length() && text[index] != '\n')
+ {
+ if (text[index] != '=' && !std::isspace(text[index]))
+ {
+ return false;
+ }
+ ++index;
+ }
+ return true;
+ }
+ else if (text[index] == '+')
+ {
+ while (index < text.length() && text[index] != '\n')
+ {
+ if (text[index] != '-' && text[index] != '+')
+ {
+ return false;
+ }
+ ++index;
+ }
+ return true;
+ }
+ return false;
+}
+
+/*! \brief
+ * Returns `true` if a line in \p text starting at \p index is a title underline.
+ *
+ * Does not throw.
+ */
+bool isTitleUnderline(const std::string &text, size_t index)
+{
+ const char firstChar = text[index];
+ if (std::ispunct(firstChar))
+ {
+ while (index < text.length() && text[index] != '\n')
+ {
+ if (text[index] != firstChar)
+ {
+ return false;
+ }
+ ++index;
+ }
+ return true;
+ }
+ return false;
+}
+
+} // namespace
+
+/********************************************************************
+ * RstParagraphIterator
+ */
+
+RstParagraphIterator::RstParagraphIterator(const std::string &text)
+ : text_(text), begin_(0), end_(0), type_(eParagraphType_Normal),
+ breakSize_(0), firstLineIndent_(0), indent_(0),
+ nextBegin_(0), nextBreakSize_(0), literalIndent_(-1)
+{
+}
+
+bool RstParagraphIterator::nextParagraph()
+{
+ begin_ = nextBegin_;
+ type_ = eParagraphType_Normal;
+ breakSize_ = nextBreakSize_;
+ // Skip leading newlines (includes those separating paragraphs).
+ while (begin_ < text_.length() && text_[begin_] == '\n')
+ {
+ ++begin_;
+ }
+ if (begin_ == text_.length())
+ {
+ end_ = begin_;
+ breakSize_ = 0;
+ nextBegin_ = begin_;
+ return false;
+ }
+ if (literalIndent_ >= 0)
+ {
+ type_ = eParagraphType_Literal;
+ }
+ // Loop over lines in input until the end of the current paragraph.
+ size_t i = begin_;
+ int lineCount = 0;
+ while (true)
+ {
+ const bool bFirstLine = (lineCount == 0);
+ const size_t lineStart = i;
+ const size_t lineEnd = std::min(text_.find('\n', i), text_.length());
+ const int lineIndent = countLeadingSpace(text_, lineStart, lineEnd);
+ const size_t textStart = lineStart + lineIndent;
+ const bool bListItem = startsListItem(text_, textStart);
+ // Return each list item as a separate paragraph to make the behavior
+ // the same always; the item text could even contain multiple
+ // paragraphs, that would anyways produce breaks.
+ if (bListItem && !bFirstLine)
+ {
+ // Since there was no empty line in input, do not produce one in
+ // the output, either.
+ nextBreakSize_ = 1;
+ // end_ is not updated to break the paragraph before the current line.
+ break;
+ }
+ // Now we will actually use this line as part of this paragraph.
+ end_ = lineEnd;
+ ++lineCount;
+ // Update indentation.
+ if (bFirstLine)
+ {
+ firstLineIndent_ = indent_ = lineIndent;
+ if (bListItem)
+ {
+ // Find the indentation of the actual text after the
+ // bullet/number.
+ int prefixLength = 0;
+ while (!std::isspace(text_[textStart + prefixLength]))
+ {
+ ++prefixLength;
+ }
+ while (textStart + prefixLength < text_.length()
+ && std::isspace(text_[textStart + prefixLength]))
+ {
+ ++prefixLength;
+ }
+ indent_ += prefixLength;
+ }
+ }
+ else
+ {
+ indent_ = std::min(indent_, lineIndent);
+ }
+ // We need to check for the title underline before checking for the
+ // paragraph break so that the title is correctly recognized.
+ if (lineCount == 2 && isTitleUnderline(text_, lineStart))
+ {
+ type_ = eParagraphType_Title;
+ }
+ // Check for end-of-input or an empty line, i.e., a normal paragraph
+ // break.
+ if (lineEnd + 1 >= text_.length() || text_[lineEnd + 1] == '\n')
+ {
+ nextBreakSize_ = 2;
+ break;
+ }
+ // Always return the title as a separate paragraph, as it requires
+ // different processing.
+ // TODO: This should allow nicer formatting that shares
+ // implementation with writeTitle() and honors the nesting depths etc.,
+ // but that is not implemented.
+ if (type_ == eParagraphType_Title)
+ {
+ // If we are here, there was no actual paragraph break, so do not
+ // produce one in the output either.
+ nextBreakSize_ = 1;
+ break;
+ }
+ // Next loop starts at the character after the newline.
+ i = lineEnd + 1;
+ }
+ nextBegin_ = end_;
+ // Check if the next paragraph should be treated as a literal paragraph,
+ // and deal with transformations for the :: marker.
+ if (end_ - begin_ >= 2 && text_.compare(end_ - 2, 2, "::") == 0)
+ {
+ literalIndent_ = indent_;
+ // Return the actual literal block if the paragraph was just an "::".
+ if (end_ - begin_ == 2)
+ {
+ // Avoid leading whitespace at the beginning; breakSize_ == 0
+ // only for the first paragraph.
+ if (breakSize_ == 0)
+ {
+ nextBreakSize_ = 0;
+ }
+ return nextParagraph();
+ }
+ // Remove one of the colons, or both if preceded by whitespace.
+ const bool bRemoveDoubleColon = (text_[end_ - 3] == ' ');
+ end_ -= (bRemoveDoubleColon ? 3 : 1);
+ }
+ else
+ {
+ literalIndent_ = -1;
+ }
+ // Treat a table like a literal block (preserve newlines).
+ if (startsTable(text_, begin_ + firstLineIndent_))
+ {
+ type_ = eParagraphType_Literal;
+ }
+ return true;
+}
+
+void RstParagraphIterator::getParagraphText(std::string *result) const
+{
+ result->clear();
+ result->reserve(end_ - begin_);
+ result->append(breakSize_, '\n');
+ const bool bPreserveNewlines = (type_ != eParagraphType_Normal);
+ size_t i = begin_;
+ while (i < end_)
+ {
+ const bool bFirstLine = (i == begin_);
+ const size_t lineStart = i + (bFirstLine ? firstLineIndent_ : indent_);
+ const size_t lineEnd = std::min(text_.find('\n', i), end_);
+ if (!bFirstLine)
+ {
+ if (bPreserveNewlines)
+ {
+ result->push_back('\n');
+ }
+ else if (!std::isspace((*result)[result->length() - 1]))
+ {
+ result->push_back(' ');
+ }
+ }
+ result->append(text_, lineStart, lineEnd - lineStart);
+ i = lineEnd + 1;
+ }
+}
+
+} // namespace gmx
--- /dev/null
+/*
+ * This file is part of the GROMACS molecular simulation package.
+ *
+ * Copyright (c) 2015, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * If you want to redistribute modifications to GROMACS, please
+ * consider that scientific software is very special. Version
+ * control is crucial - bugs must be traceable. We will be happy to
+ * consider code for inclusion in the official distribution, but
+ * derived work must not be called official GROMACS. Details are found
+ * in the README & COPYING files - if they are missing, get the
+ * official version at http://www.gromacs.org.
+ *
+ * To help us fund GROMACS development, we humbly ask that you cite
+ * the research papers on the package. Check out http://www.gromacs.org.
+ */
+/*! \internal \file
+ * \brief
+ * Declares classes for (partial) parsing of reStructuredText.
+ *
+ * \author Teemu Murtola <teemu.murtola@gmail.com>
+ * \ingroup module_onlinehelp
+ */
+#ifndef GMX_ONLINEHELP_RSTPARSER_H
+#define GMX_ONLINEHELP_RSTPARSER_H
+
+#include <string>
+
+#include "gromacs/utility/classhelpers.h"
+
+namespace gmx
+{
+
+class TextLineWrapperSettings;
+
+/*! \internal
+ * \brief
+ * Iterator over reStructuredText paragraphs.
+ *
+ * After initialization, nextParagraph() needs to be called to access the first
+ * paragraph. Subsequence paragraphs can be accessed by repeated calls to
+ * nextParagraph(). After the last paragraph, nextParagraph() returns `false`.
+ *
+ * After each call to nextParagraph(), other methods can be called to query
+ * details of the current paragraph.
+ *
+ * \ingroup module_onlinehelp
+ */
+class RstParagraphIterator
+{
+ public:
+ /*! \brief
+ * Initializes an iterator for given input text.
+ *
+ * Does not throw.
+ */
+ explicit RstParagraphIterator(const std::string &text);
+
+ /*! \brief
+ * Advances the iterator to the next paragraph.
+ *
+ * \returns `false` if there were no more paragraphs.
+ *
+ * Does not throw (except std::bad_alloc if std::string::compare()
+ * throws).
+ */
+ bool nextParagraph();
+
+ //! Returns the indentation for first line of this paragraph.
+ int firstLineIndent() const { return firstLineIndent_; }
+ //! Returns the indentation for subsequent lines of this paragraph.
+ int indent() const { return indent_; }
+ /*! \brief
+ * Returns the text
+ *
+ * \param[out] result Variable to receive the paragraph text.
+ * \throws std::bad_alloc if out of memory.
+ *
+ * Indentation and internal line breaks have been stripped from the
+ * paragraph text (except for literal blocks etc.). For literal
+ * blocks, the common indentation has been stripped and is returned in
+ * indent() instead.
+ *
+ * Leading newlines are returned to indicate necessary separation from
+ * the preceding paragraph.
+ */
+ void getParagraphText(std::string *result) const;
+
+ private:
+ enum ParagraphType
+ {
+ eParagraphType_Normal,
+ eParagraphType_Literal,
+ eParagraphType_Title
+ };
+
+ //! The text to iterate over.
+ const std::string &text_;
+
+ //! Start of the current paragraph.
+ size_t begin_;
+ //! End of the current paragraph (C++-style iterator).
+ size_t end_;
+ //! Type of the current paragraph.
+ ParagraphType type_;
+ //! Number of newlines to print before the current paragraph.
+ int breakSize_;
+ //! Indentation of the first line of this paragraph.
+ int firstLineIndent_;
+ //! (Minimum) indentation of other lines in this paragraph.
+ int indent_;
+
+ //! Start of the next paragrah.
+ size_t nextBegin_;
+ //! Number of newlines to print after the current paragraph.
+ int nextBreakSize_;
+ /*! \brief
+ * Indentation of the preceding paragraph that contained `::`.
+ *
+ * If the next paragraph is not a literal block, the value is `-1`.
+ */
+ int literalIndent_;
+
+ GMX_DISALLOW_COPY_AND_ASSIGN(RstParagraphIterator);
+};
+
+} // namespace gmx
+
+#endif
testFormatting(text);
}
+TEST_F(HelpWriterContextTest, FormatsLiteralTextWithIndentation)
+{
+ const char *const text[] = {
+ "Sample paragraph::",
+ "",
+ " literal block",
+ " another indented line",
+ "",
+ "Normal paragraph",
+ "with wrapping"
+ };
+ testFormatting(text);
+}
+
TEST_F(HelpWriterContextTest, FormatsBulletList)
{
const char *const text[] = {
testFormatting(text);
}
+TEST_F(HelpWriterContextTest, FormatsSimpleTable)
+{
+ const char *const text[] = {
+ "Simple table:",
+ "",
+ "============ =============",
+ "First column Second header",
+ "============ =============",
+ "text text",
+ "============ =============",
+ "",
+ "Normal paragraph",
+ "again."
+ };
+ testFormatting(text);
+}
+
+TEST_F(HelpWriterContextTest, FormatsGridTable)
+{
+ const char *const text[] = {
+ "Grid table:",
+ "",
+ "+--------------+---------------+",
+ "| First column | Second header |",
+ "+--------------+---------------+",
+ "| text | text |",
+ "+--------------+---------------+",
+ "",
+ "Normal paragraph",
+ "again."
+ };
+ testFormatting(text);
+}
+
+TEST_F(HelpWriterContextTest, FormatsTitles)
+{
+ const char *const text[] = {
+ "Title",
+ "=====",
+ "Some text without spacing",
+ "",
+ "Subtitle",
+ "++++++++",
+ "",
+ "More text",
+ };
+ testFormatting(text);
+}
+
} // namespace
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+ <String Name="Console"><![CDATA[
+Grid table:
+
++--------------+---------------+
+| First column | Second header |
++--------------+---------------+
+| text | text |
++--------------+---------------+
+
+Normal paragraph again.]]></String>
+ <String Name="reStructuredText"><![CDATA[
+Grid table:
+
++--------------+---------------+
+| First column | Second header |
++--------------+---------------+
+| text | text |
++--------------+---------------+
+
+Normal paragraph
+again.]]></String>
+</ReferenceData>
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+ <String Name="Console"><![CDATA[
+Sample paragraph:
+
+ literal block
+ another indented line
+
+Normal paragraph with wrapping]]></String>
+ <String Name="reStructuredText"><![CDATA[
+Sample paragraph::
+
+ literal block
+ another indented line
+
+Normal paragraph
+with wrapping]]></String>
+</ReferenceData>
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+ <String Name="Console"><![CDATA[
+Simple table:
+
+============ =============
+First column Second header
+============ =============
+text text
+============ =============
+
+Normal paragraph again.]]></String>
+ <String Name="reStructuredText"><![CDATA[
+Simple table:
+
+============ =============
+First column Second header
+============ =============
+text text
+============ =============
+
+Normal paragraph
+again.]]></String>
+</ReferenceData>
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+ <String Name="Console"><![CDATA[
+Title
+=====
+Some text without spacing
+
+Subtitle
+++++++++
+
+More text]]></String>
+ <String Name="reStructuredText"><![CDATA[
+Title
+=====
+Some text without spacing
+
+Subtitle
+++++++++
+
+More text]]></String>
+</ReferenceData>
{
gmx_simd_real_t shz, shy, shx;
-#if defined _MSC_VER && _MSC_VER < 1700
+#if defined _MSC_VER && _MSC_VER < 1700 && !defined(__ICL)
/* The caller side should make sure we never end up here.
* TODO Black-list _MSC_VER < 1700 when it's old enough, so we can rid
* of this code complication.
"Output initialization must be provided for "
"SMETH_VARNUMVAL selection methods");
alloc_selection_data(sel, isize, true);
- if ((sel->flags & SEL_DYNAMIC)
- && sel->v.type != GROUP_VALUE && sel->v.type != POS_VALUE)
- {
- sel->v.nr = ((sel->flags & SEL_SINGLEVAL) ? 1 : isize);
- }
/* If the method is char-valued, pre-allocate the strings. */
if (sel->u.expr.method->flags & SMETH_CHARVAL)
{
}
}
}
- /* Clear the values for dynamic output to avoid valgrind warnings. */
- if ((sel->flags & SEL_DYNAMIC) && sel->v.type == REAL_VALUE)
- {
- int i;
-
- for (i = 0; i < sel->v.nr; ++i)
- {
- sel->v.u.r[i] = 0.0;
- }
- }
}
}
case SEL_EXPRESSION:
case SEL_MODIFIER:
+ {
+ const int isize = g ? g->isize : 0;
_gmx_sel_evaluate_method_params(data, sel, g);
- init_method(sel, data->top, g ? g->isize : 0);
+ init_method(sel, data->top, isize);
if (!(sel->flags & SEL_DYNAMIC))
{
sel->cdata->evaluate(data, sel, g);
{
sel->cdata->evaluate(data, sel, g);
}
+ else
+ {
+ if (sel->v.type != GROUP_VALUE && sel->v.type != POS_VALUE)
+ {
+ sel->v.nr = ((sel->flags & SEL_SINGLEVAL) ? 1 : isize);
+ }
+ // Clear the values for dynamic output to avoid
+ // uninitialized memory.
+ if (sel->v.type == REAL_VALUE)
+ {
+ for (int i = 0; i < sel->v.nr; ++i)
+ {
+ sel->v.u.r[i] = 0.0;
+ }
+ }
+ }
if (bDoMinMax && g)
{
gmx_ana_index_copy(sel->cdata->gmax, g, true);
}
}
break;
-
+ }
case SEL_BOOLEAN:
if (!(sel->flags & SEL_DYNAMIC))
{
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2014, by the GROMACS development team, led by
+ * Copyright (c) 2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
return (float)gmx_simd4_dotproduct3_d_ibm_qpx(a, b);
}
-/* Function to check whether SIMD operations have resulted in overflow.
- * For now, this is unfortunately a dummy for this architecture.
- */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- return 0;
-}
-
#endif /* GMX_SIMD_IMPLEMENTATION_IBM_QPX_H */
return gmx_simd_reduce_f_ibm_vmx(c);
}
-/* Function to check whether SIMD operations have resulted in overflow.
- * For now, this is unfortunately a dummy for this architecture.
- */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- return 0;
-}
-
#endif /* GMX_SIMD_IMPLEMENTATION_IBM_VMX_H */
return vec_extract(sum, 0);
}
-/* Function to check whether SIMD operations have resulted in overflow.
- * For now, this is unfortunately a dummy for this architecture.
- */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- return 0;
-}
-
/* Undefine our temporary work-arounds so they are not used by mistake */
#undef gmx_vsx_f2d
#undef gmx_vsx_d2f
return _mm512_mul_ps(_mm512_set1_ps(0.693147180559945286226764), _mm512_log2ae23_ps(x));
}
-/* Function to check whether SIMD operations have resulted in overflow */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- int MXCSR;
- int sse_overflow;
- /* The overflow flag is bit 3 in the register */
- const unsigned int flag = 0x8;
-
- MXCSR = _mm_getcsr();
- if (MXCSR & flag)
- {
- sse_overflow = 1;
- /* Set the overflow flag to zero */
- MXCSR = MXCSR & ~flag;
- _mm_setcsr(MXCSR);
- }
- else
- {
- sse_overflow = 0;
- }
- return sse_overflow;
-}
-
#endif /* GMX_SIMD_IMPL_INTEL_MIC_H */
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2014, by the GROMACS development team, led by
+ * Copyright (c) 2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
/*! \} */
-/*! \brief Return 1 if SIMD floating-point ops have overflowed, and reset check.
-
- * This function to check whether SIMD operations have resulted in overflow,
- * and returns 1 if it occured, 0 otherwise.
- * For now, this is unfortunately a dummy for all architectures except x86.
- */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- return 0;
-}
-
/*! \} */
/*! \endcond */
return d;
}
-/* Function to check whether SIMD operations have resulted in overflow */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- int MXCSR;
- int sse_overflow;
-
- MXCSR = _mm_getcsr();
- /* The overflow flag is bit 3 in the register */
- if (MXCSR & 0x0008)
- {
- sse_overflow = 1;
- /* Set the overflow flag to zero */
- MXCSR = MXCSR & 0xFFF7;
- _mm_setcsr(MXCSR);
- }
- else
- {
- sse_overflow = 0;
- }
- return sse_overflow;
-}
-
#endif /* GMX_SIMD_IMPL_X86_AVX_256_H */
return d;
}
-/* Function to check whether SIMD operations have resulted in overflow */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- int MXCSR;
- int sse_overflow;
- /* The overflow flag is bit 3 in the register */
- const unsigned int flag = 0x8;
-
- MXCSR = _mm_getcsr();
- if (MXCSR & flag)
- {
- sse_overflow = 1;
- /* Set the overflow flag to zero */
- MXCSR = MXCSR & ~flag;
- _mm_setcsr(MXCSR);
- }
- else
- {
- sse_overflow = 0;
- }
- return sse_overflow;
-}
-
#endif /* GMX_SIMD_IMPL_X86_AVX_512F_H */
return f;
}
-/* Function to check whether SIMD operations have resulted in overflow */
-static int
-gmx_simd_check_and_reset_overflow(void)
-{
- int MXCSR;
- int sse_overflow;
-
- MXCSR = _mm_getcsr();
- /* The overflow flag is bit 3 in the register */
- if (MXCSR & 0x0008)
- {
- sse_overflow = 1;
- /* Set the overflow flag to zero */
- MXCSR = MXCSR & 0xFFF7;
- _mm_setcsr(MXCSR);
- }
- else
- {
- sse_overflow = 0;
- }
- return sse_overflow;
-}
-
/* SSE2 is already 4-wide in single, so we just reuse float datatype for SIMD4.
* SSE2 cannot do double-precision SIMD4.
*/
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2010,2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2010,2012,2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
extern const char _gmx_ver_string[];
//! Full git hash of the latest commit.
extern const char _gmx_full_git_hash[];
-//! Full git hash of the latest commit in a central Gromacs repository.
+//! Full git hash of the latest commit in a central \Gromacs repository.
extern const char _gmx_central_base_hash[];
//! \}
/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2012,2014, by the GROMACS development team, led by
+ * Copyright (c) 2012,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
explicit Impl(const char * /*value*/)
{
GMX_THROW(NotImplementedError(
- "Gromacs is compiled without regular expression support"));
+ "GROMACS is compiled without regular expression support"));
}
explicit Impl(const std::string & /*value*/)
{
GMX_THROW(NotImplementedError(
- "Gromacs is compiled without regular expression support"));
+ "GROMACS is compiled without regular expression support"));
}
bool match(const char * /*value*/) const
{
// Should never be reached.
GMX_THROW(NotImplementedError(
- "Gromacs is compiled without regular expression support"));
+ "GROMACS is compiled without regular expression support"));
}
};
#endif
--lineEnd;
}
- size_t lineLength = lineEnd - lineStart;
+ const size_t lineLength = lineEnd - lineStart;
+ if (lineLength == 0)
+ {
+ return std::string();
+ }
std::string result(indent, ' ');
result.append(input, lineStart, lineLength);
if (bContinuation && settings_.continuationChar_ != '\0')
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+ <String Name="WrappedWithNoLimit"><![CDATA[
+ A quick brown fox jumps
+
+ over the lazy dog]]></String>
+ <String Name="WrappedAt14"><![CDATA[
+ A quick brown
+ fox jumps
+
+ over the lazy
+ dog]]></String>
+</ReferenceData>
const char g_wrapText[] = "A quick brown fox jumps over the lazy dog";
//! Test string for wrapping with embedded line breaks.
const char g_wrapText2[] = "A quick brown fox jumps\nover the lazy dog";
+//! Test string for wrapping with embedded line breaks and an empty line.
+const char g_wrapText3[] = "A quick brown fox jumps\n\nover the lazy dog";
//! Test string for wrapping with a long word.
const char g_wrapTextLongWord[]
= "A quick brown fox jumps awordthatoverflowsaline over the lazy dog";
checkText(wrapper.wrapToString(g_wrapText2), "WrappedAt14");
}
+TEST_F(TextLineWrapperTest, HandlesIndentWithEmptyLines)
+{
+ gmx::TextLineWrapper wrapper;
+ wrapper.settings().setIndent(2);
+
+ checkText(wrapper.wrapToString(g_wrapText3), "WrappedWithNoLimit");
+ wrapper.settings().setLineLength(16);
+ checkText(wrapper.wrapToString(g_wrapText3), "WrappedAt14");
+}
+
TEST_F(TextLineWrapperTest, HandlesHangingIndent)
{
gmx::TextLineWrapper wrapper;
void printMessage() const
{
std::fprintf(stderr,
- "This tool has been removed from Gromacs 5.0. Please see\n"
+ "This tool is no longer present in GROMACS. Please see\n"
" http://www.gromacs.org/Documentation/How-tos/Tool_Changes_for_5.0\n"
"for ideas how to perform the same tasks with the "
"new tools.\n");
"with the step number.",
"A simulation can be continued by reading the full state from file",
"with option [TT]-cpi[tt]. This option is intelligent in the way that",
- "if no checkpoint file is found, Gromacs just assumes a normal run and",
+ "if no checkpoint file is found, GROMACS just assumes a normal run and",
"starts from the first step of the [REF].tpr[ref] file. By default the output",
"will be appending to the existing output files. The checkpoint file",
"contains checksums of all output files, such that you will never",
#ifndef GMX_THREAD_MPI
if (hw_opt->nthreads_tot > 0)
{
- gmx_fatal(FARGS, "Setting the total number of threads is only supported with thread-MPI and Gromacs was compiled without thread-MPI");
+ gmx_fatal(FARGS, "Setting the total number of threads is only supported with thread-MPI and GROMACS was compiled without thread-MPI");
}
if (hw_opt->nthreads_tmpi > 0)
{
- gmx_fatal(FARGS, "Setting the number of thread-MPI threads is only supported with thread-MPI and Gromacs was compiled without thread-MPI");
+ gmx_fatal(FARGS, "Setting the number of thread-MPI threads is only supported with thread-MPI and GROMACS was compiled without thread-MPI");
}
#endif
#ifndef GMX_OPENMP
if (hw_opt->nthreads_omp > 1)
{
- gmx_fatal(FARGS, "More than 1 OpenMP thread requested, but Gromacs was compiled without OpenMP support");
+ gmx_fatal(FARGS, "More than 1 OpenMP thread requested, but GROMACS was compiled without OpenMP support");
}
hw_opt->nthreads_omp = 1;
#endif
#ifndef GMX_OPENMP
if (hw_opt->nthreads_omp > 1)
{
- gmx_fatal(FARGS, "OpenMP threads are requested, but Gromacs was compiled without OpenMP support");
+ gmx_fatal(FARGS, "OpenMP threads are requested, but GROMACS was compiled without OpenMP support");
}
#endif
if (MULTISIM(cr))
{
md_print_info(cr, fplog,
- "This is simulation %d out of %d running as a composite Gromacs\n"
+ "This is simulation %d out of %d running as a composite GROMACS\n"
"multi-simulation job. Setup for this simulation:\n\n",
cr->ms->sim, cr->ms->nsim);
}
*
* Copyright (c) 1991-2000, University of Groningen, The Netherlands.
* Copyright (c) 2001-2004, The GROMACS development team.
- * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
static t_mentry HelpMenu[] = {
{ 0, IDHELP, false, "Help" },
- { 0, IDABOUT, false, "About Gromacs..." }
+ { 0, IDABOUT, false, "About GROMACS..." }
};
static t_mentry *gmx_pd[] = { FileMenu, DispMenu, HelpMenu };