Merge branch 'origin/release-2020' into merge-2020-into-2021
authorPaul Bauer <paul.bauer.q@gmail.com>
Tue, 24 Nov 2020 13:38:39 +0000 (14:38 +0100)
committerPaul Bauer <paul.bauer.q@gmail.com>
Tue, 24 Nov 2020 14:15:08 +0000 (15:15 +0100)
Resolved Conflicts:
admin/containers/scripted_gmx_docker_builds.py
docs/conf.cmakein.py
docs/dev-manual/change-management.rst
docs/dev-manual/contribute.rst
docs/dev-manual/releng/index.rst
docs/dev-manual/tools.rst
docs/install-guide/index.rst
docs/reference-manual/preface.rst
docs/release-notes/index.rst
scripts/GMXRC.bash.cmakein
src/gromacs/gmxana/gmx_covar.cpp
src/gromacs/gmxana/gmx_do_dssp.cpp
src/gromacs/gmxana/gmx_h2order.cpp
src/gromacs/gmxana/nsfactor.cpp
src/gromacs/hardware/detecthardware.cpp
src/gromacs/mdlib/coupling.cpp
src/gromacs/mdrun/md.cpp
src/gromacs/mdtypes/state.h
src/gromacs/trajectoryanalysis/modules/pairdist.cpp
src/gromacs/utility/basedefinitions.h

20 files changed:
1  2 
admin/containers/scripted_gmx_docker_builds.py
docs/conf.cmakein.py
docs/dev-manual/contribute.rst
docs/dev-manual/releng/index.rst
docs/dev-manual/reportstyle.rst
docs/dev-manual/tools.rst
docs/install-guide/index.rst
docs/reference-manual/preface.rst
docs/release-notes/2016/major/bugs-fixed.rst
docs/release-notes/index.rst
src/gromacs/domdec/partition.cpp
src/gromacs/gmxana/gmx_covar.cpp
src/gromacs/gmxana/gmx_do_dssp.cpp
src/gromacs/gmxana/gmx_h2order.cpp
src/gromacs/hardware/detecthardware.cpp
src/gromacs/hardware/prepare_detection.cpp
src/gromacs/mdlib/coupling.cpp
src/gromacs/mdlib/mdebin_bar.cpp
src/gromacs/mdtypes/state.h
src/gromacs/trajectoryanalysis/modules/pairdist.cpp

index 5464a7f17c5b62a9ac3519cb5c66e5cd1a4af9a8,26a20c720a16eb6eb74a0f9aac51945e98ed9672..1b820805bdce2683f03e6fb535d1705fa76a237e
mode 100755,100644..100755
@@@ -199,14 -179,7 +199,12 @@@ def get_llvm_packages(args) -> typing.I
      else:
          return []
  
 +def get_opencl_packages(args) -> typing.Iterable[str]:
 +    if (args.doxygen is None) and (args.oneapi is None):
 +        return _opencl_extra_packages
 +    else:
 +        return []
  
  def get_compiler(args, compiler_build_stage: hpccm.Stage = None) -> bb_base:
      # Compiler
      if args.icc is not None:
index 5ca284b39426b725831f8f9851511c45b05ef6f6,0000000000000000000000000000000000000000..c5993c6a09e4f8f864fd7c47c93499f2c61fd25c
mode 100644,000000..100644
--- /dev/null
@@@ -1,434 -1,0 +1,429 @@@
- .. _continuous integration server used by GROMACS: http://jenkins.gromacs.org
- .. _Jenkins: http://jenkins-ci.org
 +#
 +# This file is part of the GROMACS molecular simulation package.
 +#
 +# Copyright (c) 2015,2016,2017,2018,2019 by the GROMACS development team.
 +# Copyright (c) 2020, 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.
 +
 +# -*- coding: utf-8 -*-
 +#
 +# 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
 +# containing dir.
 +#
 +# Note that not all possible configuration values are present in this
 +# autogenerated file.
 +#
 +# All configuration values have a default; values that are commented out
 +# serve to show the default.
 +
 +import datetime
 +import os
 +import sys
 +
 +# The following definitions are completed via CMake machinery.
 +gmx_containers_path = '@GMX_ADMIN_DIR@/containers'
 +gmx_sphinx_extension_path = '@SPHINX_EXTENSION_PATH@'
 +gmxapi_staging_path = '@GMXAPI_PYTHON_STAGING_DIR@'
 +releng_path = '@RELENG_PATH@'
 +gmx_version_string = '@GMX_VERSION_STRING@'
 +gmx_version_string_full = '@GMX_VERSION_STRING_FULL@'
 +regressiontest_version = '@REGRESSIONTEST_VERSION@'
 +gmx_min_sphinx = '@EXPECTED_SPHINX_VERSION@'
 +gmx_image_convert = '@IMAGE_CONVERT_STRING@'
 +variables = [
 +    ('EXPECTED_DOXYGEN_VERSION', '@EXPECTED_DOXYGEN_VERSION@'),
 +    ('EXPECTED_SPHINX_VERSION', '@EXPECTED_SPHINX_VERSION@'),
 +    ('CMAKE_MINIMUM_REQUIRED_VERSION', '@CMAKE_MINIMUM_REQUIRED_VERSION@'),
 +    ('REQUIRED_CUDA_VERSION', '@REQUIRED_CUDA_VERSION@'),
 +    ('REQUIRED_CUDA_COMPUTE_CAPABILITY', '@REQUIRED_CUDA_COMPUTE_CAPABILITY@'),
 +    ('REQUIRED_OPENCL_MIN_VERSION', '@REQUIRED_OPENCL_MIN_VERSION@'),
 +    ('SOURCE_MD5SUM', '@SOURCE_MD5SUM@'),
 +    ('REGRESSIONTEST_MD5SUM', '@REGRESSIONTEST_MD5SUM_STRING@'),
 +    ('GMX_TNG_MINIMUM_REQUIRED_VERSION', '@GMX_TNG_MINIMUM_REQUIRED_VERSION@'),
 +    ('GMX_LMFIT_REQUIRED_VERSION', '@GMX_LMFIT_REQUIRED_VERSION@'),
 +    ('GMX_MANUAL_DOI_STRING', '@GMX_MANUAL_DOI_STRING@'),
 +    ('GMX_SOURCE_DOI_STRING', '@GMX_SOURCE_DOI_STRING@')
 +]
 +# End of build-time substitutions.
 +
 +sys.path.append(gmx_containers_path)
 +sys.path.append(gmx_sphinx_extension_path)
 +if releng_path and os.path.isdir(releng_path):
 +    sys.path.append(releng_path)
 +if gmxapi_staging_path and os.path.isdir(gmxapi_staging_path):
 +    sys.path.append(gmxapi_staging_path)
 +
 +# If extensions (or modules to document with autodoc) are in another directory,
 +# add these directories to sys.path here. If the directory is relative to the
 +# documentation root, use os.path.abspath to make it absolute, like shown here.
 +#sys.path.insert(0, os.path.abspath('.'))
 +
 +# -- General configuration ------------------------------------------------
 +
 +# If your documentation needs a minimal Sphinx version, state it here.
 +# gmx_min_sphinx is set from the expected minimum version of Sphinx
 +# in CMakeLists.txt
 +needs_sphinx = gmx_min_sphinx
 +
 +# Add any Sphinx extension module names here, as strings. They can be
 +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 +# ones.
 +extensions = [
 +    'sphinx.ext.autodoc',
 +    'sphinx.ext.graphviz',
 +    'sphinx.ext.extlinks',
 +    'sphinx.ext.napoleon',
 +    'sphinx.ext.doctest',
 +    'sphinx.ext.ifconfig',
 +    'sphinx.ext.intersphinx',
 +    'sphinx.ext.mathjax',
 +    'sphinx.ext.napoleon',
 +    'sphinx.ext.todo',
 +    # The viewcode extension requires extra configuration or consideration to
 +    # avoid collecting sources for external packages (through intersphninx) or
 +    # generating broken links for compiled extension modules that do not have
 +    # inspectable 'code' member data.
 +    # Ref: https://www.sphinx-doc.org/en/master/usage/extensions/viewcode.html
 +    # Please run linkchecker and inspect the generated
 +    # docs/html/_modules/index.html page before committing a change that enables
 +    # 'sphinx.ext.viewcode',
 +    'gmxsphinx'
 +]
 +extlinks = {'issue': ('https://gitlab.com/gromacs/gromacs/-/issues/%s',
 +                      'Issue ')}
 +
 +# Add any paths that contain templates here, relative to this directory.
 +# templates_path = ['_templates']
 +
 +# The suffix of source filenames.
 +source_suffix = '.rst'
 +
 +# The encoding of source files.
 +#source_encoding = 'utf-8-sig'
 +
 +# The master toctree document.
 +master_doc = 'index'
 +
 +# General information about the project.
 +project = u'GROMACS'
 +copyright = str(datetime.datetime.now().year) + u', GROMACS development team'
 +thisyear_string = str(datetime.datetime.now().year)
 +# The version info for the project you're documenting, acts as replacement for
 +# |version| and |release|, also used in various other places throughout the
 +# built documents.
 +#
 +# The short X.Y version.
 +version = gmx_version_string
 +# The full version, including alpha/beta/rc tags.
 +release = gmx_version_string_full
 +# default file extension for plots
 +plotext = u'.eps'
 +
 +# The language for content autogenerated by Sphinx. Refer to documentation
 +# for a list of supported languages.
 +#language = None
 +
 +# There are two options for replacing |today|: either, you set today to some
 +# non-false value, then it is used:
 +#today = ''
 +# Else, today_fmt is used as the format for a strftime call.
 +#today_fmt = '%B %d, %Y'
 +
 +# List of patterns, relative to source directory, that match files and
 +# directories to ignore when looking for source files.
 +exclude_patterns = ['fragments']
 +if not tags.has('do_man'):
 +    exclude_patterns += ['man']
 +
 +# Set variable if documentation build can convert images or not
 +# to selectively include files in reference manual
 +def setup(app):
 +    app.add_config_value('gmx_image_convert', 'impossible', 'env')
 +
 +# The reST default role (used for this markup: `text`) to use for all
 +# documents.
 +default_role = 'any'
 +
 +# If true, '()' will be appended to :func: etc. cross-reference text.
 +#add_function_parentheses = True
 +
 +# If true, the current module name will be prepended to all description
 +# unit titles (such as .. function::).
 +#add_module_names = True
 +
 +# If true, sectionauthor and moduleauthor directives will be shown in the
 +# output. They are ignored by default.
 +#show_authors = False
 +
 +# The name of the Pygments (syntax highlighting) style to use.
 +pygments_style = 'sphinx'
 +
 +# A list of ignored prefixes for module index sorting.
 +#modindex_common_prefix = []
 +
 +# If true, keep warnings as "system message" paragraphs in the built documents.
 +#keep_warnings = False
 +
 +# Configure the values for all the variables that might later configure any of the .rst files.
 +substitutions = ['.. |{0}| replace:: {1}'.format(*x) for x in variables if x[1]]
 +substitutions.extend(['.. |{0}| replace:: unknown'.format(x[0]) for x in variables if x[1] == ''])
 +rst_epilog = "\n".join(substitutions)
 +rst_epilog += """
 +.. |Gromacs| replace:: GROMACS
 +.. _gmx-manual: manual-{gmx_version_string}.pdf
 +.. _gmx-manual-parent-dir: ../manual-{gmx_version_string}.pdf
 +.. |gmx-source-package-ftp| replace:: As ftp ftp://ftp.gromacs.org/pub/gromacs/gromacs-{gmx_version_string}.tar.gz
 +.. |gmx-source-package-http| replace:: As http http://ftp.gromacs.org/pub/gromacs/gromacs-{gmx_version_string}.tar.gz
 +.. |gmx-regressiontests-package| replace:: http://ftp.gromacs.org/pub/regressiontests/regressiontests-{regressiontest_version}.tar.gz
 +.. _up-to-date installation instructions: http://manual.gromacs.org/documentation/current/install-guide/index.html
 +.. _CUDA: http://www.nvidia.com/object/cuda_home_new.html
 +.. _OpenCL: https://www.khronos.org/opencl/
 +.. _OpenMPI: http://www.open-mpi.org
 +.. _MPICH: http://www.mpich.org
 +.. _LAM-MPI: http://www.lam-mpi.org
 +.. _OpenMP: http://en.wikipedia.org/wiki/OpenMP
 +.. _CMake installation page: http://www.cmake.org/install/
 +.. _Ubuntu toolchain ppa page: https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test
 +.. _EPEL page: https://fedoraproject.org/wiki/EPEL
 +.. _running CMake: http://www.cmake.org/runningcmake/
 +.. _CMake environment variables: http://cmake.org/Wiki/CMake_Useful_Variables#Environment_Variables
 +.. _FFTW: http://www.fftw.org
 +.. _FFTW installation guide: http://www.fftw.org/doc/Installation-and-Customization.html#Installation-and-Customization
 +.. _MKL: https://software.intel.com/en-us/intel-mkl
 +.. _VMD: http://www.ks.uiuc.edu/Research/vmd/
 +.. _PyMOL: http://www.pymol.org
- .. _issues: https://gitlab.com/gromacs/gromacs/-/issues/
 +.. _webpage: http://www.gromacs.org
 +.. _ftp site: ftp://ftp.gromacs.org/pub/gromacs/
 +.. _tutorials: http://www.gromacs.org/Documentation/Tutorials
 +.. _issue tracker: https://gitlab.com/gromacs/gromacs/-/issues/
- .. _redmine: http://redmine.gromacs.org
- .. _gerrit: http://gerrit.gromacs.org
 +.. _gitlab: https://gitlab.com/gromacs/gromacs/
 +.. _download: ../download.html
 +.. |thisyear| replace:: {thisyear_string}
 +""".format(gmx_version_string=gmx_version_string, regressiontest_version=regressiontest_version, thisyear_string=thisyear_string)
 +
 +# -- Options for HTML output ----------------------------------------------
 +
 +# The theme to use for HTML and HTML Help pages.  See the documentation for
 +# a list of builtin themes.
 +html_theme = 'classic'
 +
 +# Theme options are theme-specific and customize the look and feel of a theme
 +# further.  For a list of options available for each theme, see the
 +# documentation.
 +#html_theme_options = {}
 +
 +# Add any paths that contain custom themes here, relative to this directory.
 +html_theme_path = ['']
 +
 +# The name for this set of Sphinx documents.  If None, it defaults to
 +# "<project> v<release> documentation".
 +html_title = u'GROMACS ' + release + ' documentation'
 +
 +# A shorter title for the navigation bar.  Default is the same as html_title.
 +html_short_title = u'GROMACS ' + version
 +
 +# The name of an image file (relative to this directory) to place at the top
 +# of the sidebar.
 +#html_logo = None
 +
 +# The name of an image file (within the static path) to use as favicon of the
 +# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
 +# pixels large.
 +#html_favicon = None
 +
 +# Add any paths that contain custom static files (such as style sheets) here,
 +# relative to this directory. They are copied after the builtin static files,
 +# so a file named "default.css" will overwrite the builtin "default.css".
 +html_static_path = ['_static']
 +
 +# Add any extra paths that contain custom files (such as robots.txt or
 +# .htaccess) here, relative to this directory. These files are copied
 +# directly to the root of the documentation.
 +#html_extra_path = []
 +
 +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
 +# using the given strftime format.
 +#html_last_updated_fmt = '%b %d, %Y'
 +
 +# If true, SmartyPants will be used to convert quotes and dashes to
 +# typographically correct entities.
 +#html_use_smartypants = True
 +
 +# Custom sidebar templates, maps document names to template names.
 +#html_sidebars = {}
 +
 +# Additional templates that should be rendered to pages, maps page names to
 +# template names.
 +#html_additional_pages = {}
 +
 +# If false, no module index is generated.
 +#html_domain_indices = True
 +
 +# If false, no index is generated.
 +#html_use_index = True
 +
 +# If true, the index is split into individual pages for each letter.
 +#html_split_index = False
 +
 +# If true, links to the reST sources are added to the pages.
 +#html_show_sourcelink = True
 +
 +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
 +#html_show_sphinx = True
 +
 +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
 +#html_show_copyright = True
 +
 +# If true, an OpenSearch description file will be output, and all pages will
 +# contain a <link> tag referring to it.  The value of this option must be the
 +# base URL from which the finished HTML is served.
 +#html_use_opensearch = ''
 +
 +# This is the file name suffix for HTML files (e.g. ".xhtml").
 +#html_file_suffix = None
 +
 +# Output file base name for HTML help builder.
 +htmlhelp_basename = 'Gromacsdoc'
 +
 +
 +# -- Options for LaTeX output ---------------------------------------------
 +
 +latex_elements = {
 +# The paper size ('letterpaper' or 'a4paper').
 +'papersize': 'a4paper',
 +
 +
 +# The font size ('10pt', '11pt' or '12pt').
 +'pointsize': '11',
 +
 +# Additional stuff for the LaTeX preamble.
 +# The tocdepth setting is needed to overwrite the default value set by Sphinx
 +# to get a more detailed toctree in the pdf version of the manual.
 +    'preamble': r'''
 +    \usepackage{here}
 +    \usepackage{picins}
 +    \usepackage{underscore}
 +    \usepackage{tabularx}
 +    \usepackage{multicol}
 +    \usepackage{dcolumn}
 +    \usepackage{makeidx}
 +    \usepackage{times}
 +    \usepackage{ifthen}
 +    \usepackage{enumitem}
 +    \usepackage{longtable}
 +    \usepackage{pdflscape}
 +    \pagenumbering{roman}
 +    \usepackage{array}
 +    \setcounter{tocdepth}{2}
 +    ''',
 +# Format output to avoid empty pages
 +  'classoptions': ',openany,oneside'
 +}
 +
 +# Grouping the document tree into LaTeX files. List of tuples
 +# (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'),
 +]
 +
 +# The name of an image file (relative to this directory) to place at the top of
 +# the title page.
 +latex_logo = 'reference-manual/plots/peregrine.png'
 +
 +# For "manual" documents, if this is true, then toplevel headings are parts,
 +# not chapters.
 +latex_use_parts = True
 +
 +# If true, show page references after internal links.
 +latex_show_pagerefs = True
 +
 +# If true, show URL addresses after external links.
 +#latex_show_urls = False
 +
 +# Documents to append as an appendix to all manuals.
 +#latex_appendices = []
 +
 +# If false, no module index is generated.
 +#latex_domain_indices = True
 +
 +
 +# -- Options for manual page output ---------------------------------------
 +
 +# One entry per manual page. List of tuples
 +# (source start file, name, description, authors, manual section).
 +if tags.has('do_man'):
 +    exec(open('conf-man.py').read())
 +
 +# If true, show URL addresses after external links.
 +#man_show_urls = False
 +
 +
 +# -- Options for Texinfo output -------------------------------------------
 +
 +# Grouping the document tree into Texinfo files. List of tuples
 +# (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.',
 +   'Miscellaneous'),
 +]
 +
 +# Documents to append as an appendix to all manuals.
 +#texinfo_appendices = []
 +
 +# If false, no module index is generated.
 +#texinfo_domain_indices = True
 +
 +# How to display URL addresses: 'footnote', 'no', or 'inline'.
 +#texinfo_show_urls = 'footnote'
 +
 +# If true, do not generate a @detailmenu in the "Top" node's menu.
 +#texinfo_no_detailmenu = False
 +
 +# Make it possible to use numbered labels for figures and tables
 +numfig = True
 +
 +# -- Options for autodoc extension ----------------------------------------
 +
 +# http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#confval-autodoc-mock-imports
 +autodoc_mock_imports = ['hpccm', 'hpccm.config']
 +
 +# -- Options for intersphinx extension ------------------------------------
 +
 +intersphinx_mapping = {'python': ('https://docs.python.org/3', None)}
 +intersphinx_cache_limit = -1
 +intersphinx_timeout = 10
index 22db6df9f58f0e51a7aa78316cf2282281891be5,53db811dd7625e76ad0d030a627f6e986ec6f441..dfc8862a531117e5b1bce8f00ae4cc6eecc791af
@@@ -40,7 -40,8 +40,8 @@@ please make sure that you have checked 
    widespread adoption of the method.
  
  * *Advance discussion*: Please communicate with the other developers,
-   e.g.  on the `developer mailing list`_ mailing list, or `issue tracker`_ to let them know of the general
 -  e.g.  on the `developer mailing list`_ mailing list, or `GitLab`_
 -  to let them know of the general
++  e.g.  on the `developer mailing list`_ mailing list, or
++  `issue tracker`_ to let them know of the general
    nature of your plans. This will prevent duplicate or wasted
    effort. It is also a good idea to search those resources as well as
    the literature and WWW for other projects that may be relevant.
index 74272b9ab7414af2538cf3ebf7d88a1b9bd243a2,8b7e8065bd633219ec4a02a7b95123aec73dae6a..5b9ccdade4d23b1b6c83e7810dc6d10cbbfeaf53
@@@ -9,13 -9,15 +9,15 @@@ Release engineering with GitLa
  .. toctree::
     :hidden:
  
- We are currently switching our build and testing system to use Gitlab
- CI pipelines run on GitLab Runner. This section is going to be extended
- with individual build information as it comes available. For now we are
- using a combination of building with the previous system on Jenkins
- and post-submit verification on Gitlab.
+ We are currently switching our build and testing system to use GitLab
+ and the integrated CI system, with information for the general system found
+ in the official `GitLab documentation <https://docs.gitlab.com/ee/ci/yaml/>`_.
+ The new configuration for the builds and tests can be found in the file
+ ``.gitlab-ci.yml``, with the templates for configuring is found in the files in the
+ ``admin/ci-templates/`` directory. This section is going to be extended
 -with individual build information as it comes available. For now we are
 -using a combination of building with the previous system on Jenkins
 -and post-submit verification on GitLab.
++with individual build information as it comes available.
 +
 +.. seealso:: :doc:`../infrastructure`
  
  .. _releng-triggering-builds:
  
index 93e58492fe599fd6a66100fd257da1a7315b9ede,2d9109b99347bebb9e24f7f35d3b06c9154cc41c..07f11f72041a82fbfd9e5182bc66d9cb6f6f0818
@@@ -34,8 -36,8 +34,8 @@@ does not result in any warnings or erro
  not be considered as *real*, or at the minimum it will be much harder to analyse to find the actual issue.
  
  
- If your inputs are sensitive, then it is possible to create private `issues`_ so that the
 -If your inputs are sensitive, then it is possible to create private Redmine issues so that the
--developer team can have access to solve the problem, while preventing widespread
++If your inputs are sensitive, then it is possible to create private `issues <issue tracker>`_
++so that the developer team can have access to solve the problem, while preventing widespread
  visibility on the internet.
  
  
Simple merge
index 69daf6f2266f975e25dcd2fa8f090c9a4a2b4272,6f332dff78f33cc2670539335a7a2f9ed7c18d2b..02c05b950e655234e7e942d34af48afad55b5c5c
@@@ -1311,14 -1292,13 +1311,14 @@@ much everywhere, it is important that w
  it works because we have tested it.
  Every commit in our git source code repository
  is currently tested with a range of configuration options on x86 with
 -gcc versions 6 and 7,
 -clang versions 3.6 and 8,
 +gcc versions 7 and 8,
 +clang versions 8 and 9,
  and
 -For this testing, we use Ubuntu 16.04 or 18.04 operating system.
 +a beta version of oneAPI containing Intel's compiler.
 +For this testing, we use Ubuntu 18.04 or 20.04 operating system.
  Other compiler, library, and OS versions are tested less frequently.
--For details, you can
--have a look at the `continuous integration server used by GROMACS`_,
++For details, you can have a look at the
++`continuous integration server used by GROMACS <gitlab>`_,
  which uses GitLab runner on a local k8s x86 cluster with NVIDIA and
  AMD GPU support.
  
index 1fc4bcc6e126d92086585ef35f95670c46f27c9c,795b11ad1fa2c7b9590719ac455159db17250f68..b675c224318eed4524e32606d0cb1038dc1f8a60
@@@ -38,8 -38,8 +38,8 @@@ which in some cases might mean the info
  Comments on form and content are welcome, please send them to one of
  the mailing lists (see our `webpage`_ or this section on
  how to :ref:`contribute <gmx-contribute>`), or open an issue
 -on `GitLab`_. Corrections can also be made in the |Gromacs| git
 +on our `issue tracker`_. Corrections can also be made in the |Gromacs| git
- source repository and uploaded to the |Gromacs| `gerrit`_.
+ source repository and uploaded to the |Gromacs| `GitLab`_.
  
  We release an updated version of the manual whenever
  we release a new version of the software, so in general 
index d79603c6708459dc16da65e7cecbc1d851ca7399,64e252520968ddb67b7d2e1ba48a4a5ed4885351..62108c17874a3bd41a767f8c22c534deca2fb44f
@@@ -160,7 -160,7 +160,7 @@@ These document fixes for issues that we
  introduced into the release-2016 branch since it diverged from
  release-5-1. These will not appear in the final release notes, because
  no formal release is thought to have had the problem. Of course, the
- tracked `issues`_ remain available should further discussion arise.
 -Redmine issues remain available should further discussion arise.
++tracked `issues <issue tracker>`_ remain available should further discussion arise.
  
  Fixed bug in v-rescale thermostat & replica exchange
  """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
index dfb12c7e5a2ae8c581cdd8be8d075811cf75af58,e7de4da185648909d612a79c0d7a165cd78e9b2c..6b41402eb98eb2ad7f5b0c7f8c9bd22fc1d504f0
@@@ -8,40 -8,18 +8,39 @@@ releases of |Gromacs|. Major releases c
  functionality supported, whereas patch releases contain only fixes for
  issues identified in the corresponding major releases.
  
 -Two versions of |Gromacs| are under active maintenance, the 2020
 -series and the 2019 series. In the latter, only highly conservative
 +Two versions of |Gromacs| are under active maintenance, the 2021
 +series and the 2020 series. In the latter, only highly conservative
  fixes will be made, and only to address issues that affect scientific
  correctness. Naturally, some of those releases will be made after the
 -year 2019 ends, but we keep 2019 in the name so users understand how
 +year 2020 ends, but we keep 2019 in the name so users understand how
  up to date their version is. Such fixes will also be incorporated into
 -the 2020 release series, as appropriate. Around the time the 2021
 -release is made, the 2019 series will no longer be maintained.
 +the 2021 release series, as appropriate. Around the time the 2022
 +release is made, the 2020 series will no longer be maintained.
  
  Where issue numbers are reported in these release notes, more details
- can be found at https://gitlab.com/gromacs/gromacs/-/issues at that issue number.
 -can be found at https://gitlab.com/gromacs/gromacs/issues at that issue number.
++can be found on the `issue tracker`_ at that issue number.
 +
 +|Gromacs| 2021 series
 +---------------------
 +
 +.. todolist::
 +
 +Major release
 +^^^^^^^^^^^^^
 +
 +.. toctree::
 +   :maxdepth: 1
 +
 +   2021/major/highlights
 +   2021/major/features
 +   2021/major/performance
 +   2021/major/tools
 +   2021/major/bugs-fixed
 +   2021/major/deprecated-functionality
 +   2021/major/removed-functionality
 +   2021/major/portability
 +   2021/major/miscellaneous
  
  |Gromacs| 2020 series
  ---------------------
  
Simple merge
Simple merge
Simple merge
index 1e52fe0b491ac09cc4d5024cae6931318e39455b,889016981933f32132612ffb994899016ab1774f..509801a57292a95c46647a7da56057469c0ffa9d
@@@ -321,9 -330,22 +331,22 @@@ int gmx_h2order(int argc, char* argv[]
      {
          return 0;
      }
+     // Process the axis option chosen by the user to set the
+     // axis used for the computation. The useful choice is an
+     // axis normal to the membrane. Default is z-axis.
+     int axis = ZZ;
+     switch (nenum(axisOption))
+     {
+         case axisX: axis = XX; break;
+         case axisY: axis = YY; break;
+         case axisZ: axis = ZZ; break;
+         default: axis = ZZ;
+     }
      bMicel = opt2bSet("-nm", NFILE, fnm);
  
 -    top = read_top(ftp2fn(efTPR, NFILE, fnm), &ePBC); /* read topology file */
 +    top = read_top(ftp2fn(efTPR, NFILE, fnm), &pbcType); /* read topology file */
  
      rd_index(ftp2fn(efNDX, NFILE, fnm), 1, &ngx, &index, &grpname);
  
index 885afdc3b2ae64c0c2dad6461f4cbc795ddc057b,0000000000000000000000000000000000000000..853192f52a70c810c54d8f5ee6ab502fedc727b1
mode 100644,000000..100644
--- /dev/null
@@@ -1,134 -1,0 +1,134 @@@
-  *  is not clear whether the problem is the compiler or the standard
-  *  library. Fortunately, this function is not performance sensitive,
 +/*
 + * This file is part of the GROMACS molecular simulation package.
 + *
 + * Copyright (c) 2012,2013,2014,2015,2016 by the GROMACS development team.
 + * Copyright (c) 2017,2018,2019,2020, 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 Defines routine for activating potentially deactivated cores
 + * so they can be detected.
 + *
 + * The use of std::thread makes for brittle interaction with std
 + * library headers. Its caller also handles GPU detection and
 + * allocation of device-specific data structures. This is more
 + * manageable when separated into two distinct translation units.
 + *
 + * \author Erik Lindahl <erik.lindahl@scilifelab.se>
 + * \author Mark Abraham <mark.j.abraham@gmail.com>
 + * \ingroup module_hardware
 + */
 +#include "gmxpre.h"
 +
 +#include "prepare_detection.h"
 +
 +#include "config.h"
 +
 +#include <cstdio>
 +
 +#include <chrono>
 +#include <thread>
 +#include <vector>
 +
 +#include "architecture.h"
 +
 +#ifdef HAVE_UNISTD_H
 +#    include <unistd.h> // sysconf()
 +#endif
 +
 +namespace gmx
 +{
 +
 +/*! \brief Utility that does dummy computing for max 2 seconds to spin up cores
 + *
 + *  This routine will check the number of cores configured and online
 + *  (using sysconf), and the spins doing dummy compute operations for up to
 + *  2 seconds, or until all cores have come online. This can be used prior to
 + *  hardware detection for platforms that take unused processors offline.
 + *
 + *  This routine will not throw exceptions. In principle it should be
 + *  declared noexcept, but at least icc 19.1 and 21-beta08 with the
 + *  libstdc++-7.5 has difficulty implementing a std::vector of
 + *  std::thread started with this function when declared noexcept. It
++ *  is a known compiler bug that should be fixed after 19.1.
++ *  Fortunately, this function is not performance sensitive,
 + *  and only runs on platforms other than x86 and POWER (ie ARM),
 + *  so the possible overhead introduced by omitting noexcept is not
 + *  important.
 + */
 +static void spinUpCore()
 +{
 +#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF) && defined(_SC_NPROCESSORS_ONLN)
 +    float dummy           = 0.1;
 +    int   countConfigured = sysconf(_SC_NPROCESSORS_CONF);    // noexcept
 +    auto  start           = std::chrono::steady_clock::now(); // noexcept
 +
 +    while (sysconf(_SC_NPROCESSORS_ONLN) < countConfigured
 +           && std::chrono::steady_clock::now() - start < std::chrono::seconds(2))
 +    {
 +        for (int i = 1; i < 10000; i++)
 +        {
 +            dummy /= i;
 +        }
 +    }
 +
 +    if (dummy < 0)
 +    {
 +        printf("This cannot happen, but prevents loop from being optimized away.");
 +    }
 +#endif
 +}
 +
 +void hardwareTopologyPrepareDetection()
 +{
 +#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF) \
 +        && (defined(THREAD_PTHREADS) || defined(THREAD_WINDOWS))
 +
 +    // Modify this conditional when/if x86 or PowerPC starts to sleep some cores
 +    if (c_architecture != Architecture::X86 && c_architecture != Architecture::PowerPC)
 +    {
 +        int                      countConfigured = sysconf(_SC_NPROCESSORS_CONF);
 +        std::vector<std::thread> workThreads(countConfigured);
 +
 +        for (auto& t : workThreads)
 +        {
 +            t = std::thread(spinUpCore);
 +        }
 +
 +        for (auto& t : workThreads)
 +        {
 +            t.join();
 +        }
 +    }
 +#endif
 +}
 +
 +} // namespace gmx
Simple merge
Simple merge
Simple merge
index f1d470779a7d743d5a5f15617fbb7bba056cbf71,0f28b29a56ac6c177a62cf13b5b3e174ebd38851..e5e27165d34119a584ffb699dbc9576e492b467a
@@@ -251,16 -248,20 +251,21 @@@ void PairDistance::initOptions(IOptions
  }
  
  //! Helper function to initialize the grouping for a selection.
 -int initSelectionGroups(Selection* sel, const gmx_mtop_t* top, int type)
 +int initSelectionGroups(Selection* sel, const gmx_mtop_t* top, GroupType type)
  {
      e_index_t indexType = INDEX_UNKNOWN;
-     switch (type)
+     // If the selection type is INDEX_UNKNOWN (e.g. a position not associated
+     // with a set of particles), don't overwrite the selection type.
+     if (sel->type() != INDEX_UNKNOWN)
      {
-         case GroupType::All: indexType = INDEX_ALL; break;
-         case GroupType::Residue: indexType = INDEX_RES; break;
-         case GroupType::Molecule: indexType = INDEX_MOL; break;
-         case GroupType::None: indexType = INDEX_ATOM; break;
-         case GroupType::Count: GMX_THROW(InternalError("Invalid GroupType"));
+         switch (type)
+         {
 -            case eGroupType_All: indexType = INDEX_ALL; break;
 -            case eGroupType_Residue: indexType = INDEX_RES; break;
 -            case eGroupType_Molecule: indexType = INDEX_MOL; break;
 -            case eGroupType_None: indexType = INDEX_ATOM; break;
++            case GroupType::All: indexType = INDEX_ALL; break;
++            case GroupType::Residue: indexType = INDEX_RES; break;
++            case GroupType::Molecule: indexType = INDEX_MOL; break;
++            case GroupType::None: indexType = INDEX_ATOM; break;
++            case GroupType::Count: GMX_THROW(InternalError("Invalid GroupType"));
+         }
      }
      return sel->initOriginalIdsToGroup(top, indexType);
  }