Gromacs  2020.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables

Description

Generic GROMACS namespace.

Functionality for testing whether calls to mdrun produce the same energy and force quantities when they should do so.

Declares the integrators for energy minimization and NMA.

Convenience macro to help us avoid ifdefs each time we use sysconf.

Author
David van der Spoel david.nosp@m..van.nosp@m.dersp.nosp@m.oel@.nosp@m.icm.u.nosp@m.u.se

Namespaces

 compat
 Compatibility aliases for standard library features.
 
 test
 Testing utilities namespace.
 

Classes

class  AbstractAnalysisData
 Abstract base class for all objects that provide data. More...
 
class  AnalysisData
 Parallelizable data container for raw data. More...
 
class  AnalysisDataHandle
 Handle for inserting data into AnalysisData. More...
 
class  AbstractAnalysisArrayData
 Abstract base class for data objects that present in-memory data. More...
 
class  AnalysisArrayData
 Simple in-memory data array. More...
 
class  AnalysisDataValue
 Value type for representing a single value in analysis data objects. More...
 
class  AnalysisDataFrameHeader
 Value type for storing frame-level information for analysis data. More...
 
class  AnalysisDataPointSetRef
 Value type wrapper for non-mutable access to a set of data column values. More...
 
class  AnalysisDataFrameRef
 Value type wrapper for non-mutable access to a data frame. More...
 
class  IAnalysisDataModule
 Interface for a module that gets notified whenever data is added. More...
 
class  AnalysisDataModuleSerial
 Convenience base class for serial analysis data modules. More...
 
class  AnalysisDataModuleParallel
 Convenience base class for parallel analysis data modules. More...
 
class  AnalysisDataModuleManager
 Encapsulates handling of data modules attached to AbstractAnalysisData. More...
 
class  AnalysisDataStorageFrame
 Allows assigning values for a data frame in AnalysisDataStorage. More...
 
class  AnalysisDataStorage
 Helper class that implements storage of data. More...
 
class  AnalysisDataAverageModule
 Data module for independently averaging each column in input data. More...
 
class  AnalysisDataFrameAverageModule
 Data module for averaging of columns for each frame. More...
 
class  AnalysisDataDisplacementModule
 Data module for calculating displacements. More...
 
class  AnalysisHistogramSettingsInitializer
 Provides "named parameter" idiom for constructing histograms. More...
 
class  AnalysisHistogramSettings
 Contains parameters that specify histogram bin locations. More...
 
class  AbstractAverageHistogram
 Base class for representing histograms averaged over frames. More...
 
class  AnalysisDataSimpleHistogramModule
 Data module for per-frame histograms. More...
 
class  AnalysisDataWeightedHistogramModule
 Data module for per-frame weighted histograms. More...
 
class  AnalysisDataBinAverageModule
 Data module for bin averages. More...
 
class  AnalysisDataLifetimeModule
 Data module for computing lifetime histograms for columns in input data. More...
 
class  AnalysisDataPlotSettings
 Common settings for data plots. More...
 
class  AbstractPlotModule
 Abstract data module for writing data into a file. More...
 
class  AnalysisDataPlotModule
 Plotting module for straightforward plotting of data. More...
 
class  AnalysisDataVectorPlotModule
 Plotting module specifically for data consisting of vectors. More...
 
class  AnalysisDataParallelOptions
 Parallelization options for analysis data objects. More...
 
struct  DensityFittingModuleInfo
 Information about the density fitting module. More...
 
class  Awh
 Coupling of the accelerated weight histogram method (AWH) with the system. More...
 
class  CommandLineHelpContext
 Context information for writing out command-line help. More...
 
class  GlobalCommandLineHelpContext
 Helper for passing CommandLineHelpContext into parse_common_args(). More...
 
class  ArrayRef
 STL-like interface to a C array of T (or part of a std container of T). More...
 
class  CommandLineHelpWriter
 Writes help information for Options. More...
 
class  CommandLineModuleSettings
 Settings to pass information between a module and the general runner. More...
 
class  ICommandLineModule
 Module that can be run from command line using CommandLineModuleManager. More...
 
class  CommandLineModuleManager
 Implements a wrapper command-line interface for multiple modules. More...
 
class  CommandLineModuleGroup
 Handle to add content to a group added with CommandLineModuleManager::addModuleGroup(). More...
 
class  ICommandLineOptionsModuleSettings
 Settings to pass information between a CommandLineOptionsModule and generic code that runs it. More...
 
class  ICommandLineOptionsModule
 Module that can be run from a command line and uses gmx::Options for argument processing. More...
 
class  CommandLineParser
 Implements command-line parsing for Options objects. More...
 
class  IExecutableEnvironment
 Allows customization of the way various directories are found by CommandLineProgramContext. More...
 
class  CommandLineProgramContext
 Program context implementation for command line programs. More...
 
class  TrajectoryFileOpener
 Low level method to take care of only file opening and closing. More...
 
class  TrajectoryFrameWriter
 Writes coordinate frames to a sink, e.g. a trajectory file. More...
 
class  IOutputAdapter
 OutputAdapter class for handling trajectory file flag setting and processing. More...
 
class  OutputAdapterContainer
 Storage for output adapters that modify the state of a t_trxframe object. More...
 
class  OutputSelector
 OutputSelector class controls setting which coordinates are actually written. More...
 
class  SetAtoms
 SetAtoms class controls availability of atoms data. More...
 
class  SetBox
 Allows changing box information when writing a coordinate file. More...
 
class  SetForces
 SetForces class allows changing writing of forces to file. More...
 
class  SetPrecision
 SetPrecision class allows changing file writing precision. More...
 
class  SetStartTime
 SetStartTime class allows changing trajectory time information. More...
 
class  SetTimeStep
 SetTimeStep class allows changing trajectory time information. More...
 
class  SetVelocities
 SetVelocities class allows changing writing of velocities to file. More...
 
class  OutputRequirementOptionDirector
 Container for the user input values that will be used by the builder to determine which OutputAdapters should/could/will be registered to the coordinate file writer. More...
 
struct  OutputRequirements
 Finalized version of requirements after processing. More...
 
class  DomainDecompositionBuilder
 Builds a domain decomposition management object. More...
 
class  HashedMap
 Unordered key to value mapping. More...
 
class  GpuHaloExchange
 Manages GPU Halo Exchange object. More...
 
class  LocalAtomSet
 A local atom set collects local, global and collective indices of the home atoms on a rank. The indices of the home atoms are automatically updated during domain decomposition, thus gmx::LocalAtomSet::localIndex enables iteration over local atoms properties like coordinates or forces. TODO: add a LocalAtomSet iterator. More...
 
class  LocalAtomSetManager
 Hands out handles to local atom set indices and triggers index recalculation for all sets upon domain decomposition if run in parallel. More...
 
struct  DomdecOptions
 Structure containing all (command line) options for the domain decomposition. More...
 
class  PmeForceSenderGpu
 Manages sending forces from PME-only ranks to their PP ranks. More...
 
class  PmePpCommGpu
 Manages communication related to GPU buffers between this PME rank and its PP rank. More...
 
struct  MdModulesCheckpointReadingBroadcast
 Provides the MdModules with the communication record to broadcast. More...
 
struct  MdModulesWriteCheckpointData
 Writing the MdModules data to a checkpoint file. More...
 
class  MrcDensityMapOfFloatReader
 Read an mrc/ccp4 file that contains float values. More...
 
class  MrcDensityMapOfFloatFromFileReader
 Read an mrc density map from a given file. More...
 
class  MrcDensityMapOfFloatWriter
 Write an mrc/ccp4 file that contains float values. More...
 
struct  MrcDataStatistics
 Statistics about mrc data arrays. More...
 
struct  MrcDensitySkewData
 Skew matrix and translation. As named in "EMDB Map Distribution Format Description Version 1.01 (c) emdatabank.org 2014". More...
 
struct  CrystallographicLabels
 Crystallographic labels for mrc data. More...
 
struct  MrcDensityMapHeader
 A container for the data in mrc density map file formats. More...
 
class  ClfftInitializer
 Handle clFFT library init and tear down in RAII style also with mutual exclusion. More...
 
class  HostAllocationPolicy
 Policy class for configuring gmx::Allocator, to manage allocations of memory that may be needed for e.g. GPU transfers. More...
 
struct  OpenClTraits
 Stub for OpenCL type traits. More...
 
struct  OpenClTraitsBase
 Implements common trait infrastructure for OpenCL types. More...
 
struct  OpenClTraits< cl_context >
 Implements traits for cl_context. More...
 
struct  OpenClTraits< cl_command_queue >
 Implements traits for cl_command_queue. More...
 
struct  OpenClTraits< cl_program >
 Implements traits for cl_program. More...
 
struct  OpenClTraits< cl_kernel >
 Implements traits for cl_kernel. More...
 
class  ClHandle
 Wrapper of OpenCL type cl_type to implement RAII. More...
 
class  CpuInfo
 Detect CPU capabilities and basic logical processor info. More...
 
class  HardwareTopology
 Information about sockets, cores, threads, numa, caches. More...
 
class  ArrayRefWithPadding
 Interface to a C array of T (or part of a std container of T), that includes padding that is suitable for the kinds of SIMD operations GROMACS uses. More...
 
class  TranslateAndScale
 Transform coordinates in three dimensions by first translating, then scaling them. More...
 
class  DensitySimilarityMeasure
 Measure similarity and gradient between densities. More...
 
class  DensityFittingForce
 Manages evaluation of density-fitting forces for particles that were spread with a kernel. More...
 
struct  ExponentialMovingAverageState
 Store the state of exponential moving averages. More...
 
class  ExponentialMovingAverage
 Evaluate the exponential moving average with bias correction. More...
 
struct  StaticLog2
 Evaluate log2(n) for integer n statically at compile time. More...
 
struct  StaticLog2< 1 >
 Specialization of StaticLog2<n> for n==1. More...
 
struct  StaticLog2< 0 >
 Specialization of StaticLog2<n> for n==0. More...
 
struct  GaussianSpreadKernelParameters
 Parameters for density spreading kernels. More...
 
class  GaussTransform3D
 Sums Gaussian values at three dimensional lattice coordinates. The Gaussian is defined as $A \frac{1}{\sigma^3 \sqrt(2^3\pi^3)} * \exp(-\frac{(x-x0)^2}{2 \sigma^2})$. More...
 
class  MultiDimArray
 Multidimensional array that manages its own memory. More...
 
class  PaddedVector
 PaddedVector is a container of elements in contiguous storage that allocates extra memory for safe SIMD-style loads for operations used in GROMACS. More...
 
class  BasicVector
 C++ class for 3D vectors. More...
 
class  CheckpointHandler
 Class handling the checkpoint signal. More...
 
class  Constraints
 Handles constraints. More...
 
class  MDAtoms
 Contains a C-style t_mdatoms while managing some of its memory with C++ vectors with allocators. More...
 
class  ResetHandler
 Class handling the reset of counters. More...
 
class  SimulationSignal
 POD-style object used by mdrun ranks to set and receive signals within and between simulations. More...
 
class  SimulationSignaller
 Object used by mdrun ranks to signal to each other at this step. More...
 
class  StopHandler
 Class handling the stop signal. More...
 
class  StopConditionSignal
 Class setting the stop signal based on gmx_get_stop_condition() More...
 
class  StopConditionTime
 Class setting the stop signal based on maximal run time. More...
 
class  StopHandlerBuilder
 Class preparing the creation of a StopHandler. More...
 
class  Update
 Contains data for update phase. More...
 
class  UpdateGroupsCog
 Class for managing and computing centers of geometry of update groups. More...
 
class  LegacyMdrunOptions
 This class provides the same command-line option functionality to both CLI and API sessions. More...
 
class  MDModules
 Manages the collection of all modules used for mdrun. More...
 
class  Mdrunner
 Runner object for supporting setup and execution of mdrun. More...
 
class  MdrunnerBuilder
 Build a gmx::Mdrunner. More...
 
class  SimulationContext
 Simulation environment and configuration. More...
 
class  SimulatorBuilder
 Class preparing the creation of Simulator objects. More...
 
class  accessor_basic
 The most basic memory access model for mdspan. More...
 
class  extents
 Multidimensional extents with static and dynamic dimensions. More...
 
class  layout_right
 Right-aligned array layout indexer. Carries the mapping class performing the translation from multidimensional index to one-dimensional number. More...
 
class  basic_mdspan
 Multidimensional array indexing and memory access with flexible mapping and access model. More...
 
class  ForceWithShiftForces
 Container for force and virial for algorithms that compute shift forces for virial calculation. More...
 
class  ForceWithVirial
 Container for force and virial for algorithms that provide their own virial tensor contribution. More...
 
class  ForceOutputs
 Force and virial output buffers for use in force computation. More...
 
class  ForceProviderInput
 Helper struct that bundles data for passing it over to the force providers. More...
 
class  ForceProviderOutput
 Helper struct bundling the output data of a force provider. More...
 
class  IForceProvider
 Interface for a component that provides forces during MD. More...
 
class  ForceProviders
 Evaluates forces from a collection of gmx::IForceProvider. More...
 
class  IMDModule
 Extension module for GROMACS simulations. More...
 
class  IMDOutputProvider
 Interface for handling additional output files during a simulation. More...
 
class  IMdpOptionProvider
 Interface for handling mdp/tpr input to a mdrun module. More...
 
class  StepWorkload
 Describes work done on this domain that may change per-step. More...
 
class  DomainLifetimeWorkload
 Describes work done on this domain on every step of its lifetime, but which might change after the next domain paritioning. More...
 
class  SimulationWorkload
 Manage what computation is required during the simulation. More...
 
class  CheckpointHelper
 Checkpoint helper. More...
 
class  CompositeSimulatorElement
 Composite simulator element. More...
 
class  ComputeGlobalsElement
 Encapsulate the calls to compute_globals More...
 
class  ConstraintsElement
 Constraints element. More...
 
class  DomDecHelper
 Infrastructure element responsible for domain decomposition. More...
 
class  EnergyElement
 Element managing energies. More...
 
class  ForceElement
 Force element. More...
 
class  FreeEnergyPerturbationElement
 The free energy perturbation element. More...
 
class  ModularSimulator
 The modular simulator. More...
 
class  SignallerBuilder
 Builder for signallers. More...
 
class  ISimulatorElement
 The general interface for elements of the modular simulator. More...
 
class  ISignaller
 The general Signaller interface. More...
 
class  INeighborSearchSignallerClient
 Interface for clients of the NeighborSearchSignaller. More...
 
class  ILastStepSignallerClient
 Interface for clients of the LastStepSignaller. More...
 
class  ILoggingSignallerClient
 Interface for clients of the LoggingSignaller. More...
 
class  IEnergySignallerClient
 Interface for clients of the EnergySignaller. More...
 
class  ITrajectorySignallerClient
 Interface for signaller clients of the TrajectoryElement. More...
 
class  ITrajectoryWriterClient
 Interface for writer clients of the TrajectoryElement. More...
 
class  ITopologyHolderClient
 Client requiring read access to the local topology. More...
 
class  ICheckpointHelperClient
 Client that needs to store data during checkpointing. More...
 
class  ParrinelloRahmanBarostat
 Element implementing the Parrinello-Rahman barostat. More...
 
class  PmeLoadBalanceHelper
 Infrastructure element responsible for PME load balancing. More...
 
class  Propagator
 Propagator element. More...
 
class  ShellFCElement
 Shell & flex constraints element. More...
 
class  NeighborSearchSignaller
 Element signalling a neighbor search step. More...
 
class  LastStepSignaller
 Element signalling the last step. More...
 
class  LoggingSignaller
 Element signalling a logging step. More...
 
class  EnergySignaller
 Element signalling energy related special steps. More...
 
class  StatePropagatorData
 StatePropagatorData and associated data. More...
 
class  TopologyHolder
 Object holding the topology. More...
 
class  TrajectoryElement
 Trajectory element signals and handles trajectory writing. More...
 
class  TrajectoryElementBuilder
 Build the TrajectoryElement More...
 
class  VRescaleThermostat
 Element implementing the v-rescale thermostat. More...
 
struct  BenchmarkSystem
 Description of the system used for benchmarking. More...
 
class  TextTableFormatter
 Formats rows of a table for text output. More...
 
class  HelpManager
 Helper for providing interactive online help. More...
 
class  AbstractSimpleHelpTopic
 Abstract base class for help topics that have simple text and no subtopics. More...
 
class  AbstractCompositeHelpTopic
 Abstract base class for help topics that have simple text and subtopics. More...
 
class  SimpleHelpTopic
 Template for simple implementation of AbstractSimpleHelpTopic. More...
 
class  CompositeHelpTopic
 Template for simple implementation of AbstractCompositeHelpTopic. More...
 
class  HelpLinks
 Hyperlink data for writing out help. More...
 
class  HelpWriterContext
 Context information for writing out help. More...
 
class  IHelpTopic
 Provides a single online help topic. More...
 
class  OptionStorageTemplate
 Templated base class for constructing option value storage classes. More...
 
class  AbstractOption
 Abstract base class for specifying option properties. More...
 
class  OptionTemplate
 Templated base class for constructing concrete option settings classes. More...
 
class  OptionInfo
 Gives information and allows modifications to an option after creation. More...
 
class  AbstractOptionStorage
 Abstract base class for converting, validating, and storing option values. More...
 
class  AbstractOptionSection
 Base class for specifying option section properties. More...
 
class  AbstractOptionSectionHandle
 Base class for handles to option sections. More...
 
class  BooleanOption
 Specifies an option that provides boolean values. More...
 
class  IntegerOption
 Specifies an option that provides integer values. More...
 
class  Int64Option
 Specifies an option that provides 64-bit integer values. More...
 
class  DoubleOption
 Specifies an option that provides floating-point (double) values. More...
 
class  FloatOption
 Specifies an option that provides floating-point (float) values. More...
 
class  StringOption
 Specifies an option that provides string values. More...
 
class  EnumOption
 Specifies an option that accepts enumerated string values and writes the selected index into an enum variable. More...
 
class  BooleanOptionInfo
 Wrapper class for accessing boolean option information. More...
 
class  IntegerOptionInfo
 Wrapper class for accessing integer option information. More...
 
class  Int64OptionInfo
 Wrapper class for accessing 64-bit integer option information. More...
 
class  DoubleOptionInfo
 Wrapper class for accessing floating-point option information. More...
 
class  FloatOptionInfo
 Wrapper class for accessing floating-point option information. More...
 
class  StringOptionInfo
 Wrapper class for accessing string option information. More...
 
class  EnumOptionInfo
 Wrapper class for accessing enum option information. More...
 
class  OptionsBehaviorCollection
 Container for IOptionsBehavior objects. More...
 
class  FileNameOption
 Specifies an option that provides file names. More...
 
class  FileNameOptionInfo
 Wrapper class for accessing file name option information. More...
 
class  FileNameOptionManager
 Handles interaction of file name options with global options. More...
 
class  IOptionsBehavior
 Interface to provide extension points for options parsing. More...
 
class  IOptionsContainer
 Interface for adding input options. More...
 
class  IOptionsContainerWithSections
 Interface for adding input options with sections. More...
 
class  OptionManagerContainer
 Container to keep managers added with Options::addManager() and pass them to options. More...
 
class  IOptionManager
 Base class for option managers. More...
 
class  Options
 Collection of options. More...
 
class  OptionsAssigner
 Decorator class for assigning values to Options. More...
 
class  OptionSection
 Declares a simple option section. More...
 
class  OptionSectionHandle
 Allows adding options to an OptionSection. More...
 
class  OptionStorageTemplateSimple
 Simplified option storage template for options that have one-to-one value conversion. More...
 
class  OptionsVisitor
 Pure interface for visiting options in a Options object. More...
 
class  OptionsTypeVisitor
 Abstract base class for visiting options of a particular type. More...
 
class  OptionsIterator
 Decorator class for visiting options in a Options object. More...
 
class  OptionsModifyingVisitor
 Pure interface for visiting options in a Options object, allowing modifications. More...
 
class  OptionsModifyingTypeVisitor
 Abstract base class for visiting options of a particular type, allowing modifications. More...
 
class  OptionsModifyingIterator
 Decorator class for visiting options in a Options object, allowing changes. More...
 
class  RepeatingOptionSectionHandle
 Allows adding options to an RepeatingOptionSection. More...
 
class  RepeatingOptionSection
 Declares an option section that creates a structure for each instance. More...
 
class  TimeUnitManager
 Provides common functionality for time unit conversions. More...
 
class  TimeUnitBehavior
 Options behavior to add a time unit option. More...
 
class  OptionValueConverterSimple
 Helper for converting from Any to a given type. More...
 
class  ExponentialDistribution
 Exponential distribution. More...
 
class  GammaDistribution
 Gamma distribution. More...
 
class  NormalDistribution
 Normal distribution. More...
 
class  TabulatedNormalDistribution
 Tabulated normal random distribution. More...
 
class  ThreeFry2x64General
 General implementation class for ThreeFry counter-based random engines. More...
 
class  ThreeFry2x64
 ThreeFry2x64 random engine with 20 iteractions. More...
 
class  ThreeFry2x64Fast
 ThreeFry2x64 random engine with 13 iteractions. More...
 
class  UniformIntDistribution
 Uniform integer distribution. More...
 
class  UniformRealDistribution
 Uniform real distribution. More...
 
class  RestraintManager
 Manage the Restraint potentials available for Molecular Dynamics. More...
 
class  RestraintMDModule
 MDModule wrapper for Restraint implementations. More...
 
class  Site
 Abstraction for a restraint interaction site. More...
 
class  PotentialPointData
 Structure to hold the results of IRestraintPotential::evaluate(). More...
 
class  IRestraintPotential
 Interface for Restraint potentials. More...
 
class  AnalysisNeighborhoodPositions
 Input positions for neighborhood searching. More...
 
class  AnalysisNeighborhood
 Neighborhood searching for analysis tools. More...
 
class  AnalysisNeighborhoodPair
 Value type to represent a pair of positions found in neighborhood searching. More...
 
class  AnalysisNeighborhoodSearch
 Initialized neighborhood search with a fixed set of reference positions. More...
 
class  AnalysisNeighborhoodPairSearch
 Initialized neighborhood pair search with a fixed set of positions. More...
 
class  Selection
 Provides access to a single selection. More...
 
class  SelectionPosition
 Provides access to information about a single selected position. More...
 
class  SelectionCollection
 Collection of selections. More...
 
struct  SelectionTopologyProperties
 Describes topology properties required for selection evaluation. More...
 
class  SelectionFileOption
 Specifies a special option that provides selections from a file. More...
 
class  SelectionFileOptionInfo
 Wrapper class for accessing and modifying selection file option information. More...
 
class  SelectionOption
 Specifies an option that provides selection(s). More...
 
class  SelectionOptionInfo
 Wrapper class for accessing and modifying selection option information. More...
 
class  ITopologyProvider
 Provides topology information to SelectionOptionBehavior. More...
 
class  SelectionOptionBehavior
 Options behavior to allow using SelectionOptions. More...
 
class  SelectionOptionManager
 Handles interaction of selection options with other options and user input. More...
 
class  Simd4Double
 SIMD4 double type. More...
 
class  Simd4DBool
 SIMD4 variable type to use for logical comparisons on doubles. More...
 
class  Simd4Float
 SIMD4 float type. More...
 
class  Simd4FBool
 SIMD4 variable type to use for logical comparisons on floats. More...
 
class  SimdDouble
 Double SIMD variable. Available if GMX_SIMD_HAVE_DOUBLE is 1. More...
 
class  SimdDInt32
 Integer SIMD variable type to use for conversions to/from double. More...
 
class  SimdDBool
 Boolean type for double SIMD data. More...
 
class  SimdDIBool
 Boolean type for integer datatypes corresponding to double SIMD. More...
 
class  SimdFloat
 Float SIMD variable. Available if GMX_SIMD_HAVE_FLOAT is 1. More...
 
class  SimdFInt32
 Integer SIMD variable type to use for conversions to/from float. More...
 
class  SimdFBool
 Boolean type for float SIMD data. More...
 
class  SimdFIBool
 Boolean type for integer datatypes corresponding to float SIMD. More...
 
struct  SimdFloatTag
 Tag type to select to load SimdFloat with simdLoad(U) More...
 
struct  SimdDoubleTag
 Tag type to select to load SimdDouble with simdLoad(U) More...
 
struct  SimdFInt32Tag
 Tag type to select to load SimdFInt32 with simdLoad(U) More...
 
struct  SimdDInt32Tag
 Tag type to select to load SimdDInt32 with simdLoad(U) More...
 
struct  AlignedArray< float, N >
 Identical to std::array with GMX_SIMD_FLOAT_WIDTH alignment. Should not be deleted through base pointer (destructor is non-virtual). More...
 
struct  AlignedArray< double, N >
 Identical to std::array with GMX_SIMD_DOUBLE_WIDTH alignment. Should not be deleted through base pointer (destructor is non-virtual). More...
 
class  SimdSetZeroProxy
 Proxy object to enable setZero() for SIMD and real types. More...
 
class  CubicSplineTable
 Cubic spline interpolation table. More...
 
class  QuadraticSplineTable
 Quadratic spline interpolation table. More...
 
struct  AnalyticalSplineTableInput
 Specification for analytical table function (name, function, derivative) More...
 
struct  NumericalSplineTableInput
 Specification for vector table function (name, function, derivative, spacing) More...
 
struct  DevelopmentFeatureFlags
 Structure that holds boolean flags corresponding to the development features present enabled through environment variables. More...
 
struct  GpuTaskMapping
 Specifies the GPU deviceID_ available for task_ to use. More...
 
class  GpuTaskAssignmentsBuilder
 Builder for the GpuTaskAssignments for all ranks on this node. More...
 
class  GpuTaskAssignments
 Contains the GPU task assignment for all ranks on this physical node. More...
 
class  RangePartitioning
 Division of a range of indices into consecutive blocks. More...
 
struct  ExclusionBlock
 Describes exclusions for a single atom. More...
 
class  TrajectoryAnalysisModuleData
 Base class for thread-local data storage during trajectory analysis. More...
 
class  TrajectoryAnalysisModule
 Base class for trajectory analysis modules. More...
 
class  TrajectoryAnalysisSettings
 Trajectory analysis module configuration object. More...
 
class  TrajectoryAnalysisCommandLineRunner
 Runner for command-line trajectory analysis tools. More...
 
class  UnionFinder
 Union-find data structure for keeping track of disjoint sets. More...
 
class  MappedUnionFinder
 Extension of UnionFind that supports non-consecutive integer indices as items. More...
 
class  TopologyInformation
 Topology information available to a trajectory analysis module. More...
 
class  AlignedAllocationPolicy
 Policy class for configuring gmx::Allocator, to manage allocations of aligned memory for SIMD code. More...
 
class  PageAlignedAllocationPolicy
 Policy class for configuring gmx::Allocator, to manage allocations of page-aligned memory that can be locked for asynchronous transfer to GPU devices. More...
 
class  Allocator
 Policy-based memory allocator. More...
 
class  Any
 Represents a dynamically typed value of an arbitrary type. More...
 
class  BinaryInformationSettings
 Settings for printBinaryInformation(). More...
 
class  PrivateImplPointer
 Helper class to manage a pointer to a private implementation class. More...
 
class  DataFileOptions
 Search parameters for DataFileFinder. More...
 
struct  DataFileInfo
 Information about a data file found by DataFileFinder::enumerateFiles(). More...
 
class  DataFileFinder
 Searches data files from a set of paths. More...
 
class  DefaultInitializationAllocator
 Allocator adaptor that interposes construct() calls to convert value initialization into default initialization. More...
 
class  DirectoryEnumerator
 Lists files in a directory. More...
 
class  EnumerationIterator
 Allows iterating sequential enumerators. More...
 
class  EnumerationWrapper
 Allows constructing iterators for looping over sequential enumerators. More...
 
struct  EnumerationArray
 Wrapper for a C-style array with size and indexing defined by an enum. Useful for declaring arrays of enum names for debug or other printing. An ArrayRef<DataType> may be constructed from an object of this type. More...
 
class  ExceptionInfo
 Stores additional context information for exceptions. More...
 
class  ExceptionInitializer
 Provides information for Gromacs exception constructors. More...
 
class  GromacsException
 Base class for all exception objects in Gromacs. More...
 
class  FileIOError
 Exception class for file I/O errors. More...
 
class  UserInputError
 Exception class for user input errors. More...
 
class  InvalidInputError
 Exception class for situations where user input cannot be parsed/understood. More...
 
class  InconsistentInputError
 Exception class for situations where user input is inconsistent. More...
 
class  ToleranceError
 Exception class when a specified tolerance cannot be achieved. More...
 
class  SimulationInstabilityError
 Exception class for simulation instabilities. More...
 
class  InternalError
 Exception class for internal errors. More...
 
class  APIError
 Exception class for incorrect use of an API. More...
 
class  RangeError
 Exception class for out-of-range values or indices. More...
 
class  NotImplementedError
 Exception class for use of an unimplemented feature. More...
 
class  ParallelConsistencyError
 Exception class for use when ensuring that MPI ranks to throw in a coordinated fashion. More...
 
class  IFileInputRedirector
 Allows overriding file existence checks from code that supports it. More...
 
class  IFileOutputRedirector
 Allows capturing stdout and file output from code that supports it. More...
 
class  StandardInputStream
 Text input stream implementation for reading from stdin. More...
 
class  TextInputFile
 Text input stream implementation for reading from a file. More...
 
class  TextOutputFile
 Text output stream implementation for writing to a file. More...
 
class  FixedCapacityVector
 Vector that behaves likes std::vector but has fixed capacity. More...
 
class  FlagsTemplate
 Template class for typesafe handling of combination of flags. More...
 
class  ISerializer
 Interface for types that convert standard data types into a form suitable for storage or transfer. More...
 
class  KeyValueTreePath
 Identifies an entry in a key-value tree. More...
 
class  KeyValueTreeBuilder
 Root builder for creating trees that have an object at the root. More...
 
class  KeyValueTreeValueBuilder
 Builder for KeyValueTreeValue objects. More...
 
class  KeyValueTreeUniformArrayBuilder
 Builder for KeyValueTreeArray objects where all elements are of type T. More...
 
class  KeyValueTreeObjectArrayBuilder
 Builder for KeyValueTreeArray objects where all elements are KeyValueTreeObject objects. More...
 
class  KeyValueTreeObjectBuilder
 Builder for KeyValueTreeObject objects. More...
 
class  IKeyValueTreeTransformRules
 Interface to declare rules for transforming key-value trees. More...
 
class  KeyValueTreeTransformRulesScoped
 Helper object returned from IKeyValueTreeTransformRules::scopedTransform(). More...
 
class  KeyValueTreeTransformRuleBuilder
 Provides methods to specify one transformation rule. More...
 
class  ILogTarget
 Target where log output can be written. More...
 
class  LogEntryWriter
 Helper class for creating log entries with GMX_LOG. More...
 
class  LogLevelHelper
 Represents a single logging level. More...
 
class  MDLogger
 Declares a logging interface. More...
 
class  LoggerBuilder
 Initializes loggers. More...
 
class  LoggerOwner
 Manages memory for a logger built with LoggerBuilder. More...
 
class  MdModuleNotification
 Subscribe and trigger notification functions. More...
 
struct  registerMdModuleNotification< CurrentCallParameter, CallParameter...>
 Template specialization to assemble MdModuleNotification. More...
 
class  EnergyCalculationFrequencyErrors
 Collect errors for the energy calculation frequency. More...
 
class  MessageStringCollector
 Helper class for collecting message strings, optionally with context. More...
 
class  MessageStringContext
 Convenience class for creating a message context. More...
 
struct  no_delete
 Deleter for std::shared_ptr that does nothing. More...
 
class  PhysicalNodeCommunicator
 Holds a communicator for the physical node of this rank. More...
 
struct  InstallationPrefixInfo
 Provides information about installation prefix (see IProgramContext::installationPrefix()). More...
 
class  IProgramContext
 Provides context information about the program that is calling the library. More...
 
class  Range
 Defines a range of integer numbers and accompanying operations. More...
 
class  StringCompare
 Compare object for std::string STL containers and algorithms that supports run-time decision on how to compare. More...
 
class  StringOutputStream
 Text output stream implementation for writing to an in-memory string. More...
 
class  StringInputStream
 Helper class to convert static string data to a stream. More...
 
class  StringFormatter
 Function object that wraps a call to formatString() that expects a single conversion argument, for use with algorithms. More...
 
class  IdentityFormatter
 Function object to implement the same interface as StringFormatter to use with strings that should not be formatted further. More...
 
class  TextLineWrapperSettings
 Stores settings for line wrapping. More...
 
class  TextLineWrapper
 Wraps lines to a predefined length. More...
 
class  TextReader
 Reads text from a TextInputStream. More...
 
class  TextInputStream
 Interface for reading text. More...
 
class  TextOutputStream
 Interface for writing text. More...
 
class  TextWriter
 Writes text into a TextOutputStream. More...
 
struct  isIntegralConstant
 Is true if type is a std::integral_constant. More...
 
class  NonbondedBenchmarkInfo
 Declares gmx nonbonded-bench. More...
 

Typedefs

typedef std::shared_ptr
< IAnalysisDataModule
AnalysisDataModulePointer
 Smart pointer for managing a generic analysis data module.
 
typedef ArrayRef< const
AnalysisDataValue
AnalysisDataValuesRef
 Shorthand for reference to an array of data values.
 
typedef std::shared_ptr
< AnalysisDataAverageModule
AnalysisDataAverageModulePointer
 Smart pointer to manage an AnalysisDataAverageModule object.
 
typedef std::shared_ptr
< AnalysisDataFrameAverageModule
AnalysisDataFrameAverageModulePointer
 Smart pointer to manage an AnalysisDataFrameAverageModule object.
 
typedef std::shared_ptr
< AnalysisDataDisplacementModule
AnalysisDataDisplacementModulePointer
 Smart pointer to manage an AnalysisDataDisplacementModule object.
 
typedef std::unique_ptr
< AbstractAverageHistogram
AverageHistogramPointer
 Smart pointer to manage an AbstractAverageHistogram object.
 
typedef std::shared_ptr
< AnalysisDataSimpleHistogramModule
AnalysisDataSimpleHistogramModulePointer
 Smart pointer to manage an AnalysisDataSimpleHistogramModule object.
 
typedef std::shared_ptr
< AnalysisDataWeightedHistogramModule
AnalysisDataWeightedHistogramModulePointer
 Smart pointer to manage an AnalysisDataWeightedHistogramModule object.
 
typedef std::shared_ptr
< AnalysisDataBinAverageModule
AnalysisDataBinAverageModulePointer
 Smart pointer to manage an AnalysisDataBinAverageModule object.
 
typedef std::shared_ptr
< AnalysisDataLifetimeModule
AnalysisDataLifetimeModulePointer
 Smart pointer to manage an AnalysisDataLifetimeModule object.
 
typedef std::shared_ptr
< AnalysisDataPlotModule
AnalysisDataPlotModulePointer
 Smart pointer to manage an AnalysisDataPlotModule object.
 
typedef std::shared_ptr
< AnalysisDataVectorPlotModule
AnalysisDataVectorPlotModulePointer
 Smart pointer to manage an AnalysisDataVectorPlotModule object.
 
typedef double awh_dvec [c_biasMaxNumDim]
 A real vector in AWH coordinate space.
 
typedef int awh_ivec [c_biasMaxNumDim]
 An integer vector in AWH coordinate space.
 
typedef std::unique_ptr
< ICommandLineModule
CommandLineModulePointer
 Smart pointer type for managing a ICommandLineModule.
 
typedef std::map< std::string,
CommandLineModulePointer
CommandLineModuleMap
 Container type for mapping module names to module objects.
 
typedef std::unique_ptr
< CommandLineModuleGroupData > 
CommandLineModuleGroupDataPointer
 Smart pointer type for managing a CommandLineModuleGroup.
 
typedef std::vector
< CommandLineModuleGroupDataPointer
CommandLineModuleGroupList
 Container type for keeping a list of module groups.
 
typedef std::unique_ptr
< ICommandLineOptionsModule
ICommandLineOptionsModulePointer
 Smart pointer to manage an ICommandLineOptionsModule.
 
typedef std::unique_ptr
< IExecutableEnvironment
ExecutableEnvironmentPointer
 Shorthand for a smart pointer to IExecutableEnvironment.
 
using TrajectoryFrameWriterPointer = std::unique_ptr< TrajectoryFrameWriter >
 Smart pointer to manage the TrajectoryFrameWriter object.
 
using OutputAdapterPointer = std::unique_ptr< IOutputAdapter >
 Smart pointer to manage the frame adapter object.
 
using OutputSelectorPointer = std::unique_ptr< OutputSelector >
 Smart pointer to manage the object.
 
using SetAtomsPointer = std::unique_ptr< SetAtoms >
 Smart pointer to manage the object.
 
using SetBoxPointer = std::unique_ptr< SetBox >
 Smart pointer to manage the object.
 
using SetForcesPointer = std::unique_ptr< SetForces >
 Smart pointer to manage the object.
 
using SetPrecisionPointer = std::unique_ptr< SetPrecision >
 Smart pointer to manage the outputselector object.
 
using SetStartTimePointer = std::unique_ptr< SetStartTime >
 Smart pointer to manage the object.
 
using SetTimeStepPointer = std::unique_ptr< SetTimeStep >
 Smart pointer to manage the object.
 
using SetVelocitiesPointer = std::unique_ptr< SetVelocities >
 Smart pointer to manage the object.
 
template<class T >
using HostAllocator = Allocator< T, HostAllocationPolicy >
 Memory allocator that uses HostAllocationPolicy. More...
 
template<class T >
using HostVector = std::vector< T, HostAllocator< T >>
 Convenience alias for std::vector that uses HostAllocator.
 
template<class T >
using PaddedHostVector = PaddedVector< T, HostAllocator< T >>
 Convenience alias for PaddedVector that uses HostAllocator.
 
typedef enum gmx::IMDType_t IMDMessageType
 Enum for types of IMD messages. More...
 
template<class ElementType >
using BasicMatrix3x3 = MultiDimArray< std::array< ElementType, 3 *3 >, extents< 3, 3 >>
 Three-by-three matrix of ElementType. More...
 
using Matrix3x3 = BasicMatrix3x3< real >
 Three-by-three real number matrix. More...
 
using Matrix3x3Span = Matrix3x3::view_type
 Convenience alias for a matrix view.
 
using Matrix3x3ConstSpan = Matrix3x3::const_view_type
 Convenience alias for a const matrix view.
 
typedef BasicVector< realRVec
 Shorthand for C++ rvec-equivalent type.
 
typedef BasicVector< double > DVec
 Shorthand for C++ dvec-equivalent type.
 
typedef BasicVector< int > IVec
 Shorthand for C++ ivec-equivalent type.
 
typedef std::array
< SimulationSignal, eglsNR > 
SimulationSignals
 Convenience typedef for the group of signals used.
 
using SimulatorFunctionType ) = void(
 Function type for simulator code.
 
using LogFilePtr = std::unique_ptr< t_fileio, functor_wrapper< t_fileio, closeLogFile >>
 Simple guard pointer See unique_cptr for details.
 
using dynamicExtents3D = extents< dynamic_extent, dynamic_extent, dynamic_extent >
 Convenience type for often-used three dimensional extents.
 
template<class T , ptrdiff_t... Indices>
using mdspan = basic_mdspan< T, extents< Indices...>, layout_right, accessor_basic< T >>
 basic_mdspan with wrapped indices, basic_accessor policiy and right-aligned memory layout.
 
typedef std::function< void()> CheckBondedInteractionsCallback
 The function type allowing to request a check of the number of bonded interactions.
 
typedef std::unique_ptr
< CheckBondedInteractionsCallback
CheckBondedInteractionsCallbackPtr
 Pointer to the function type allowing to request a check of the number of bonded interactions.
 
using Step = int64_t
 Step number.
 
using Time = double
 Simulation time.
 
typedef std::function< void()> SimulatorRunFunction
 The function type that can be scheduled to be run during the simulator run.
 
typedef std::unique_ptr
< SimulatorRunFunction
SimulatorRunFunctionPtr
 Pointer to the function type that can be scheduled to be run during the simulator run.
 
typedef std::function< void(SimulatorRunFunctionPtr)> RegisterRunFunction
 The function type that allows to register run functions.
 
typedef std::unique_ptr
< RegisterRunFunction
RegisterRunFunctionPtr
 Pointer to the function type that allows to register run functions.
 
typedef std::function< void(Step,
Time)> 
SignallerCallback
 The function type that can be registered to signallers for callback.
 
typedef std::unique_ptr
< SignallerCallback
SignallerCallbackPtr
 Pointer to the function type that can be registered to signallers for callback.
 
typedef std::function< void(gmx_mdoutf
*, Step, Time, bool, bool)> 
ITrajectoryWriterCallback
 Function type for trajectory writing clients.
 
typedef std::unique_ptr
< ITrajectoryWriterCallback
ITrajectoryWriterCallbackPtr
 Pointer to the function type for trajectory writing clients.
 
typedef std::function< void(Step)> PropagatorCallback
 Generic callback to the propagator.
 
typedef std::unique_ptr
< PropagatorCallback
PropagatorCallbackPtr
 Pointer to generic callback to the propagator.
 
typedef std::unique_ptr
< AbstractCompositeHelpTopic
CompositeHelpTopicPointer
 Smart pointer type to manage a AbstractCompositeHelpTopic object.
 
typedef std::unique_ptr
< IHelpTopic
HelpTopicPointer
 Smart pointer type to manage a IHelpTopic object.
 
typedef EnumOption< int > EnumIntOption
 Shorthand for an enumerated option that stores into an int variable.
 
typedef FloatOption RealOption
 Typedef for either DoubleOption or FloatOption, depending on precision. More...
 
typedef FloatOptionInfo RealOptionInfo
 Typedef for either DoubleOptionInfo or FloatOptionInfo, depending on precision. More...
 
typedef std::shared_ptr
< IOptionsBehavior
OptionsBehaviorPointer
 Smart pointer for behaviors stored in OptionsBehaviorCollection.
 
typedef FlagsTemplate< OptionFlagOptionFlags
 Holds a combination of OptionFlag values.
 
typedef std::random_device RandomDevice
 Random device. More...
 
typedef ThreeFry2x64Fast DefaultRandomEngine
 Default fast and accurate random engine in Gromacs. More...
 
using Vector = ::gmx::RVec
 Provide a vector type name with a more stable interface than RVec and a more stable implementation than vec3<>.
 
typedef std::list
< SelectionParserValue > 
SelectionParserValueList
 Container for a list of SelectionParserValue objects.
 
typedef std::unique_ptr
< SelectionParserValueList
SelectionParserValueListPointer
 Smart pointer type for managing a SelectionParserValueList.
 
typedef std::list
< SelectionParserParameter > 
SelectionParserParameterList
 Container for a list of SelectionParserParameter objects.
 
typedef std::unique_ptr
< SelectionParserParameterList
SelectionParserParameterListPointer
 Smart pointer type for managing a SelectionParserParameterList.
 
typedef std::vector< SelectionSelectionList
 Container of selections used in public selection interfaces.
 
typedef std::unique_ptr
< internal::SelectionData > 
SelectionDataPointer
 Smart pointer for managing an internal selection data object.
 
typedef std::vector
< SelectionDataPointer
SelectionDataList
 Container for storing a list of selections internally.
 
typedef std::shared_ptr
< SelectionTreeElement > 
SelectionTreeElementPointer
 Smart pointer type for selection tree element pointers.
 
using GpuTasksOnRanks = std::vector< std::vector< GpuTask >>
 Container of compute tasks suitable to run on a GPU e.g. on each rank of a node.
 
using GpuTaskAssignment = std::vector< GpuTaskMapping >
 Container of GPU tasks on a rank, specifying the task type and GPU device ID, e.g. potentially ready for consumption by the modules on that rank.
 
using BoxMatrix = std::array< std::array< real, 3 >, 3 >
 A 3x3 matrix data type useful for simulation boxes. More...
 
typedef std::unique_ptr
< TrajectoryAnalysisModuleData
TrajectoryAnalysisModuleDataPointer
 Smart pointer to manage a TrajectoryAnalysisModuleData object.
 
typedef std::unique_ptr
< TrajectoryAnalysisModule
TrajectoryAnalysisModulePointer
 Smart pointer to manage a TrajectoryAnalysisModule.
 
template<class T >
using AlignedAllocator = Allocator< T, AlignedAllocationPolicy >
 Aligned memory allocator. More...
 
template<class T >
using PageAlignedAllocator = Allocator< T, PageAlignedAllocationPolicy >
 PageAligned memory allocator. More...
 
using index = std::ptrdiff_t
 Integer type for indexing into arrays or vectors. More...
 
typedef ExceptionInfo< struct
ExceptionInfoErrno_, int > 
ExceptionInfoErrno
 Stores errno value that triggered the exception.
 
typedef ExceptionInfo< struct
ExceptionInfoApiFunc_, const
char * > 
ExceptionInfoApiFunction
 Stores the function name that returned the errno in ExceptionInfoErrno.
 
typedef ExceptionInfo< struct
ExceptionInfoLocation_,
ThrowLocation > 
ExceptionInfoLocation
 Stores the location where the exception was thrown.
 
using FilePtr = std::unique_ptr< FILE, functor_wrapper< FILE, fclose_wrapper >>
 Simple guard pointer which calls fclose. See unique_cptr for details.
 
typedef tMPI::mutex Mutex
 C++11-compatible basic mutex.
 
using MPI_Comm_ptr = gmx::unique_cptr< MPI_Comm, MPI_Comm_free_wrapper >
 Make a smart pointer for MPI communicators.
 
typedef std::shared_ptr
< TextInputStream
TextInputStreamPointer
 Shorthand for a smart pointer to a TextInputStream.
 
typedef std::shared_ptr
< TextOutputStream
TextOutputStreamPointer
 Shorthand for a smart pointer to a TextOutputStream.
 
template<typename T , void D = sfree_wrapper>
using unique_cptr = std::unique_ptr< T, functor_wrapper< T, D >>
 unique_ptr which takes function pointer (has to return void) as template argument
 
typedef unique_cptr< void > sfree_guard
 Simple guard which calls sfree. See unique_cptr for details.
 
using ClContext = ClHandle< cl_context >
 Convenience declarations.
 
using ClCommandQueue = ClHandle< cl_command_queue >
 
using ClProgram = ClHandle< cl_program >
 
using ClKernel = ClHandle< cl_kernel >
 

Enumerations

enum  DensityFittingAmplitudeMethod { DensityFittingAmplitudeMethod::Unity, DensityFittingAmplitudeMethod::Mass, DensityFittingAmplitudeMethod::Charge, Count }
 The methods that determine how amplitudes are spread on a grid in density guided simulations. More...
 
enum  AwhOutputEntryType {
  AwhOutputEntryType::MetaData, AwhOutputEntryType::CoordValue, AwhOutputEntryType::Pmf, AwhOutputEntryType::Bias,
  AwhOutputEntryType::Visits, AwhOutputEntryType::Weights, AwhOutputEntryType::Target, AwhOutputEntryType::ForceCorrelationVolume,
  AwhOutputEntryType::FrictionTensor
}
 Enum with the AWH variables to write. More...
 
enum  AwhOutputMetaData { AwhOutputMetaData::NumBlock, AwhOutputMetaData::TargetError, AwhOutputMetaData::ScaledSampleWeight, AwhOutputMetaData::Count }
 Enum with the types of metadata to write. More...
 
enum  Normalization { Normalization::None, Normalization::Coordinate, Normalization::FreeEnergy, Normalization::Distribution }
 Enum with different ways of normalizing the output. More...
 
enum  CoordinateFileFlags : unsigned long {
  CoordinateFileFlags::Base = 1 << 0, CoordinateFileFlags::RequireForceOutput = 1 << 1, CoordinateFileFlags::RequireVelocityOutput = 1 << 2, CoordinateFileFlags::RequireAtomConnections = 1 << 3,
  CoordinateFileFlags::RequireAtomInformation = 1 << 4, CoordinateFileFlags::RequireChangedOutputPrecision = 1 << 5, CoordinateFileFlags::RequireNewFrameStartTime = 1 << 6, CoordinateFileFlags::RequireNewFrameTimeStep = 1 << 7,
  CoordinateFileFlags::RequireNewBox = 1 << 8, CoordinateFileFlags::RequireCoordinateSelection = 1 << 9, CoordinateFileFlags::Count
}
 The enums here define the flags specifying the requirements of different outputadapter modules. More...
 
enum  ChangeSettingType { PreservedIfPresent, Always, Never }
 Enum class for setting basic flags in a t_trxframe.
 
enum  ChangeAtomsType { PreservedIfPresent, AlwaysFromStructure, Never, Always }
 Enum class for t_atoms settings.
 
enum  ChangeFrameInfoType { PreservedIfPresent, Always }
 Enum class for setting fields new or not.
 
enum  ChangeFrameTimeType { PreservedIfPresent, StartTime, TimeStep, Both }
 Enum class for setting frame time from user input.
 
enum  DdRankOrder {
  DdRankOrder::select, DdRankOrder::interleave, DdRankOrder::pp_pme, DdRankOrder::cartesian,
  DdRankOrder::Count
}
 The options for the domain decomposition MPI task ordering. More...
 
enum  DlbOption {
  DlbOption::select, DlbOption::turnOnWhenUseful, DlbOption::no, DlbOption::yes,
  DlbOption::Count
}
 The options for the dynamic load balancing. More...
 
enum  SpaceGroup : int32_t { SpaceGroup::P1 = 1 }
 Space group in three dimensions. More...
 
enum  MrcDataMode : int32_t {
  MrcDataMode::uInt8 = 0, MrcDataMode::int16 = 1, MrcDataMode::float32 = 2, MrcDataMode::complexInt32 = 3,
  MrcDataMode::complexFloat64 = 4
}
 The type of density data stored in an mrc file. As named in "EMDB Map Distribution Format Description Version 1.01 (c) emdatabank.org 2014" Modes 0-4 are defined by the standard. NOTE only mode 2 is currently implemented and used. More...
 
enum  PinningPolicy : int { CannotBePinned, PinnedIfSupported }
 Helper enum for pinning policy of the allocation of HostAllocationPolicy. More...
 
enum  Architecture { Unknown, Architecture::X86, Architecture::Arm, Architecture::PowerPC }
 Enum for GROMACS CPU hardware detection support. More...
 
enum  IMDType_t {
  IMD_DISCONNECT, IMD_ENERGIES, IMD_FCOORDS, IMD_GO,
  IMD_HANDSHAKE, IMD_KILL, IMD_MDCOMM, IMD_PAUSE,
  IMD_TRATE, IMD_IOERROR, IMD_NR
}
 Enum for types of IMD messages. More...
 
enum  DensitySimilarityMeasureMethod { DensitySimilarityMeasureMethod::innerProduct, DensitySimilarityMeasureMethod::relativeEntropy, DensitySimilarityMeasureMethod::crossCorrelation, Count }
 The methods that determine how two densities are compared to one another. More...
 
enum  CheckpointSignal { noSignal = 0, doCheckpoint = 1 }
 Checkpoint signals. More...
 
enum  ConstraintVariable : int {
  Positions, Velocities, Derivative, Deriv_FlexCon,
  Force, ForceDispl
}
 Describes supported flavours of constrained updates.
 
enum  FlexibleConstraintTreatment { FlexibleConstraintTreatment::Include, FlexibleConstraintTreatment::Exclude }
 Tells make_at2con how to treat flexible constraints. More...
 
enum  ResetSignal { noSignal = 0, doResetCounters = 1 }
 Reset signals. More...
 
enum  StopSignal { noSignal = 0, stopAtNextNSStep = 1, stopImmediately = -1 }
 Stop signals. More...
 
enum  StartingBehavior : int { StartingBehavior::RestartWithAppending, StartingBehavior::RestartWithoutAppending, StartingBehavior::NewSimulation, StartingBehavior::Count }
 Enumeration for describing how mdrun is (re)starting. More...
 
enum  : std::ptrdiff_t { dynamic_extent = -1 }
 Define constant that signals dynamic extent.
 
enum  {
  eawhtargetCONSTANT, eawhtargetCUTOFF, eawhtargetBOLTZMANN, eawhtargetLOCALBOLTZMANN,
  eawhtargetNR
}
 Target distribution enum.
 
enum  { eawhgrowthEXP_LINEAR, eawhgrowthLINEAR, eawhgrowthNR }
 Weight histogram growth enum.
 
enum  { eawhpotentialCONVOLVED, eawhpotentialUMBRELLA, eawhpotentialNR }
 AWH potential type enum.
 
enum  { eawhcoordproviderPULL, eawhcoordproviderNR }
 AWH bias reaction coordinate provider.
 
enum  AtomLocality : int { AtomLocality::Local = 0, AtomLocality::NonLocal = 1, AtomLocality::All = 2, AtomLocality::Count = 3 }
 Atom locality indicator: local, non-local, all. More...
 
enum  InteractionLocality : int { InteractionLocality::Local = 0, InteractionLocality::NonLocal = 1, InteractionLocality::Count = 2 }
 Interaction locality indicator: local, non-local, all. More...
 
enum  AppendingBehavior { AppendingBehavior::Auto, AppendingBehavior::Appending, AppendingBehavior::NoAppending }
 Enumeration for mdrun appending behavior. More...
 
enum  ComputeGlobalsAlgorithm { LeapFrog, VelocityVerletAtFullTimeStep, VelocityVerletAfterCoordinateUpdate }
 The different global reduction schemes we know about.
 
enum  EnergySignallerEvent { EnergyCalculationStep, VirialCalculationStep, FreeEnergyCalculationStep }
 The energy events signalled by the EnergySignaller.
 
enum  TrajectoryEvent { StateWritingStep, EnergyWritingStep }
 The trajectory writing events.
 
enum  IntegrationStep {
  PositionsOnly, VelocitiesOnly, LeapFrog, VelocityVerletPositionsAndVelocities,
  Count
}
 The different integration types we know about. More...
 
enum  NumVelocityScalingValues { NumVelocityScalingValues::None, NumVelocityScalingValues::Single, NumVelocityScalingValues::Multiple, Count }
 Sets the number of different velocity scaling values. More...
 
enum  ParrinelloRahmanVelocityScaling { ParrinelloRahmanVelocityScaling::No, ParrinelloRahmanVelocityScaling::Diagonal, ParrinelloRahmanVelocityScaling::Full, Count }
 Sets the type of Parrinello-Rahman pressure scaling. More...
 
enum  HelpOutputFormat { eHelpOutputFormat_Console, eHelpOutputFormat_Rst, eHelpOutputFormat_Other, eHelpOutputFormat_NR }
 Output format for help writing. More...
 
enum  OptionFileType {
  eftUnknown, eftTopology, eftRunInput, eftTrajectory,
  eftEnergy, eftPDB, eftIndex, eftPlot,
  eftGenericData, eftOptionFileType_NR
}
 Purpose of file(s) provided through an option.
 
enum  OptionFlag {
  efOption_Set = 1 << 0, efOption_HasDefaultValue = 1 << 1, efOption_ExplicitDefaultValue = 1 << 2, efOption_ClearOnNextSet = 1 << 3,
  efOption_Required = 1 << 4, efOption_MultipleTimes = 1 << 5, efOption_Hidden = 1 << 6, efOption_Vector = 1 << 8,
  efOption_DefaultValueIfSetExists = 1 << 11, efOption_NoDefaultValue = 1 << 9, efOption_DontCheckMinimumCount = 1 << 10
}
 Flags for options. More...
 
enum  TimeUnit {
  TimeUnit_fs, TimeUnit_ps, TimeUnit_ns, TimeUnit_us,
  TimeUnit_ms, TimeUnit_s, TimeUnit_Default = TimeUnit_ps
}
 Time values for TimeUnitManager. More...
 
enum  CenteringType { Triclinic, Rectangular, Zero, Count }
 Helper enum class to define centering types.
 
enum  UnitCellType { Triclinic, Rectangular, Compact, Count }
 Helper enum class to define unit cell representation types.
 
enum  RandomDomain {
  RandomDomain::Other = 0x00000000, RandomDomain::MaxwellVelocities = 0x00001000, RandomDomain::TestParticleInsertion = 0x00002000, RandomDomain::UpdateCoordinates = 0x00003000,
  RandomDomain::UpdateConstraints = 0x00004000, RandomDomain::Thermostat = 0x00005000, RandomDomain::Barostat = 0x00006000, RandomDomain::ReplicaExchange = 0x00007000,
  RandomDomain::ExpandedEnsemble = 0x00008000, RandomDomain::AwhBiasing = 0x00009000
}
 Enumerated values for fixed part of random seed (domain) More...
 
enum  SimdType {
  SimdType::None, SimdType::Reference, SimdType::Generic, SimdType::X86_Sse2,
  SimdType::X86_Sse4_1, SimdType::X86_Avx128Fma, SimdType::X86_Avx, SimdType::X86_Avx2,
  SimdType::X86_Avx2_128, SimdType::X86_Avx512, SimdType::X86_Avx512Knl, SimdType::X86_Mic,
  SimdType::Arm_Neon, SimdType::Arm_NeonAsimd, SimdType::Ibm_Vmx, SimdType::Ibm_Vsx,
  SimdType::Fujitsu_HpcAce
}
 Enumerated options for SIMD architectures. More...
 
enum  TaskTarget : int { Auto, Cpu, Gpu }
 Record where a compute task is targetted.
 
enum  EmulateGpuNonbonded : bool { EmulateGpuNonbonded::No, EmulateGpuNonbonded::Yes }
 Help pass GPU-emulation parameters with type safety. More...
 
enum  GpuTask : int { GpuTask::Nonbonded, GpuTask::Pme, GpuTask::Count }
 Types of compute tasks that can be run on a GPU. More...
 
enum  ErrorCode {
  eeOK, eeOutOfMemory, eeFileNotFound, eeFileIO,
  eeInvalidInput, eeInconsistentInput, eeTolerance, eeInstability,
  eeNotImplemented, eeInvalidValue, eeInvalidCall, eeInternalError,
  eeAPIError, eeRange, eeParallelConsistency, eeUnknownError
}
 Possible error return codes from Gromacs functions. More...
 
enum  EndianSwapBehavior : int {
  EndianSwapBehavior::DoNotSwap, EndianSwapBehavior::Swap, EndianSwapBehavior::SwapIfHostIsBigEndian, EndianSwapBehavior::SwapIfHostIsLittleEndian,
  EndianSwapBehavior::Count
}
 Specify endian swapping behavoir. More...
 
enum  StringCompareType { StringCompareType::Exact, StringCompareType::CaseInsensitive, StringCompareType::CaseAndDashInsensitive }
 Specifies how strings should be compared in various contexts. More...
 

Functions

AnalysisHistogramSettingsInitializer histogramFromRange (real min, real max)
 Initializes a histogram using a range and a bin width. More...
 
AnalysisHistogramSettingsInitializer histogramFromBins (real start, int nbins, real binwidth)
 Initializes a histogram using bin width and the number of bins. More...
 
bool operator== (const DensityFittingParameters &lhs, const DensityFittingParameters &rhs)
 Check if two structs holding density fitting parameters are equal. More...
 
bool operator!= (const DensityFittingParameters &lhs, const DensityFittingParameters &rhs)
 Check if two structs holding density fitting parameters are not equal. More...
 
std::unique_ptr< IMDModulecreateElectricFieldModule ()
 Creates a module for an external electric field. More...
 
std::unique_ptr< AwhprepareAwhModule (FILE *fplog, const t_inputrec &inputRecord, t_state *stateGlobal, const t_commrec *commRecord, const gmx_multisim_t *multiSimRecord, bool startingFromCheckpoint, bool usingShellParticles, const std::string &biasInitFilename, pull_t *pull_work)
 Makes an Awh and prepares to use it if the user input requests that. More...
 
static int64_t countSamples (const std::vector< PointState > &pointState)
 Count the total number of samples / sample weight over all grid points. More...
 
static void ensureStateAndRunConsistency (const BiasParams &params, const BiasState &state)
 Check if the state (loaded from checkpoint) and the run are consistent. More...
 
bool haveBiasSharingWithinSimulation (const AwhParams &awhParams)
 Returns if any bias is sharing within a simulation. More...
 
void biasesAreCompatibleForSharingBetweenSimulations (const AwhParams &awhParams, const std::vector< size_t > &pointSize, const gmx_multisim_t *multiSimComm)
 Checks if biases are compatible for sharing between simulations, throws if not. More...
 
static void normalizeFreeEnergyAndPmfSum (std::vector< PointState > *pointState)
 Normalizes the free energy and PMF sum. More...
 
static int countTrailingZeroRows (const double *const *data, int numRows, int numColumns)
 Count trailing data rows containing only zeros. More...
 
static void readUserPmfAndTargetDistribution (const std::vector< DimParams > &dimParams, const Grid &grid, const std::string &filename, int numBias, int biasIndex, std::vector< PointState > *pointState)
 Initializes the PMF and target with data read from an input table. More...
 
static void normalizeBlock (AwhEnergyBlock *block, const Bias &bias)
 Normalizes block data for output. More...
 
void initCorrelationGridHistory (CorrelationGridHistory *correlationGridHistory, int numCorrelationTensors, int tensorSize, int blockDataListSize)
 Initialize correlation grid history, sets all sizes. More...
 
CorrelationGridHistory initCorrelationGridHistoryFromState (const CorrelationGrid &corrGrid)
 Allocate a correlation grid history with the same structure as the given correlation grid. More...
 
void updateCorrelationGridHistory (CorrelationGridHistory *corrGridHist, const CorrelationGrid &corrGrid)
 Update the correlation grid history for checkpointing. More...
 
void restoreCorrelationGridStateFromHistory (const CorrelationGridHistory &corrGridHist, CorrelationGrid *corrGrid)
 Restores the correlation grid state from the correlation grid history. More...
 
double getDeviationFromPointAlongGridAxis (const Grid &grid, int dimIndex, int pointIndex, double value)
 Get the deviation along one dimension from the given value to a point in the grid. More...
 
void linearArrayIndexToMultiDim (int indexLinear, int ndim, const awh_ivec numPointsDim, awh_ivec indexMulti)
 Convert a linear array index to a multidimensional one. More...
 
void linearGridindexToMultiDim (const Grid &grid, int indexLinear, awh_ivec indexMulti)
 Convert a linear grid point index to a multidimensional one. More...
 
int multiDimArrayIndexToLinear (const awh_ivec indexMulti, int numDim, const awh_ivec numPointsDim)
 Convert multidimensional array index to a linear one. More...
 
int multiDimGridIndexToLinear (const Grid &grid, const awh_ivec indexMulti)
 Convert a multidimensional grid point index to a linear one. More...
 
bool advancePointInSubgrid (const Grid &grid, const awh_ivec subgridOrigin, const awh_ivec subgridNpoints, int *gridPointIndex)
 Find the next grid point in the sub-part of the grid given a starting point. More...
 
static int pointDistanceAlongAxis (const GridAxis &axis, double x, double x0)
 Returns the point distance between from value x to value x0 along the given axis. More...
 
static bool valueIsInGrid (const awh_dvec value, const std::vector< GridAxis > &axis)
 Query if a value is in range of the grid. More...
 
static int getNearestIndexInGrid (const awh_dvec value, const std::vector< GridAxis > &axis)
 Map a value to the nearest point in the grid. More...
 
void mapGridToDataGrid (std::vector< int > *gridpointToDatapoint, const double *const *data, int numDataPoints, const std::string &dataFilename, const Grid &grid, const std::string &correctFormatMessage)
 Maps each point in the grid to a point in the data grid. More...
 
static void readDimParams (std::vector< t_inpfile > *inp, const std::string &prefix, AwhDimParams *dimParams, const pull_params_t *pull_params, warninp_t wi, bool bComment)
 Read parameters of an AWH bias dimension. More...
 
static void checkInputConsistencyAwhBias (const AwhBiasParams &awhBiasParams, warninp_t wi)
 Check consistency of input at the AWH bias level. More...
 
static void read_bias_params (std::vector< t_inpfile > *inp, AwhBiasParams *awhBiasParams, const std::string &prefix, const t_inputrec *ir, warninp_t wi, bool bComment)
 Read parameters of an AWH bias. More...
 
static void checkInputConsistencyAwh (const AwhParams &awhParams, warninp_t wi)
 Check consistency of input at the AWH level. More...
 
AwhParams * readAndCheckAwhParams (std::vector< t_inpfile > *inp, const t_inputrec *inputrec, warninp_t wi)
 Allocate, initialize and check the AWH parameters with values from the input file. More...
 
static double get_pull_coord_period (const t_pull_coord &pullCoordParams, const t_pbc &pbc, const real intervalLength)
 Gets the period of a pull coordinate. More...
 
static bool intervalIsInPeriodicInterval (double origin, double end, double period)
 Checks if the given interval is defined in the correct periodic interval. More...
 
static bool valueIsInInterval (double origin, double end, double period, double value)
 Checks if a value is within an interval. More...
 
static void checkInputConsistencyInterval (const AwhParams *awhParams, warninp_t wi)
 Check if the starting configuration is consistent with the given interval. More...
 
void setStateDependentAwhParams (AwhParams *awhParams, const pull_params_t *pull_params, pull_t *pull_work, const matrix box, int ePBC, const tensor &compressibility, const t_grpopts *inputrecGroupOptions, warninp_t wi)
 Sets AWH parameters that need state parameters such as the box vectors. More...
 
CommandLineProgramContextinitForCommandLine (int *argc, char ***argv)
 Initializes the GROMACS library for command-line use. More...
 
void finalizeForCommandLine ()
 Deinitializes the GROMACS library after initForCommandLine(). More...
 
int processExceptionAtExitForCommandLine (const std::exception &ex)
 Handles an exception and deinitializes after initForCommandLine. More...
 
int runCommandLineModule (int argc, char *argv[], ICommandLineModule *module)
 Implements a main() method that runs a single module. More...
 
int runCommandLineModule (int argc, char *argv[], const char *name, const char *description, std::function< std::unique_ptr< ICommandLineOptionsModule >()> factory)
 Implements a main() method that runs a single module. More...
 
void writeCommandLineHelpCMain (const CommandLineHelpContext &context, const char *name, int(*mainFunction)(int argc, char *argv[]))
 Helper to implement ICommandLineModule::writeHelp() with a C-like main() function that calls parse_common_args(). More...
 
static int getFileType (const std::string &filename)
 Get the internal file type from the filename. More...
 
static unsigned long getSupportedOutputAdapters (int filetype)
 Get the flag representing the requirements for a given file output. More...
 
static OutputAdapterContainer addOutputAdapters (const OutputRequirements &requirements, AtomsDataPtr atoms, const Selection &sel, unsigned long abilities)
 Creates a new container object with the user requested IOutputAdapter derived methods attached to it. More...
 
std::unique_ptr
< TrajectoryFrameWriter
createTrajectoryFrameWriter (const gmx_mtop_t *top, const Selection &sel, const std::string &filename, AtomsDataPtr atoms, OutputRequirements requirements)
 Factory function for TrajectoryFrameWriter. More...
 
static void deepCopy_t_trxframe (const t_trxframe &input, t_trxframe *copy, RVec *xvec, RVec *vvec, RVec *fvec, int *indexvec)
 Create a deep copy of a t_trxframe input into copy. More...
 
static t_trxstatus * openTNG (const std::string &name, const Selection &sel, const gmx_mtop_t *mtop)
 Method to open TNG file. More...
 
unsigned long convertFlag (CoordinateFileFlags flag)
 Conversion of flag to its corresponding unsigned long value.
 
static void adjustAtomInformation (t_atoms *atoms, t_atoms *selectionAtoms, const Selection &sel)
 Modify atoms information in coordinate frame to fit output selection. More...
 
size_t numberOfExpectedDataItems (const MrcDensityMapHeader &header)
 Return the number of density data items that are expected to follow this header. More...
 
TranslateAndScale getCoordinateTransformationToLattice (const MrcDensityMapHeader &header)
 Extract the transformation into lattice coordinates. More...
 
dynamicExtents3D getDynamicExtents3D (const MrcDensityMapHeader &header)
 Extract the extents of the density data. More...
 
bool mrcHeaderIsSane (const MrcDensityMapHeader &header)
 Checks if the values in the header are sane. More...
 
void serializeMrcDensityMapHeader (ISerializer *serializer, const MrcDensityMapHeader &mrcHeader)
 Serializes an MrcDensityMapHeader from a given serializer. More...
 
MrcDensityMapHeader deserializeMrcDensityMapHeader (ISerializer *serializer)
 Deserializes an MrcDensityMapHeader from a given serializer. More...
 
static std::string makeOpenClInternalErrorString (const char *message, cl_int status)
 Make an error string following an OpenCL API call. More...
 
static bool isDeviceSane (const gmx_device_info_t *devInfo, std::string *errorMessage)
 Checks that device devInfo is sane (ie can run a kernel). More...
 
static int isDeviceSupported (const gmx_device_info_t *devInfo)
 Checks that device devInfo is compatible with GROMACS. More...
 
static int checkGpu (size_t deviceId, const gmx_device_info_t *deviceInfo)
 Check whether the ocl_gpu_device is suitable for use by mdrun. More...
 
template<class T1 , class T2 >
bool operator== (const Allocator< T1, HostAllocationPolicy > &a, const Allocator< T2, HostAllocationPolicy > &b)
 Return true if two allocators are identical. More...
 
template<typename PinnableVector >
void changePinningPolicy (PinnableVector *v, PinningPolicy pinningPolicy)
 Helper function for changing the pinning policy of a pinnable vector. More...
 
void pinBuffer (void *pointer, std::size_t numBytes) noexcept
 Pin the allocation to physical memory. More...
 
void unpinBuffer (void *pointer) noexcept
 Unpin the allocation. More...
 
void doDeviceTransfers (const gmx_gpu_info_t &gpuInfo, ArrayRef< const char > input, ArrayRef< char > output)
 Helper function for GPU test code to be platform agnostic. More...
 
bool cpuIsX86Nehalem (const CpuInfo &cpuInfo)
 Return true if the CPU is an Intel x86 Nehalem. More...
 
static void gmx_detect_gpus (const gmx::MDLogger &mdlog, const PhysicalNodeCommunicator &physicalNodeComm, compat::not_null< gmx_hw_info_t * > hardwareInfo)
 Detect GPUs, if that makes sense to attempt.
 
static void gmx_collect_hardware_mpi (const gmx::CpuInfo &cpuInfo, const PhysicalNodeCommunicator &physicalNodeComm, compat::not_null< gmx_hw_info_t * > hardwareInfo)
 Reduce the locally collected hardwareInfo over MPI ranks.
 
static void spinUpCore () noexcept
 Utility that does dummy computing for max 2 seconds to spin up cores. More...
 
static void hardwareTopologyPrepareDetection ()
 Prepare the system before hardware topology detection. More...
 
static void hardwareTopologyDoubleCheckDetection (const gmx::MDLogger &mdlog, const gmx::HardwareTopology &hardwareTopology)
 Sanity check hardware topology and print some notes to log. More...
 
gmx_hw_info_t * gmx_detect_hardware (const gmx::MDLogger &mdlog, const PhysicalNodeCommunicator &physicalNodeComm)
 Run detection, consistency checks, and make consistent hardware information available on all ranks. More...
 
bool compatibleGpusFound (const gmx_gpu_info_t &gpu_info)
 Return whether compatible GPUs were found.
 
int identifyAvx512FmaUnits ()
 Test whether machine has dual AVX512 FMA units. More...
 
std::unique_ptr< IMDModulecreateInteractiveMolecularDynamicsModule ()
 Creates a module for interactive molecular dynamics.
 
static void fill_header (IMDHeader *header, IMDMessageType type, int32_t length)
 Fills the header with message and the length argument.
 
static void swap_header (IMDHeader *header)
 Swaps the endianess of the header.
 
static int32_t imd_read_multiple (IMDSocket *socket, char *datptr, int32_t toread)
 Reads multiple bytes from socket.
 
static int32_t imd_write_multiple (IMDSocket *socket, const char *datptr, int32_t towrite)
 Writes multiple bytes to socket in analogy to imd_read_multiple.
 
static int imd_handshake (IMDSocket *socket)
 Handshake with IMD client.
 
static int imd_send_energies (IMDSocket *socket, const IMDEnergyBlock *energies, char *buffer)
 Send energies using the energy block and the send buffer.
 
static IMDMessageType imd_recv_header (IMDSocket *socket, int32_t *length)
 Receive IMD header from socket, sets the length and returns the IMD message.
 
static bool imd_recv_mdcomm (IMDSocket *socket, int32_t nforces, int32_t *forcendx, float *forces)
 Receive force indices and forces. More...
 
void write_IMDgroup_to_file (bool bIMD, t_inputrec *ir, const t_state *state, const gmx_mtop_t *sys, int nfile, const t_filenm fnm[])
 Writes out the group of atoms selected for interactive manipulation. More...
 
static int imd_send_rvecs (IMDSocket *socket, int nat, rvec *x, char *buffer)
 Send positions from rvec. More...
 
static bool rvecs_differ (const rvec v1, const rvec v2)
 Returns true if any component of the two rvecs differs.
 
static void shift_positions (const matrix box, rvec x[], const ivec is, int nr)
 Copied and modified from groupcoord.c shift_positions_group().
 
static void imd_check_integrator_parallel (const t_inputrec *ir, const t_commrec *cr)
 Check for non-working integrator / parallel options.
 
std::unique_ptr< ImdSession > makeImdSession (const t_inputrec *ir, const t_commrec *cr, gmx_wallcycle *wcycle, gmx_enerdata_t *enerd, const gmx_multisim_t *ms, const gmx_mtop_t *top_global, const MDLogger &mdlog, const rvec x[], int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, const ImdOptions &options, StartingBehavior startingBehavior)
 Makes and returns an initialized IMD session, which may be inactive. More...
 
int imdsock_winsockinit ()
 Define a function to initialize winsock.
 
static void print_IMD_error (const char *file, int line, char *msg)
 Print a nice error message on UNIX systems, using errno.h.
 
IMDSocket * imdsock_create ()
 Create an IMD master socket. More...
 
void imd_sleep (unsigned int seconds)
 Portability wrapper around sleep function.
 
int imdsock_bind (IMDSocket *sock, int port)
 Bind the IMD socket to address and port. More...
 
int imd_sock_listen (IMDSocket *sock)
 Set socket to listening state. More...
 
IMDSocket * imdsock_accept (IMDSocket *sock)
 Accept incoming connection and redirect to client socket. More...
 
int imdsock_getport (IMDSocket *sock, int *port)
 Get the port number used for IMD connection. More...
 
int imd_htonl (int src)
 Portability wrapper around system htonl function.
 
int imd_ntohl (int src)
 Portability wrapper around system ntohl function.
 
int imdsock_write (IMDSocket *sock, const char *buffer, int length)
 Write to socket. More...
 
int imdsock_read (IMDSocket *sock, char *buffer, int length)
 Read from socket. More...
 
void imdsock_shutdown (IMDSocket *sock)
 Shutdown the socket. More...
 
int imdsock_destroy (IMDSocket *sock)
 Close the socket and free the sock struct memory. More...
 
int imdsock_tryread (IMDSocket *sock, int timeoutsec, int timeoutusec)
 Try to read from the socket. More...
 
bool buildSupportsGpuBondeds (std::string *error)
 Checks whether the GROMACS build allows to compute bonded interactions on a GPU. More...
 
bool inputSupportsGpuBondeds (const t_inputrec &ir, const gmx_mtop_t &mtop, std::string *error)
 Checks whether the input system allows to compute bonded interactions on a GPU. More...
 
static bool someInteractionsCanRunOnGpu (const InteractionLists &ilists)
 Returns whether there are any interactions in ilists suitable for a GPU.
 
static bool bondedInteractionsCanRunOnGpu (const gmx_mtop_t &mtop)
 Returns whether there are any bonded interactions in the global topology suitable for a GPU.
 
static bool addMessageIfNotSupported (ArrayRef< const std::string > errorReasons, std::string *error)
 Help build a descriptive message in error if there are errorReasons why bondeds on a GPU are not supported. More...
 
void exponentialMovingAverageStateAsKeyValueTree (KeyValueTreeObjectBuilder builder, const ExponentialMovingAverageState &state)
 Convert the exponential moving average state as key-value-tree object.
 
ExponentialMovingAverageState exponentialMovingAverageStateFromKeyValueTree (const KeyValueTreeObject &object)
 Sets the exponential moving average state from a key-value-tree object. More...
 
unsigned int log2I (std::uint32_t x)
 Compute floor of logarithm to base 2, 32 bit unsigned argument. More...
 
unsigned int log2I (std::uint64_t x)
 Compute floor of logarithm to base 2, 64 bit unsigned argument. More...
 
unsigned int log2I (std::int32_t x)
 Compute floor of logarithm to base 2, 32 bit signed argument. More...
 
unsigned int log2I (std::int64_t x)
 Compute floor of logarithm to base 2, 64 bit signed argument. More...
 
std::int64_t greatestCommonDivisor (std::int64_t p, std::int64_t q)
 Find greatest common divisor of two numbers. More...
 
double erfinv (double x)
 Inverse error function, double precision. More...
 
float erfinv (float x)
 Inverse error function, single precision. More...
 
static float invsqrt (float x)
 Calculate 1.0/sqrt(x) in single precision. More...
 
static double invsqrt (double x)
 Calculate 1.0/sqrt(x) in double precision, but single range. More...
 
static double invsqrt (int x)
 Calculate 1.0/sqrt(x) for integer x in double precision. More...
 
static float invcbrt (float x)
 Calculate inverse cube root of x in single precision. More...
 
static double invcbrt (double x)
 Calculate inverse sixth root of x in double precision. More...
 
static double invcbrt (int x)
 Calculate inverse sixth root of integer x in double precision. More...
 
static float sixthroot (float x)
 Calculate sixth root of x in single precision. More...
 
static double sixthroot (double x)
 Calculate sixth root of x in double precision. More...
 
static double sixthroot (int x)
 Calculate sixth root of integer x, return double. More...
 
static float invsixthroot (float x)
 Calculate inverse sixth root of x in single precision. More...
 
static double invsixthroot (double x)
 Calculate inverse sixth root of x in double precision. More...
 
static double invsixthroot (int x)
 Calculate inverse sixth root of integer x in double precision. More...
 
template<typename T >
square (T x)
 calculate x^2 More...
 
template<typename T >
power3 (T x)
 calculate x^3 More...
 
template<typename T >
power4 (T x)
 calculate x^4 More...
 
template<typename T >
power5 (T x)
 calculate x^5 More...
 
template<typename T >
power6 (T x)
 calculate x^6 More...
 
template<typename T >
power12 (T x)
 calculate x^12 More...
 
static real series_sinhx (real x)
 Maclaurin series for sinh(x)/x. More...
 
constexpr int32_t exactDiv (int32_t a, int32_t b)
 Exact integer division, 32bit. More...
 
constexpr int64_t exactDiv (int64_t a, int64_t b)
 Exact integer division, 64bit.
 
static int roundToInt (float x)
 Round float to int. More...
 
static int roundToInt (double x)
 Round double to int.
 
static int64_t roundToInt64 (float x)
 Round float to int64_t.
 
static int64_t roundToInt64 (double x)
 Round double to int64_t.
 
IntegerBox spreadRangeWithinLattice (const IVec &center, dynamicExtents3D extent, IVec range)
 Construct a box that holds all indices that are not more than a given range remote from center coordinates and still within a given lattice extent. More...
 
void invertBoxMatrix (const matrix src, matrix dest)
 Invert a simulation-box matrix in src, return in dest. More...
 
void invertMatrix (const matrix src, matrix dest)
 Invert a general 3x3 matrix in src, return in dest. More...
 
constexpr real determinant (Matrix3x3ConstSpan matrix)
 Determinant of a 3x3 matrix.
 
constexpr real trace (Matrix3x3ConstSpan matrixView)
 Calculates the trace of a 3x3 matrix view.
 
static Matrix3x3 transpose (Matrix3x3ConstSpan matrixView)
 Calculate the transpose of a 3x3 matrix, from its view.
 
static Matrix3x3 createMatrix3x3FromLegacyMatrix (const matrix legacyMatrix)
 Create new matrix type from legacy type.
 
static void fillLegacyMatrix (Matrix3x3ConstSpan newMatrix, matrix legacyMatrix)
 Fill legacy matrix from new matrix type.
 
template<class TContainer , class Extents >
constexpr MultiDimArray
< TContainer, Extents >
::const_iterator 
begin (const MultiDimArray< TContainer, Extents > &multiDimArray)
 Free MultiDimArray begin function addressing its contiguous memory.
 
template<class TContainer , class Extents >
constexpr MultiDimArray
< TContainer, Extents >
::iterator 
begin (MultiDimArray< TContainer, Extents > &multiDimArray)
 Free MultiDimArray begin function addressing its contiguous memory.
 
template<class TContainer , class Extents >
constexpr MultiDimArray
< TContainer, Extents >
::const_iterator 
end (const MultiDimArray< TContainer, Extents > &multiDimArray)
 Free MultiDimArray end function addressing its contiguous memory.
 
template<class TContainer , class Extents >
constexpr MultiDimArray
< TContainer, Extents >
::iterator 
end (MultiDimArray< TContainer, Extents > &multiDimArray)
 Free MultiDimArray end function addressing its contiguous memory.
 
template<class TContainer , class Extents >
void swap (MultiDimArray< TContainer, Extents > &a, MultiDimArray< TContainer, Extents > &b) noexcept
 Swap function.
 
template<typename ValueType >
BasicVector< ValueType > operator* (const BasicVector< ValueType > &basicVector, const ValueType &scalar)
 Allow vector scalar multiplication.
 
template<typename ValueType >
BasicVector< ValueType > operator* (const ValueType &scalar, const BasicVector< ValueType > &basicVector)
 Allow scalar vector multiplication.
 
template<typename VectorType >
static VectorType unitVector (const VectorType &v)
 unitv for gmx::BasicVector
 
template<typename ValueType >
static ValueType norm (BasicVector< ValueType > v)
 norm for gmx::BasicVector
 
template<typename ValueType >
static ValueType norm2 (BasicVector< ValueType > v)
 Square of the vector norm for gmx::BasicVector.
 
template<typename VectorType >
static VectorType cross (const VectorType &a, const VectorType &b)
 cross product for gmx::BasicVector
 
template<typename ValueType >
static ValueType dot (BasicVector< ValueType > a, BasicVector< ValueType > b)
 dot product for gmx::BasicVector
 
template<typename VectorType >
static VectorType scaleByVector (const VectorType &a, const VectorType &b)
 Multiply two vectors element by element and return the result.
 
template<typename VectorType >
static VectorType elementWiseMin (const VectorType &a, const VectorType &b)
 Return the element-wise minimum of two vectors.
 
template<typename VectorType >
static VectorType elementWiseMax (const VectorType &a, const VectorType &b)
 Return the element-wise maximum of two vectors.
 
template<typename ValueType >
static BasicVector< ValueType >
::RawArray * 
as_vec_array (BasicVector< ValueType > *x)
 Casts a gmx::BasicVector array into an equivalent raw C array.
 
template<typename ValueType >
static const BasicVector
< ValueType >::RawArray * 
as_vec_array (const BasicVector< ValueType > *x)
 Casts a gmx::BasicVector array into an equivalent raw C array.
 
static rvec * as_rvec_array (RVec *x)
 Casts a gmx::RVec array into an rvec array.
 
static const rvec * as_rvec_array (const RVec *x)
 Casts a gmx::RVec array into an rvec array.
 
static dvec * as_dvec_array (DVec *x)
 Casts a gmx::DVec array into an Dvec array.
 
static ivec * as_ivec_array (IVec *x)
 Casts a gmx::IVec array into an ivec array.
 
static const dvec * as_dvec_array (const DVec *x)
 Casts a gmx::DVec array into an dvec array.
 
static const ivec * as_ivec_array (const IVec *x)
 Casts a gmx::IVec array into an ivec array.
 
std::unique_ptr< BoxDeformation > prepareBoxDeformation (const matrix &initialBox, t_commrec *cr, const t_inputrec &inputrec)
 Factory function for box deformation module. More...
 
static CheckpointSignal convertToCheckpointSignal (signed char sig)
 Convert signed char (as used by SimulationSignal) to CheckpointSignal enum. More...
 
static void clear_constraint_quantity_nonlocal (gmx_domdec_t *dd, rvec *q)
 Clears constraint quantities for atoms in nonlocal region.
 
void too_many_constraint_warnings (int eConstrAlg, int warncount)
 Generate a fatal error because of too many LINCS/SETTLE warnings.
 
static void write_constr_pdb (const char *fn, const char *title, const gmx_mtop_t &mtop, int start, int homenr, const t_commrec *cr, const rvec x[], const matrix box)
 Writes out coordinates.
 
static void dump_confs (FILE *log, int64_t step, const gmx_mtop_t &mtop, int start, int homenr, const t_commrec *cr, const rvec x[], rvec xprime[], const matrix box)
 Writes out domain contents to help diagnose crashes.
 
FlexibleConstraintTreatment flexibleConstraintTreatment (bool haveDynamicsIntegrator)
 Returns the flexible constraint treatment depending on whether the integrator is dynamic.
 
template<typename T >
static t_blocka makeAtomsToConstraintsList (int numAtoms, const T *ilists, const t_iparams *iparams, FlexibleConstraintTreatment flexibleConstraintTreatment)
 Returns a block struct to go from atoms to constraints. More...
 
t_blocka make_at2con (int numAtoms, const t_ilist *ilist, const t_iparams *iparams, FlexibleConstraintTreatment flexibleConstraintTreatment)
 Returns a block struct to go from atoms to constraints. More...
 
t_blocka make_at2con (const gmx_moltype_t &moltype, gmx::ArrayRef< const t_iparams > iparams, FlexibleConstraintTreatment flexibleConstraintTreatment)
 Returns a block struct to go from atoms to constraints. More...
 
template<typename T >
static int countFlexibleConstraintsTemplate (const T *ilist, const t_iparams *iparams)
 Return the number of flexible constraints in the ilist and iparams.
 
int countFlexibleConstraints (const t_ilist *ilist, const t_iparams *iparams)
 Return the number of flexible constraints in the ilist and iparams.
 
static std::vector< int > make_at2settle (int natoms, const InteractionList &ilist)
 Returns the index of the settle to which each atom belongs.
 
static std::vector< t_blocka > makeAtomToConstraintMappings (const gmx_mtop_t &mtop, FlexibleConstraintTreatment flexibleConstraintTreatment)
 Makes a per-moleculetype container of mappings from atom indices to constraint indices. More...
 
void do_constrain_first (FILE *log, gmx::Constraints *constr, const t_inputrec *inputrec, const t_mdatoms *md, int natoms, ArrayRefWithPadding< RVec > x, ArrayRefWithPadding< RVec > v, const matrix box, real lambda)
 Constrain the initial coordinates and velocities.
 
static bool isConstraintFlexible (const t_iparams *iparams, int iparamsIndex)
 Returns whether constraint with parameter iparamsIndex is a flexible constraint.
 
const t_blocka * atom2constraints_moltype (const Constraints *constr)
 Returns an array of atom to constraints lists for the moltypes.
 
const int * constr_iatomptr (gmx::ArrayRef< const int > iatom_constr, gmx::ArrayRef< const int > iatom_constrnc, int con)
 Returns the constraint iatoms for a constraint number con which comes from a list where F_CONSTR and F_CONSTRNC constraints are concatenated.
 
bool inter_charge_group_constraints (const gmx_mtop_t &mtop)
 Returns whether there are inter charge group constraints.
 
bool inter_charge_group_settles (const gmx_mtop_t &mtop)
 Returns whether there are inter charge group settles.
 
static void constr_recur (const t_blocka *at2con, const InteractionLists &ilist, gmx::ArrayRef< const t_iparams > iparams, gmx_bool bTopB, int at, int depth, int nc, int *path, real r0, real r1, real *r2max, int *count)
 Recursing function to help find all adjacent constraints.
 
static real constr_r_max_moltype (const gmx_moltype_t *molt, gmx::ArrayRef< const t_iparams > iparams, const t_inputrec *ir)
 Find the interaction radius needed for constraints for this molecule type.
 
real constr_r_max (const MDLogger &mdlog, const gmx_mtop_t *mtop, const t_inputrec *ir)
 Returns an estimate of the maximum distance between atoms required for LINCS.
 
ArrayRef< reallincs_rmsdData (Lincs *lincsd)
 Return the data for determining constraint RMS relative deviations.
 
real lincs_rmsd (const Lincs *lincsd)
 Return the RMSD of the constraint.
 
static void lincs_matrix_expand (const Lincs &lincsd, const Task &li_task, gmx::ArrayRef< const real > blcc, gmx::ArrayRef< real > rhs1, gmx::ArrayRef< real > rhs2, gmx::ArrayRef< real > sol)
 Do a set of nrec LINCS matrix multiplications. More...
 
static void lincs_update_atoms_noind (int ncons, gmx::ArrayRef< const AtomPair > atoms, real preFactor, gmx::ArrayRef< const real > fac, gmx::ArrayRef< const gmx::RVec > r, const real *invmass, rvec *x)
 Update atomic coordinates when an index is not required.
 
static void lincs_update_atoms_ind (gmx::ArrayRef< const int > ind, gmx::ArrayRef< const AtomPair > atoms, real preFactor, gmx::ArrayRef< const real > fac, gmx::ArrayRef< const gmx::RVec > r, const real *invmass, rvec *x)
 Update atomic coordinates when an index is required.
 
static void lincs_update_atoms (Lincs *li, int th, real preFactor, gmx::ArrayRef< const real > fac, gmx::ArrayRef< const gmx::RVec > r, const real *invmass, rvec *x)
 Update coordinates for atoms.
 
template<int align>
static void gmx_simdcall gatherLoadUTransposeTSANSafe (const real *base, const std::int32_t *offset, SimdReal *v0, SimdReal *v1, SimdReal *v2)
 Helper function so that we can run TSAN with SIMD support (where implemented).
 
static void gmx_simdcall calc_dr_x_f_simd (int b0, int b1, gmx::ArrayRef< const AtomPair > atoms, const rvec *__restrict x, const rvec *__restrict f, const real *__restrict blc, const real *pbc_simd, rvec *__restrict r, real *__restrict rhs, real *__restrict sol)
 Calculate the constraint distance vectors r to project on from x. More...
 
static void do_lincsp (const rvec *x, rvec *f, rvec *fp, t_pbc *pbc, Lincs *lincsd, int th, real *invmass, ConstraintVariable econq, bool bCalcDHDL, bool bCalcVir, tensor rmdf)
 LINCS projection, works on derivatives of the coordinates.
 
static void gmx_simdcall calc_dr_x_xp_simd (int b0, int b1, gmx::ArrayRef< const AtomPair > atoms, const rvec *__restrict x, const rvec *__restrict xp, const real *__restrict bllen, const real *__restrict blc, const real *pbc_simd, rvec *__restrict r, real *__restrict rhs, real *__restrict sol)
 Calculate the constraint distance vectors r to project on from x. More...
 
static void calc_dist_iter (int b0, int b1, gmx::ArrayRef< const AtomPair > atoms, const rvec *__restrict xp, const real *__restrict bllen, const real *__restrict blc, const t_pbc *pbc, real wfac, real *__restrict rhs, real *__restrict sol, bool *bWarn)
 Determine the distances and right-hand side for the next iteration.
 
static void gmx_simdcall calc_dist_iter_simd (int b0, int b1, gmx::ArrayRef< const AtomPair > atoms, const rvec *__restrict x, const real *__restrict bllen, const real *__restrict blc, const real *pbc_simd, real wfac, real *__restrict rhs, real *__restrict sol, bool *bWarn)
 As calc_dist_iter(), but using SIMD intrinsics.
 
static void do_lincs (const rvec *x, rvec *xp, const matrix box, t_pbc *pbc, Lincs *lincsd, int th, const real *invmass, const t_commrec *cr, bool bCalcDHDL, real wangle, bool *bWarn, real invdt, rvec *__restrict v, bool bCalcVir, tensor vir_r_m_dr)
 Implements LINCS constraining.
 
static void set_lincs_matrix_task (Lincs *li, Task *li_task, const real *invmass, int *ncc_triangle, int *nCrossTaskTriangles)
 Sets the elements in the LINCS matrix for task task.
 
static void set_lincs_matrix (Lincs *li, real *invmass, real lambda)
 Sets the elements in the LINCS matrix.
 
static int count_triangle_constraints (const InteractionLists &ilist, const t_blocka &at2con)
 Finds all triangles of atoms that share constraints to a central atom.
 
static bool more_than_two_sequential_constraints (const InteractionLists &ilist, const t_blocka &at2con)
 Finds sequences of sequential constraints.
 
Lincs * init_lincs (FILE *fplog, const gmx_mtop_t &mtop, int nflexcon_global, ArrayRef< const t_blocka > at2con, bool bPLINCS, int nIter, int nProjOrder)
 Initializes and returns the lincs data struct.
 
void done_lincs (Lincs *li)
 Destructs the lincs object when it is not nullptr.
 
static void lincs_thread_setup (Lincs *li, int natoms)
 Sets up the work division over the threads.
 
static void assign_constraint (Lincs *li, int constraint_index, int a1, int a2, real lenA, real lenB, const t_blocka *at2con)
 Assign a constraint.
 
static void check_assign_connected (Lincs *li, const t_iatom *iatom, const t_idef &idef, bool bDynamics, int a1, int a2, const t_blocka *at2con)
 Check if constraint with topology index constraint_index is connected to other constraints, and if so add those connected constraints to our task.
 
static void check_assign_triangle (Lincs *li, const t_iatom *iatom, const t_idef &idef, bool bDynamics, int constraint_index, int a1, int a2, const t_blocka *at2con)
 Check if constraint with topology index constraint_index is involved in a constraint triangle, and if so add the other two constraints in the triangle to our task.
 
static void set_matrix_indices (Lincs *li, const Task &li_task, const t_blocka *at2con, bool bSortMatrix)
 Sets matrix indices.
 
void set_lincs (const t_idef &idef, const t_mdatoms &md, bool bDynamics, const t_commrec *cr, Lincs *li)
 Initialize lincs stuff.
 
static void lincs_warning (gmx_domdec_t *dd, const rvec *x, rvec *xprime, t_pbc *pbc, int ncons, gmx::ArrayRef< const AtomPair > atoms, gmx::ArrayRef< const real > bllen, real wangle, int maxwarn, int *warncount)
 Issues a warning when LINCS constraints cannot be satisfied.
 
static LincsDeviations makeLincsDeviations (const Lincs &lincsd, const rvec *x, const t_pbc *pbc)
 Determine how well the constraints have been satisfied.
 
bool constrain_lincs (bool computeRmsd, const t_inputrec &ir, int64_t step, Lincs *lincsd, const t_mdatoms &md, const t_commrec *cr, const gmx_multisim_t *ms, const rvec *x, rvec *xprime, rvec *min_proj, const matrix box, t_pbc *pbc, real lambda, real *dvdlambda, real invdt, rvec *v, bool bCalcVir, tensor vir_r_m_dr, ConstraintVariable econq, t_nrnb *nrnb, int maxwarn, int *warncount)
 Applies LINCS constraints. More...
 
template<typename... Args>
std::unique_ptr< ConstraintsmakeConstraints (const gmx_mtop_t &mtop, const t_inputrec &ir, pull_t *pull_work, bool doEssentialDynamics, Args &&...args)
 Factory function for Constraints. More...
 
std::unique_ptr< MDAtomsmakeMDAtoms (FILE *fp, const gmx_mtop_t &mtop, const t_inputrec &ir, bool useGpuForPme)
 Builder function for MdAtomsWrapper. More...
 
static ResetSignal convertToResetSignal (signed char sig)
 Convert signed char (as used by SimulationSignal) to ResetSignal enum. More...
 
static void init_proj_matrix (real invmO, real invmH, real dOH, real dHH, matrix inverseCouplingMatrix)
 Initializes a projection matrix.
 
static void settleparam_init (settleparam_t *p, real mO, real mH, real invmO, real invmH, real dOH, real dHH)
 Initializes settle parameters.
 
settledata * settle_init (const gmx_mtop_t &mtop)
 Initializes and returns a structure with SETTLE parameters.
 
void settle_free (settledata *settled)
 Cleans up.
 
void settle_set_constraints (settledata *settled, const t_ilist *il_settle, const t_mdatoms &mdatoms)
 Set up the indices for the settle constraints.
 
void settle_proj (settledata *settled, ConstraintVariable econq, int nsettle, const t_iatom iatoms[], const t_pbc *pbc,const rvec x[], rvec *der, rvec *derp, int CalcVirAtomEnd, tensor vir_r_m_dder)
 Analytical algorithm to subtract the components of derivatives of coordinates working on settle type constraint.
 
template<typename T , typename TypeBool , int packSize, typename TypePbc , bool bCorrectVelocity, bool bCalcVirial>
static void settleTemplate (const settledata *settled, int settleStart, int settleEnd, const TypePbc pbc, const real *x, real *xprime, real invdt, real *gmx_restrict v, tensor vir_r_m_dr, bool *bErrorHasOccurred)
 The actual settle code, templated for real/SimdReal and for optimization.
 
template<typename T , typename TypeBool , int packSize, typename TypePbc >
static void settleTemplateWrapper (settledata *settled, int nthread, int thread, TypePbc pbc, const real x[], real xprime[], real invdt, real *v, bool bCalcVirial, tensor vir_r_m_dr, bool *bErrorHasOccurred)
 Wrapper template function that divides the settles over threads and instantiates the core template with instantiated booleans.
 
void csettle (settledata *settled,int nthread,int thread,const t_pbc *pbc,const real x[],real xprime[],real invdt,real *v,bool bCalcVirial,tensor vir_r_m_dr,bool *bErrorHasOccurred)
 Constrain coordinates using SETTLE. Can be called on any number of threads.
 
shakedata * shake_init ()
 Initializes and return the SHAKE data structure.
 
void done_shake (shakedata *d)
 Destroy SHAKE. Needed to solve memory leaks.
 
static int pcomp (const void *p1, const void *p2)
 Compares sort blocks.
 
static void pr_sortblock (FILE *fp, const char *title, int nsb, t_sortblock sb[])
 Prints sortblocks.
 
static void resizeLagrangianData (shakedata *shaked, int ncons)
 Reallocates a vector.
 
void make_shake_sblock_serial (shakedata *shaked, const t_idef *idef, const t_mdatoms &md)
 Make SHAKE blocks when not using DD.
 
void make_shake_sblock_dd (shakedata *shaked, const t_ilist *ilcon, const gmx_domdec_t *dd)
 Make SHAKE blocks when using DD.
 
void cshake (const int iatom[], int ncon, int *nnit, int maxnit, const real constraint_distance_squared[], real positions[], const real initial_displacements[], const real half_of_reduced_mass[], real omega, const real invmass[], const real distance_squared_tolerance[], real scaled_lagrange_multiplier[], int *nerror)
 Inner kernel for SHAKE constraints. More...
 
static void crattle (const int iatom[], int ncon, int *nnit, int maxnit, const real constraint_distance_squared[], real vp[], const real rij[], const real m2[], real omega, const real invmass[], const real distance_squared_tolerance[], real scaled_lagrange_multiplier[], int *nerror, real invdt)
 Implements RATTLE (ie. SHAKE for velocity verlet integrators)
 
static int vec_shakef (FILE *fplog, shakedata *shaked, const real invmass[], int ncon, t_iparams ip[], t_iatom *iatom, real tol, const rvec x[], rvec prime[], real omega, bool bFEP, real lambda, real scaled_lagrange_multiplier[], real invdt, rvec *v, bool bCalcVir, tensor vir_r_m_dr, ConstraintVariable econq)
 Applies SHAKE.
 
static void check_cons (FILE *log, int nc, const rvec x[], rvec prime[], rvec v[], t_iparams ip[], t_iatom *iatom, const real invmass[], ConstraintVariable econq)
 Check that constraints are satisfied.
 
static bool bshakef (FILE *log, shakedata *shaked, const real invmass[], const t_idef &idef, const t_inputrec &ir, const rvec x_s[], rvec prime[], t_nrnb *nrnb, real lambda, real *dvdlambda, real invdt, rvec *v, bool bCalcVir, tensor vir_r_m_dr, bool bDumpOnError, ConstraintVariable econq)
 Applies SHAKE.
 
bool constrain_shake (FILE *log,shakedata *shaked,const real invmass[],const t_idef &idef,const t_inputrec &ir,const rvec x_s[],rvec xprime[],rvec vprime[],t_nrnb *nrnb,real lambda,real *dvdlambda,real invdt,rvec *v,bool bCalcVir,tensor vir_r_m_dr,bool bDumpOnError,ConstraintVariable econq)
 Shake all the atoms blockwise. It is assumed that all the constraints in the idef->shakes field are sorted, to ascending block nr. The sblock array points into the idef->shakes.iatoms field, with block 0 starting at sblock[0] and running to ( < ) sblock[1], block n running from sblock[n] to sblock[n+1]. Array sblock should be large enough. Return TRUE when OK, FALSE when shake-error.
 
static StopSignal convertToStopSignal (signed char sig)
 Convert signed char (as used by SimulationSignal) to StopSignal enum. More...
 
static bool hasFlexibleConstraints (const gmx_moltype_t &moltype, gmx::ArrayRef< const t_iparams > iparams)
 Returns whether moltype contains flexible constraints.
 
static bool hasIncompatibleVsites (const gmx_moltype_t &moltype, gmx::ArrayRef< const t_iparams > iparams)
 Returns whether moltype has incompatible vsites. More...
 
static InteractionList jointConstraintList (const gmx_moltype_t &moltype)
 Returns a merged list with constraints of all types.
 
static AtomIndexExtremes vsiteConstructRange (int a, const gmx_moltype_t &moltype)
 Returns the range of constructing atom for vsite with atom index a.
 
static AtomIndexExtremes constraintAtomRange (int a, const t_blocka &at2con, const InteractionList &ilistConstraints)
 Returns the range of atoms constrained to atom a (including a itself)
 
static std::vector< bool > buildIsParticleVsite (const gmx_moltype_t &moltype)
 Returns a list that tells whether atoms in moltype are vsites.
 
static int detectGroup (int firstAtom, const gmx_moltype_t &moltype, const t_blocka &at2con, const InteractionList &ilistConstraints)
 Returns the size of the update group starting at firstAtom or 0 when criteria (see updategroups.h) are not met.
 
static RangePartitioning makeUpdateGroups (const gmx_moltype_t &moltype, gmx::ArrayRef< const t_iparams > iparams)
 Returns a list of update groups for moltype.
 
std::vector< RangePartitioningmakeUpdateGroups (const gmx_mtop_t &mtop)
 Returns a vector with update groups for each moleculetype in mtop or an empty vector when the criteria (see below) are not satisfied. More...
 
static std::unordered_multimap
< int, int > 
getAngleIndices (const gmx_moltype_t &moltype)
 Returns a map of angles ilist.iatoms indices with the middle atom as key.
 
template<int numPartnerAtoms>
static real constraintGroupRadius (const gmx_moltype_t &moltype, gmx::ArrayRef< const t_iparams > iparams, const int centralAtom, const t_blocka &at2con, const std::unordered_multimap< int, int > &angleIndices, const real constraintLength, const real temperature)
 When possible, computes the maximum radius of constrained atom in an update group. More...
 
static real computeMaxUpdateGroupRadius (const gmx_moltype_t &moltype, gmx::ArrayRef< const t_iparams > iparams, const RangePartitioning &updateGroups, real temperature)
 Returns the maximum update group radius for moltype.
 
real computeMaxUpdateGroupRadius (const gmx_mtop_t &mtop, gmx::ArrayRef< const RangePartitioning > updateGroups, real temperature)
 Returns the maximum update group radius. More...
 
static bool is_multisim_option_set (int argc, const char *const argv[])
 Return whether the command-line parameter that will trigger a multi-simulation is set.
 
static DevelopmentFeatureFlags manageDevelopmentFeatures (const gmx::MDLogger &mdlog, const bool useGpuForNonbonded, const PmeRunMode pmeRunMode)
 Manage any development feature flag variables encountered. More...
 
static void threadMpiMdrunnerAccessBarrier ()
 Barrier for safe simultaneous thread access to mdrunner data. More...
 
static void mdrunner_start_fn (const void *arg)
 The callback used for running on spawned threads. More...
 
static bool gpuAccelerationOfNonbondedIsUseful (const MDLogger &mdlog, const t_inputrec &ir, bool issueWarning)
 Return whether GPU acceleration of nonbondeds is supported with the given settings. More...
 
static gmx::LoggerOwner buildLogger (FILE *fplog, const bool isSimulationMasterRank)
 Initializes the logger for mdrun.
 
static TaskTarget findTaskTarget (const char *optionString)
 Make a TaskTarget from an mdrun argument string.
 
static void finish_run (FILE *fplog, const gmx::MDLogger &mdlog, const t_commrec *cr, const t_inputrec *inputrec, t_nrnb nrnb[], gmx_wallcycle_t wcycle, gmx_walltime_accounting_t walltime_accounting, nonbonded_verlet_t *nbv, const gmx_pme_t *pme, gmx_bool bWriteStat)
 Finish run, aggregate data to print performance info.
 
std::tuple< StartingBehavior,
LogFilePtr
handleRestart (bool isSimulationMaster, MPI_Comm communicator, const gmx_multisim_t *ms, AppendingBehavior appendingBehavior, int nfile, t_filenm fnm[])
 Handle startup of mdrun, particularly regarding -cpi and -append. More...
 
static void prepareLogFile (BinaryInformationSettings settings, FILE *fplog)
 Implements aspects of logfile handling common to opening either for writing or appending.
 
LogFilePtr openLogFile (const char *lognm, bool appendFiles)
 Open the log file for writing/appending. More...
 
void prepareLogAppending (FILE *fplog)
 Prepare to use the open log file when appending. More...
 
void closeLogFile (t_fileio *logfio)
 Close the log file.
 
template<class BasicMdspan >
constexpr std::enable_if_t
< BasicMdspan::is_always_contiguous(),
typename BasicMdspan::pointer > 
begin (const BasicMdspan &basicMdspan)
 Free begin function addressing memory of a contiguously laid out basic_mdspan. More...
 
template<class BasicMdspan >
constexpr std::enable_if_t
< BasicMdspan::is_always_contiguous(),
typename BasicMdspan::pointer > 
end (const BasicMdspan &basicMdspan)
 Free end function addressing memory of a contiguously laid out basic_mdspan. More...
 
template<class BasicMdspan >
constexpr BasicMdspan addElementwise (const BasicMdspan &span1, const BasicMdspan &span2)
 Elementwise addition.
 
template<class BasicMdspan >
constexpr BasicMdspan subtractElementwise (const BasicMdspan &span1, const BasicMdspan &span2)
 Elementwise subtraction - left minus right.
 
template<class BasicMdspan >
constexpr BasicMdspan multiplyElementwise (const BasicMdspan &span1, const BasicMdspan &span2)
 Elementwise multiplication.
 
template<class BasicMdspan >
constexpr BasicMdspan divideElementwise (const BasicMdspan &span1, const BasicMdspan &span2)
 Elementwise division - left / right.
 
template<std::ptrdiff_t... LHS, std::ptrdiff_t... RHS>
constexpr bool operator== (const extents< LHS...> &lhs, const extents< RHS...> &rhs) noexcept
 Comparison operator. More...
 
template<std::ptrdiff_t... LHS, std::ptrdiff_t... RHS>
constexpr bool operator!= (const extents< LHS...> &lhs, const extents< RHS...> &rhs) noexcept
 Check for non-equality. More...
 
template<class T >
T & makeRefFromPointer (T *ptr)
 Take pointer, check if valid, return reference.
 
template<NumVelocityScalingValues numVelocityScalingValues, ParrinelloRahmanVelocityScaling parrinelloRahmanVelocityScaling>
static void updateVelocities (int a, real dt, real lambda, const rvec *__restrict invMassPerDim, rvec *__restrict v, const rvec *__restrict f, const rvec diagPR, const matrix matrixPR)
 Update velocities.
 
static void updatePositions (int a, real dt, const rvec *__restrict x, rvec *__restrict xprime, const rvec *__restrict v)
 Update positions.
 
static void runAllCallbacks (std::vector< SignallerCallbackPtr > &callbacks, Step step, Time time)
 Helper function to call all callbacks in a list.
 
static void generateCoordinates (int multiplicationFactor, std::vector< gmx::RVec > *coordinates, matrix box)
 Generates coordinates and a box for the base system scaled by multiplicationFactor.
 
void assignOptionsFromKeyValueTree (Options *options, const KeyValueTreeObject &tree, IKeyValueTreeErrorHandler *errorHandler)
 Assigns option values from a given KeyValueTreeObject. More...
 
void checkForUnknownOptionsInKeyValueTree (const KeyValueTreeObject &tree, const Options &options)
 Checks that a given KeyValueTreeObject can be assigned to given Options. More...
 
KeyValueTreeObject adjustKeyValueTreeFromOptions (const KeyValueTreeObject &tree, const Options &options)
 Adjusts a KeyValueTreeObject to the structure of given Options. More...
 
bool boxesAreEqual (const matrix box1, const matrix box2)
 Returns whether two boxes are of equal size and shape (within reasonable tolerance).
 
bool boxIsZero (const matrix box)
 Returns whether a box is only initialised to zero or not.
 
const char * centerTypeNames (CenteringType type)
 Get names for the different centering types. More...
 
const char * unitCellTypeNames (UnitCellType type)
 Get names for the different unit cell representation types. More...
 
static bool checkIfRandomDeviceIsFunctional (std::random_device *rd)
 Check if the RDRAND random device functioning correctly. More...
 
static uint64_t getNextRandomNumber (bool useRdrand, std::random_device *rd)
 Get the next pure or pseudo-random number. More...
 
uint64_t makeRandomSeed ()
 Return 64 random bits from the random device, suitable as seed. More...
 
template<class RealType = real, unsigned int Bits, class Rng >
RealType generateCanonical (Rng &g)
 Generate a floating-point value with specified number of random bits. More...
 
HelpTopicPointer createSelectionHelpTopic ()
 */ More...
 
static void simdPrefetch (void *m)
 Prefetch memory at address m. More...
 
template<int align>
static void gmx_simdcall gatherLoadTranspose (const double *base, const std::int32_t offset[], SimdDouble *v0, SimdDouble *v1, SimdDouble *v2, SimdDouble *v3)
 Load 4 consecutive double from each of GMX_SIMD_DOUBLE_WIDTH offsets, and transpose into 4 SIMD double variables. More...
 
template<int align>
static void gmx_simdcall gatherLoadTranspose (const double *base, const std::int32_t offset[], SimdDouble *v0, SimdDouble *v1)
 Load 2 consecutive double from each of GMX_SIMD_DOUBLE_WIDTH offsets, and transpose into 2 SIMD double variables. More...
 
template<int align>
static void gmx_simdcall gatherLoadUTranspose (const double *base, const std::int32_t offset[], SimdDouble *v0, SimdDouble *v1, SimdDouble *v2)
 Load 3 consecutive doubles from each of GMX_SIMD_DOUBLE_WIDTH offsets, and transpose into 3 SIMD double variables. More...
 
template<int align>
static void gmx_simdcall transposeScatterStoreU (double *base, const std::int32_t offset[], SimdDouble v0, SimdDouble v1, SimdDouble v2)
 Transpose and store 3 SIMD doubles to 3 consecutive addresses at GMX_SIMD_DOUBLE_WIDTH offsets. More...
 
template<int align>
static void gmx_simdcall transposeScatterIncrU (double *base, const std::int32_t offset[], SimdDouble v0, SimdDouble v1, SimdDouble v2)
 Transpose and add 3 SIMD doubles to 3 consecutive addresses at GMX_SIMD_DOUBLE_WIDTH offsets. More...
 
template<int align>
static void gmx_simdcall transposeScatterDecrU (double *base, const std::int32_t offset[], SimdDouble v0, SimdDouble v1, SimdDouble v2)
 Transpose and subtract 3 SIMD doubles to 3 consecutive addresses at GMX_SIMD_DOUBLE_WIDTH offsets. More...
 
static void gmx_simdcall expandScalarsToTriplets (SimdDouble scalar, SimdDouble *triplets0, SimdDouble *triplets1, SimdDouble *triplets2)
 Expand each element of double SIMD variable into three identical consecutive elements in three SIMD outputs. More...
 
template<int align>
static void gmx_simdcall gatherLoadBySimdIntTranspose (const double *base, SimdDInt32 offset, SimdDouble *v0, SimdDouble *v1, SimdDouble *v2, SimdDouble *v3)
 Load 4 consecutive doubles from each of GMX_SIMD_DOUBLE_WIDTH offsets specified by a SIMD integer, transpose into 4 SIMD double variables. More...
 
template<int align>
static void gmx_simdcall gatherLoadUBySimdIntTranspose (const double *base, SimdDInt32 offset, SimdDouble *v0, SimdDouble *v1)
 Load 2 consecutive doubles from each of GMX_SIMD_DOUBLE_WIDTH offsets (unaligned) specified by SIMD integer, transpose into 2 SIMD doubles. More...
 
template<int align>
static void gmx_simdcall gatherLoadBySimdIntTranspose (const double *base, SimdDInt32 offset, SimdDouble *v0, SimdDouble *v1)
 Load 2 consecutive doubles from each of GMX_SIMD_DOUBLE_WIDTH offsets specified by a SIMD integer, transpose into 2 SIMD double variables. More...
 
static double gmx_simdcall reduceIncr4ReturnSum (double *m, SimdDouble v0, SimdDouble v1, SimdDouble v2, SimdDouble v3)
 Reduce each of four SIMD doubles, add those values to four consecutive doubles in memory, return sum. More...
 
template<int align>
static void gmx_simdcall gatherLoadTranspose (const float *base, const std::int32_t offset[], SimdFloat *v0, SimdFloat *v1, SimdFloat *v2, SimdFloat *v3)
 Load 4 consecutive floats from each of GMX_SIMD_FLOAT_WIDTH offsets, and transpose into 4 SIMD float variables. More...
 
template<int align>
static void gmx_simdcall gatherLoadTranspose (const float *base, const std::int32_t offset[], SimdFloat *v0, SimdFloat *v1)
 Load 2 consecutive floats from each of GMX_SIMD_FLOAT_WIDTH offsets, and transpose into 2 SIMD float variables. More...
 
template<int align>
static void gmx_simdcall gatherLoadUTranspose (const float *base, const std::int32_t offset[], SimdFloat *v0, SimdFloat *v1, SimdFloat *v2)
 Load 3 consecutive floats from each of GMX_SIMD_FLOAT_WIDTH offsets, and transpose into 3 SIMD float variables. More...
 
template<int align>
static void gmx_simdcall transposeScatterStoreU (float *base, const std::int32_t offset[], SimdFloat v0, SimdFloat v1, SimdFloat v2)
 Transpose and store 3 SIMD floats to 3 consecutive addresses at GMX_SIMD_FLOAT_WIDTH offsets. More...
 
template<int align>
static void gmx_simdcall transposeScatterIncrU (float *base, const std::int32_t offset[], SimdFloat v0, SimdFloat v1, SimdFloat v2)
 Transpose and add 3 SIMD floats to 3 consecutive addresses at GMX_SIMD_FLOAT_WIDTH offsets. More...
 
template<int align>
static void gmx_simdcall transposeScatterDecrU (float *base, const std::int32_t offset[], SimdFloat v0, SimdFloat v1, SimdFloat v2)
 Transpose and subtract 3 SIMD floats to 3 consecutive addresses at GMX_SIMD_FLOAT_WIDTH offsets. More...
 
static void gmx_simdcall expandScalarsToTriplets (SimdFloat scalar, SimdFloat *triplets0, SimdFloat *triplets1, SimdFloat *triplets2)
 Expand each element of float SIMD variable into three identical consecutive elements in three SIMD outputs. More...
 
template<int align>
static void gmx_simdcall gatherLoadBySimdIntTranspose (const float *base, SimdFInt32 offset, SimdFloat *v0, SimdFloat *v1, SimdFloat *v2, SimdFloat *v3)
 Load 4 consecutive floats from each of GMX_SIMD_FLOAT_WIDTH offsets specified by a SIMD integer, transpose into 4 SIMD float variables. More...
 
template<int align>
static void gmx_simdcall gatherLoadUBySimdIntTranspose (const float *base, SimdFInt32 offset, SimdFloat *v0, SimdFloat *v1)
 Load 2 consecutive floats from each of GMX_SIMD_FLOAT_WIDTH offsets (unaligned) specified by SIMD integer, transpose into 2 SIMD floats. More...
 
template<int align>
static void gmx_simdcall gatherLoadBySimdIntTranspose (const float *base, SimdFInt32 offset, SimdFloat *v0, SimdFloat *v1)
 Load 2 consecutive floats from each of GMX_SIMD_FLOAT_WIDTH offsets specified by a SIMD integer, transpose into 2 SIMD float variables. More...
 
static float gmx_simdcall reduceIncr4ReturnSum (float *m, SimdFloat v0, SimdFloat v1, SimdFloat v2, SimdFloat v3)
 Reduce each of four SIMD floats, add those values to four consecutive floats in memory, return sum. More...
 
static void store (float *m, float a)
 Store contents of float variable to aligned memory m. More...
 
static void storeU (float *m, float a)
 Store contents of float variable to unaligned memory m. More...
 
static float fma (float a, float b, float c)
 Float Fused-multiply-add. Result is a*b + c. More...
 
static float fms (float a, float b, float c)
 Float Fused-multiply-subtract. Result is a*b - c. More...
 
static float fnma (float a, float b, float c)
 Float Fused-negated-multiply-add. Result is -a*b + c. More...
 
static float fnms (float a, float b, float c)
 Float Fused-negated-multiply-subtract. Result is -a*b - c. More...
 
static float maskAdd (float a, float b, float m)
 Add two float variables, masked version. More...
 
static float maskzMul (float a, float b, float m)
 Multiply two float variables, masked version. More...
 
static float maskzFma (float a, float b, float c, float m)
 Float fused multiply-add, masked version. More...
 
static float abs (float a)
 Float Floating-point abs(). More...
 
static float max (float a, float b)
 Set each float element to the largest from two variables. More...
 
static float min (float a, float b)
 Set each float element to the smallest from two variables. More...
 
static float round (float a)
 Float round to nearest integer value (in floating-point format). More...
 
static float trunc (float a)
 Truncate float, i.e. round towards zero - common hardware instruction. More...
 
static float reduce (float a)
 Return sum of all elements in float variable (i.e., the variable itself). More...
 
static float andNot (float a, float b)
 Bitwise andnot for two scalar float variables. More...
 
static bool testBits (float a)
 Return true if any bits are set in the float variable. More...
 
static bool anyTrue (bool a)
 Returns if the boolean is true. More...
 
static float selectByMask (float a, bool mask)
 Select from single precision variable where boolean is true. More...
 
static float selectByNotMask (float a, bool mask)
 Select from single precision variable where boolean is false. More...
 
static float blend (float a, float b, bool sel)
 Blend float selection. More...
 
static std::int32_t cvtR2I (float a)
 Round single precision floating point to integer. More...
 
static std::int32_t cvttR2I (float a)
 Truncate single precision floating point to integer. More...
 
static std::int32_t cvtI2R (std::int32_t a)
 Return integer. More...
 
static void store (double *m, double a)
 Store contents of double variable to aligned memory m. More...
 
static void storeU (double *m, double a)
 Store contents of double variable to unaligned memory m. More...
 
static double fma (double a, double b, double c)
 double Fused-multiply-add. Result is a*b + c. More...
 
static double fms (double a, double b, double c)
 double Fused-multiply-subtract. Result is a*b - c. More...
 
static double fnma (double a, double b, double c)
 double Fused-negated-multiply-add. Result is - a*b + c. More...
 
static double fnms (double a, double b, double c)
 double Fused-negated-multiply-subtract. Result is -a*b - c. More...
 
static double maskAdd (double a, double b, double m)
 Add two double variables, masked version. More...
 
static double maskzMul (double a, double b, double m)
 Multiply two double variables, masked version. More...
 
static double maskzFma (double a, double b, double c, double m)
 double fused multiply-add, masked version. More...
 
static double abs (double a)
 double doubleing-point abs(). More...
 
static double max (double a, double b)
 Set each double element to the largest from two variables. More...
 
static double min (double a, double b)
 Set each double element to the smallest from two variables. More...
 
static double round (double a)
 double round to nearest integer value (in doubleing-point format). More...
 
static double trunc (double a)
 Truncate double, i.e. round towards zero - common hardware instruction. More...
 
static double reduce (double a)
 Return sum of all elements in double variable (i.e., the variable itself). More...
 
static double andNot (double a, double b)
 Bitwise andnot for two scalar double variables. More...
 
static bool testBits (double a)
 Return true if any bits are set in the double variable. More...
 
static double selectByMask (double a, bool mask)
 Select from double precision variable where boolean is true. More...
 
static double selectByNotMask (double a, bool mask)
 Select from double precision variable where boolean is false. More...
 
static double blend (double a, double b, bool sel)
 Blend double selection. More...
 
static std::int32_t cvtR2I (double a)
 Round single precision doubleing point to integer. More...
 
static std::int32_t cvttR2I (double a)
 Truncate single precision doubleing point to integer. More...
 
static double cvtF2D (float a)
 Convert float to double (mimicks SIMD conversion) More...
 
static float cvtD2F (double a)
 Convert double to float (mimicks SIMD conversion) More...
 
static void store (std::int32_t *m, std::int32_t a)
 Store contents of integer variable to aligned memory m. More...
 
static void storeU (std::int32_t *m, std::int32_t a)
 Store contents of integer variable to unaligned memory m. More...
 
static std::int32_t andNot (std::int32_t a, std::int32_t b)
 Bitwise andnot for two scalar integer variables. More...
 
static bool testBits (std::int32_t a)
 Return true if any bits are set in the integer variable. More...
 
static std::int32_t selectByMask (std::int32_t a, bool mask)
 Select from integer variable where boolean is true. More...
 
static std::int32_t selectByNotMask (std::int32_t a, bool mask)
 Select from integer variable where boolean is false. More...
 
static std::int32_t blend (std::int32_t a, std::int32_t b, bool sel)
 Blend integer selection. More...
 
static bool cvtB2IB (bool a)
 Just return a boolean (mimicks SIMD real-to-int bool conversions) More...
 
static bool cvtIB2B (bool a)
 Just return a boolean (mimicks SIMD int-to-real bool conversions) More...
 
static float copysign (float x, float y)
 Composes single value with the magnitude of x and the sign of y. More...
 
static void invsqrtPair (float x0, float x1, float *out0, float *out1)
 Calculate 1/sqrt(x) for two floats. More...
 
static float inv (float x)
 Calculate 1/x for float. More...
 
static float maskzInvsqrt (float x, bool m)
 Calculate 1/sqrt(x) for masked entry of float. More...
 
static float maskzInv (float x, bool m)
 Calculate 1/x for masked entry of float. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static float sqrt (float x)
 Float sqrt(x). This is the square root. More...
 
static float log (float x)
 Float log(x). This is the natural logarithm. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static float exp2 (float x)
 Float 2^x. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static float exp (float x)
 Float exp(x). More...
 
static float erf (float x)
 Float erf(x). More...
 
static float erfc (float x)
 Float erfc(x). More...
 
static void sincos (float x, float *sinval, float *cosval)
 Float sin & cos. More...
 
static float sin (float x)
 Float sin. More...
 
static float cos (float x)
 Float cos. More...
 
static float tan (float x)
 Float tan. More...
 
static float asin (float x)
 float asin. More...
 
static float acos (float x)
 Float acos. More...
 
static float atan (float x)
 Float atan. More...
 
static float atan2 (float y, float x)
 Float atan2(y,x). More...
 
static float pmeForceCorrection (float z2)
 Calculate the force correction due to PME analytically in float. More...
 
static float pmePotentialCorrection (float z2)
 Calculate the potential correction due to PME analytically in float. More...
 
static double copysign (double x, double y)
 Composes double value with the magnitude of x and the sign of y. More...
 
static void invsqrtPair (double x0, double x1, double *out0, double *out1)
 Calculate 1/sqrt(x) for two doubles. More...
 
static double inv (double x)
 Calculate 1/x for double. More...
 
static double maskzInvsqrt (double x, bool m)
 Calculate 1/sqrt(x) for masked entry of double. More...
 
static double maskzInv (double x, bool m)
 Calculate 1/x for masked entry of double. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static double sqrt (double x)
 Double sqrt(x). This is the square root. More...
 
static double log (double x)
 Double log(x). This is the natural logarithm. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static double exp2 (double x)
 Double 2^x. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static double exp (double x)
 Double exp(x). More...
 
static double erf (double x)
 Double erf(x). More...
 
static double erfc (double x)
 Double erfc(x). More...
 
static void sincos (double x, double *sinval, double *cosval)
 Double sin & cos. More...
 
static double sin (double x)
 Double sin. More...
 
static double cos (double x)
 Double cos. More...
 
static double tan (double x)
 Double tan. More...
 
static double asin (double x)
 Double asin. More...
 
static double acos (double x)
 Double acos. More...
 
static double atan (double x)
 Double atan. More...
 
static double atan2 (double y, double x)
 Double atan2(y,x). More...
 
static double pmeForceCorrection (double z2)
 Calculate the force correction due to PME analytically in double. More...
 
static double pmePotentialCorrection (double z2)
 Calculate the potential correction due to PME analytically in double. More...
 
static double invsqrtSingleAccuracy (double x)
 Calculate 1/sqrt(x) for double, but with single accuracy. More...
 
static void invsqrtPairSingleAccuracy (double x0, double x1, double *out0, double *out1)
 Calculate 1/sqrt(x) for two doubles, but with single accuracy. More...
 
static double invSingleAccuracy (double x)
 Calculate 1/x for double, but with single accuracy. More...
 
static double maskzInvsqrtSingleAccuracy (double x, bool m)
 Calculate 1/sqrt(x) for masked entry of double, but with single accuracy. More...
 
static double maskzInvSingleAccuracy (double x, bool m)
 Calculate 1/x for masked entry of double, but with single accuracy. More...
 
static double sqrtSingleAccuracy (double x)
 Calculate sqrt(x) for double, but with single accuracy. More...
 
static double logSingleAccuracy (double x)
 Double log(x), but with single accuracy. This is the natural logarithm. More...
 
static double exp2SingleAccuracy (double x)
 Double 2^x, but with single accuracy. More...
 
static double expSingleAccuracy (double x)
 Double exp(x), but with single accuracy. More...
 
static double erfSingleAccuracy (double x)
 Double erf(x), but with single accuracy. More...
 
static double erfcSingleAccuracy (double x)
 Double erfc(x), but with single accuracy. More...
 
static void sincosSingleAccuracy (double x, double *sinval, double *cosval)
 Double sin & cos, but with single accuracy. More...
 
static double sinSingleAccuracy (double x)
 Double sin, but with single accuracy. More...
 
static double cosSingleAccuracy (double x)
 Double cos, but with single accuracy. More...
 
static double tanSingleAccuracy (double x)
 Double tan, but with single accuracy. More...
 
static double asinSingleAccuracy (double x)
 Double asin, but with single accuracy. More...
 
static double acosSingleAccuracy (double x)
 Double acos, but with single accuracy. More...
 
static double atanSingleAccuracy (double x)
 Double atan, but with single accuracy. More...
 
static double atan2SingleAccuracy (double y, double x)
 Double atan2(y,x), but with single accuracy. More...
 
static double pmeForceCorrectionSingleAccuracy (double z2)
 Force correction due to PME in double, but with single accuracy. More...
 
static double pmePotentialCorrectionSingleAccuracy (double z2)
 Potential correction due to PME in double, but with single accuracy. More...
 
template<int align>
static void gatherLoadTranspose (const float *base, const std::int32_t offset[], float *v0, float *v1, float *v2, float *v3)
 Load 4 consecutive floats from base/offset into four variables. More...
 
template<int align>
static void gatherLoadTranspose (const float *base, const std::int32_t offset[], float *v0, float *v1)
 Load 2 consecutive floats from base/offset into four variables. More...
 
template<int align>
static void gatherLoadUTranspose (const float *base, const std::int32_t offset[], float *v0, float *v1, float *v2)
 Load 3 consecutive floats from base/offsets, store into three vars. More...
 
template<int align>
static void transposeScatterStoreU (float *base, const std::int32_t offset[], float v0, float v1, float v2)
 Store 3 floats to 3 to base/offset. More...
 
template<int align>
static void transposeScatterIncrU (float *base, const std::int32_t offset[], float v0, float v1, float v2)
 Add 3 floats to base/offset. More...
 
template<int align>
static void transposeScatterDecrU (float *base, const std::int32_t offset[], float v0, float v1, float v2)
 Subtract 3 floats from base/offset. More...
 
static void expandScalarsToTriplets (float scalar, float *triplets0, float *triplets1, float *triplets2)
 Copy single float to three variables. More...
 
template<int align>
static void gatherLoadBySimdIntTranspose (const float *base, std::int32_t offset, float *v0, float *v1, float *v2, float *v3)
 Load 4 floats from base/offsets and store into variables. More...
 
template<int align>
static void gatherLoadUBySimdIntTranspose (const float *base, std::int32_t offset, float *v0, float *v1)
 Load 2 floats from base/offsets and store into variables (unaligned). More...
 
template<int align>
static void gatherLoadBySimdIntTranspose (const float *base, std::int32_t offset, float *v0, float *v1)
 Load 2 floats from base/offsets and store into variables (aligned). More...
 
static float reduceIncr4ReturnSum (float *m, float v0, float v1, float v2, float v3)
 Add each float to four consecutive memory locations, return sum. More...
 
template<int align>
static void gatherLoadTranspose (const double *base, const std::int32_t offset[], double *v0, double *v1, double *v2, double *v3)
 Load 4 consecutive doubles from base/offset into four variables. More...
 
template<int align>
static void gatherLoadTranspose (const double *base, const std::int32_t offset[], double *v0, double *v1)
 Load 2 consecutive doubles from base/offset into four variables. More...
 
template<int align>
static void gatherLoadUTranspose (const double *base, const std::int32_t offset[], double *v0, double *v1, double *v2)
 Load 3 consecutive doubles from base/offsets, store into three vars. More...
 
template<int align>
static void transposeScatterStoreU (double *base, const std::int32_t offset[], double v0, double v1, double v2)
 Store 3 doubles to 3 to base/offset. More...
 
template<int align>
static void transposeScatterIncrU (double *base, const std::int32_t offset[], double v0, double v1, double v2)
 Add 3 doubles to base/offset. More...
 
template<int align>
static void transposeScatterDecrU (double *base, const std::int32_t offset[], double v0, double v1, double v2)
 Subtract 3 doubles from base/offset. More...
 
static void expandScalarsToTriplets (double scalar, double *triplets0, double *triplets1, double *triplets2)
 Copy single double to three variables. More...
 
template<int align>
static void gatherLoadBySimdIntTranspose (const double *base, std::int32_t offset, double *v0, double *v1, double *v2, double *v3)
 Load 4 doubles from base/offsets and store into variables. More...
 
template<int align>
static void gatherLoadUBySimdIntTranspose (const double *base, std::int32_t offset, double *v0, double *v1)
 Load 2 doubles from base/offsets and store into variables (unaligned). More...
 
template<int align>
static void gatherLoadBySimdIntTranspose (const double *base, std::int32_t offset, double *v0, double *v1)
 Load 2 doubles from base/offsets and store into variables (aligned). More...
 
static double reduceIncr4ReturnSum (double *m, double v0, double v1, double v2, double v3)
 Add each double to four consecutive memory locations, return sum. More...
 
static SimdFloat gmx_simdcall invsqrtSingleAccuracy (SimdFloat x)
 Calculate 1/sqrt(x) for SIMD float, only targeting single accuracy. More...
 
static SimdFloat maskzInvsqrtSingleAccuracy (SimdFloat x, SimdFBool m)
 Calculate 1/sqrt(x) for masked SIMD floats, only targeting single accuracy. More...
 
static void gmx_simdcall invsqrtPairSingleAccuracy (SimdFloat x0, SimdFloat x1, SimdFloat *out0, SimdFloat *out1)
 Calculate 1/sqrt(x) for two SIMD floats, only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall invSingleAccuracy (SimdFloat x)
 Calculate 1/x for SIMD float, only targeting single accuracy. More...
 
static SimdFloat maskzInvSingleAccuracy (SimdFloat x, SimdFBool m)
 Calculate 1/x for masked SIMD floats, only targeting single accuracy. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static SimdFloat gmx_simdcall sqrtSingleAccuracy (SimdFloat x)
 Calculate sqrt(x) for SIMD float, always targeting single accuracy. More...
 
static SimdFloat gmx_simdcall cbrtSingleAccuracy (SimdFloat x)
 Calculate cbrt(x) for SIMD float, always targeting single accuracy. More...
 
static SimdFloat gmx_simdcall invcbrtSingleAccuracy (SimdFloat x)
 Calculate 1/cbrt(x) for SIMD float, always targeting single accuracy. More...
 
static SimdFloat gmx_simdcall log2SingleAccuracy (SimdFloat x)
 SIMD float log2(x), only targeting single accuracy. This is the base-2 logarithm. More...
 
static SimdFloat gmx_simdcall logSingleAccuracy (SimdFloat x)
 SIMD float log(x), only targeting single accuracy. This is the natural logarithm. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static SimdFloat gmx_simdcall exp2SingleAccuracy (SimdFloat x)
 SIMD float 2^x, only targeting single accuracy. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static SimdFloat gmx_simdcall expSingleAccuracy (SimdFloat x)
 SIMD float e^x, only targeting single accuracy. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static SimdFloat gmx_simdcall powSingleAccuracy (SimdFloat x, SimdFloat y)
 SIMD pow(x,y), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall erfSingleAccuracy (SimdFloat x)
 SIMD float erf(x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall erfcSingleAccuracy (SimdFloat x)
 SIMD float erfc(x), only targeting single accuracy. More...
 
static void gmx_simdcall sinCosSingleAccuracy (SimdFloat x, SimdFloat *sinval, SimdFloat *cosval)
 SIMD float sin & cos, only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall sinSingleAccuracy (SimdFloat x)
 SIMD float sin(x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall cosSingleAccuracy (SimdFloat x)
 SIMD float cos(x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall tanSingleAccuracy (SimdFloat x)
 SIMD float tan(x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall asinSingleAccuracy (SimdFloat x)
 SIMD float asin(x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall acosSingleAccuracy (SimdFloat x)
 SIMD float acos(x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall atanSingleAccuracy (SimdFloat x)
 SIMD float atan(x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall atan2SingleAccuracy (SimdFloat y, SimdFloat x)
 SIMD float atan2(y,x), only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall pmeForceCorrectionSingleAccuracy (SimdFloat z2)
 SIMD Analytic PME force correction, only targeting single accuracy. More...
 
static SimdFloat gmx_simdcall pmePotentialCorrectionSingleAccuracy (SimdFloat z2)
 SIMD Analytic PME potential correction, only targeting single accuracy. More...
 
static Simd4Float gmx_simdcall invsqrtSingleAccuracy (Simd4Float x)
 Calculate 1/sqrt(x) for SIMD4 float, only targeting single accuracy. More...
 
const std::string & simdString (SimdType s)
 Return a string with the name of a SIMD type. More...
 
SimdType simdSuggested (const CpuInfo &c)
 Return the SIMD type that would fit this hardware best.
 
SimdType simdCompiled ()
 Return the SIMD type the library was compiled with.
 
bool simdCheck (SimdType s, FILE *log, bool warnToStdErr)
 Check if binary was compiled with the provided SIMD type. More...
 
static SimdFloat gmx_simdcall iprod (SimdFloat ax, SimdFloat ay, SimdFloat az, SimdFloat bx, SimdFloat by, SimdFloat bz)
 SIMD float inner product of multiple float vectors. More...
 
static SimdFloat gmx_simdcall norm2 (SimdFloat ax, SimdFloat ay, SimdFloat az)
 SIMD float norm squared of multiple vectors. More...
 
static void gmx_simdcall cprod (SimdFloat ax, SimdFloat ay, SimdFloat az, SimdFloat bx, SimdFloat by, SimdFloat bz, SimdFloat *cx, SimdFloat *cy, SimdFloat *cz)
 SIMD float cross-product of multiple vectors. More...
 
static SimdDouble gmx_simdcall iprod (SimdDouble ax, SimdDouble ay, SimdDouble az, SimdDouble bx, SimdDouble by, SimdDouble bz)
 SIMD double inner product of multiple double vectors. More...
 
static SimdDouble gmx_simdcall norm2 (SimdDouble ax, SimdDouble ay, SimdDouble az)
 SIMD double norm squared of multiple vectors. More...
 
static void gmx_simdcall cprod (SimdDouble ax, SimdDouble ay, SimdDouble az, SimdDouble bx, SimdDouble by, SimdDouble bz, SimdDouble *cx, SimdDouble *cy, SimdDouble *cz)
 SIMD double cross-product of multiple vectors. More...
 
static Simd4Float gmx_simdcall norm2 (Simd4Float ax, Simd4Float ay, Simd4Float az)
 SIMD4 float norm squared of multiple vectors. More...
 
static Simd4Double gmx_simdcall norm2 (Simd4Double ax, Simd4Double ay, Simd4Double az)
 SIMD4 double norm squared of multiple vectors. More...
 
std::unique_ptr< IMDModulecreateSwapCoordinatesModule ()
 Creates a module for Computational Electrophysiology swapping.
 
bool decideWhetherToUseGpusForNonbondedWithThreadMpi (TaskTarget nonbondedTarget, const std::vector< int > &gpuIdsToUse, const std::vector< int > &userGpuTaskAssignment, EmulateGpuNonbonded emulateGpuNonbonded, bool buildSupportsNonbondedOnGpu, bool nonbondedOnGpuIsUseful, int numRanksPerSimulation)
 Decide whether this thread-MPI simulation will run nonbonded tasks on GPUs. More...
 
bool decideWhetherToUseGpusForPmeWithThreadMpi (bool useGpuForNonbonded, TaskTarget pmeTarget, const std::vector< int > &gpuIdsToUse, const std::vector< int > &userGpuTaskAssignment, const gmx_hw_info_t &hardwareInfo, const t_inputrec &inputrec, const gmx_mtop_t &mtop, int numRanksPerSimulation, int numPmeRanksPerSimulation)
 Decide whether this thread-MPI simulation will run PME tasks on GPUs. More...
 
bool decideWhetherToUseGpusForNonbonded (TaskTarget nonbondedTarget, const std::vector< int > &userGpuTaskAssignment, EmulateGpuNonbonded emulateGpuNonbonded, bool buildSupportsNonbondedOnGpu, bool nonbondedOnGpuIsUseful, bool gpusWereDetected)
 Decide whether the simulation will try to run nonbonded tasks on GPUs. More...
 
bool decideWhetherToUseGpusForPme (bool useGpuForNonbonded, TaskTarget pmeTarget, const std::vector< int > &userGpuTaskAssignment, const gmx_hw_info_t &hardwareInfo, const t_inputrec &inputrec, const gmx_mtop_t &mtop, int numRanksPerSimulation, int numPmeRanksPerSimulation, bool gpusWereDetected)
 Decide whether the simulation will try to run tasks of different types on GPUs. More...
 
PmeRunMode determinePmeRunMode (bool useGpuForPme, const TaskTarget &pmeFftTarget, const t_inputrec &inputrec)
 Determine PME run mode. More...
 
bool decideWhetherToUseGpusForBonded (bool useGpuForNonbonded, bool useGpuForPme, TaskTarget bondedTarget, bool canUseGpuForBonded, bool usingLJPme, bool usingElecPmeOrEwald, int numPmeRanksPerSimulation, bool gpusWereDetected)
 Decide whether the simulation will try to run bonded tasks on GPUs. More...
 
bool decideWhetherToUseGpuForUpdate (bool isDomainDecomposition, bool useUpdateGroups, PmeRunMode pmeRunMode, bool havePmeOnlyRank, bool useGpuForNonbonded, TaskTarget updateTarget, bool gpusWereDetected, const t_inputrec &inputrec, const gmx_mtop_t &mtop, bool useEssentialDynamics, bool doOrientationRestraints, bool useReplicaExchange, bool doRerun, const DevelopmentFeatureFlags &devFlags, const gmx::MDLogger &mdlog)
 Decide whether to use GPU for update. More...
 
SimulationWorkload createSimulationWorkload (bool useGpuForNonbonded, PmeRunMode pmeRunMode, bool useGpuForBonded, bool useGpuForUpdate, bool useGpuForBufferOps, bool useGpuHaloExchange, bool useGpuPmePpComm, bool haveEwaldSurfaceContribution)
 Build datastructure that contains decisions whether to run different workload task on GPUs. More...
 
std::vector< GpuTaskfindGpuTasksOnThisRank (bool haveGpusOnThisPhysicalNode, TaskTarget nonbondedTarget, TaskTarget pmeTarget, TaskTarget bondedTarget, TaskTarget updateTarget, bool useGpuForNonbonded, bool useGpuForPme, bool rankHasPpTask, bool rankHasPmeTask)
 Returns container of all tasks on this rank that are eligible for GPU execution. More...
 
GpuTasksOnRanks findAllGpuTasksOnThisNode (ArrayRef< const GpuTask > gpuTasksOnThisRank, const PhysicalNodeCommunicator &physicalNodeComm)
 Returns container of all tasks on all ranks of this node that are eligible for GPU execution. More...
 
void reportGpuUsage (const MDLogger &mdlog, ArrayRef< const GpuTaskAssignment > gpuTaskAssignmentOnRanksOfThisNode, size_t numGpuTasksOnThisNode, size_t numPpRanks, bool printHostName, bool useGpuForBonded, PmeRunMode pmeRunMode, bool useGpuForUpdate)
 Log a report on how GPUs are being used on the ranks of the physical node of rank 0 of the simulation. More...
 
void checkHardwareOversubscription (int numThreadsOnThisRank, int rank, const HardwareTopology &hwTop, const PhysicalNodeCommunicator &comm, const MDLogger &mdlog)
 Warns for oversubscribing the hardware threads, when that is the case.
 
template<GpuTask TaskType>
bool hasTaskType (const GpuTaskMapping &mapping)
 Function for whether the task of mapping has value TaskType.
 
static std::vector< int > parseGpuDeviceIdentifierList (const std::string &gpuIdString)
 Parse a GPU ID specifier string into a container. More...
 
std::vector< int > parseUserGpuIdString (const std::string &gpuIdString)
 Parse a GPU ID specifier string into a container describing device IDs exposed to the run. More...
 
std::vector< int > makeGpuIdsToUse (const gmx_gpu_info_t &gpuInfo, const std::string &gpuIdsAvailableString)
 Implement GPU ID selection by returning the available GPU IDs on this physical node that are compatible. More...
 
std::vector< int > parseUserTaskAssignmentString (const std::string &gpuIdString)
 Parse a GPU ID specifier string into a container describing device ID to task mapping. More...
 
std::vector< int > makeGpuIds (ArrayRef< const int > compatibleGpus, size_t numGpuTasks)
 Make a vector containing numGpuTasks IDs of the IDs found in compatibleGpus. More...
 
std::string makeGpuIdString (const std::vector< int > &gpuIds, int totalNumberOfTasks)
 Convert a container of GPU deviced IDs to a string that can be used by gmx tune_pme as input to mdrun -gputasks. More...
 
void checkUserGpuIds (const gmx_gpu_info_t &gpu_info, const std::vector< int > &compatibleGpus, const std::vector< int > &gpuIds)
 Check that all user-selected GPUs are compatible. More...
 
void writeHeader (TextWriter *writer, const std::string &text, const std::string &section, bool writeFormattedText)
 Write appropiate Header to output stream. More...
 
void writeSystemInformation (TextWriter *writer, const gmx_mtop_t &top, bool writeFormattedText)
 Write information about the molecules in the system. More...
 
void writeParameterInformation (TextWriter *writer, const t_inputrec &ir, bool writeFormattedText)
 Write information about system parameters. More...
 
void writeInformation (TextOutputFile *outputStream, const t_inputrec &ir, const gmx_mtop_t &top, bool writeFormattedText, bool notStdout)
 Wrapper for writing out information. More...
 
void blockaToExclusionBlocks (const t_blocka *b, gmx::ArrayRef< ExclusionBlock > b2)
 Convert the exclusions. More...
 
void exclusionBlocksToBlocka (gmx::ArrayRef< const ExclusionBlock > b2, t_blocka *b)
 Convert the exclusions expressed in b into t_blocka form.
 
void mergeExclusions (t_blocka *excl, gmx::ArrayRef< ExclusionBlock > b2)
 Merge the contents of b2 into excl. More...
 
void registerTrajectoryAnalysisModules (CommandLineModuleManager *manager)
 Registers all trajectory analysis command-line modules. More...
 
gmx_rmpbc_t gmx_rmpbc_init (const gmx::TopologyInformation &topInfo)
 Convenience overload useful for implementing legacy tools.
 
static std::size_t getPageSize ()
 Return a page size, from a sysconf/WinAPI query if available, or a default guess (4096 bytes). More...
 
std::size_t pageSize ()
 Return the memory page size on this system. More...
 
std::string simpleValueToString (const Any &value)
 Converts a Any value to a string. More...
 
template<typename T >
ArrayRef< std::conditional_t
< std::is_const< T >::value,
const typename T::value_type,
typename T::value_type > > 
makeArrayRef (T &c)
 Create ArrayRef from container with type deduction. More...
 
template<typename T >
ArrayRef< const typename
T::value_type > 
makeConstArrayRef (const T &c)
 Create ArrayRef to const T from container with type deduction. More...
 
template<typename T >
void swap (ArrayRef< T > &a, ArrayRef< T > &b)
 Simple swap method for ArrayRef objects. More...
 
template<typename T >
std::vector< T > copyOf (const ArrayRef< const T > &arrayRef)
 Return a vector that is a copy of an ArrayRef. More...
 
template<typename T >
index ssize (const T &t)
 Return signed size of container.
 
void printBinaryInformation (FILE *fp, const IProgramContext &programContext)
 Print basic information about the executable. More...
 
void printBinaryInformation (FILE *fp, const IProgramContext &programContext, const BinaryInformationSettings &settings)
 Print basic information about the executable with custom settings. More...
 
void printBinaryInformation (TextWriter *writer, const IProgramContext &programContext, const BinaryInformationSettings &settings)
 Print basic information about the executable with custom settings. More...
 
std::string bromacs ()
 Return a cool definition for the acronym GROMACS.
 
std::string getCoolQuote ()
 Return a string with a cool quote.
 
std::string getCudaDriverVersionString ()
 Returns a string of the CUDA driver version.
 
std::string getCudaRuntimeVersionString ()
 Returns a string of the CUDA runtime version.
 
template<typename EnumerationArrayType >
EnumerationArrayType::EnumerationWrapperType keysOf (const EnumerationArrayType &)
 Returns an object that provides iterators over the keys associated with EnumerationArrayType. More...
 
const char * getErrorCodeString (int errorcode)
 Returns a short string description of an error code. More...
 
void printFatalErrorMessage (FILE *fp, const std::exception &ex)
 Formats a standard fatal error message for reporting an exception. More...
 
std::string formatExceptionMessageToString (const std::exception &ex)
 Formats an error message for reporting an exception. More...
 
void formatExceptionMessageToFile (FILE *fp, const std::exception &ex)
 Formats an error message for reporting an exception. More...
 
void formatExceptionMessageToWriter (TextWriter *writer, const std::exception &ex)
 Formats an error message for reporting an exception. More...
 
int processExceptionAtExit (const std::exception &ex)
 Handles an exception that is causing the program to terminate. More...
 
void processExceptionAsFatalError (const std::exception &ex)
 Helper function for terminating the program on an exception. More...
 
template<class Exception , class Tag , class T >
std::enable_if_t
< std::is_base_of
< GromacsException, Exception >
::value, Exception > 
operator<< (Exception ex, const ExceptionInfo< Tag, T > &item)
 Associates extra information with an exception. More...
 
void fclose_wrapper (FILE *fp)
 fclose wrapper to be used as unique_ptr deleter
 
IFileInputRedirectordefaultFileInputRedirector ()
 Returns default implementation for IFileInputRedirector. More...
 
IFileOutputRedirectordefaultFileOutputRedirector ()
 Returns default implementation for IFileOutputRedirector. More...
 
const DataFileFindergetLibraryFileFinder ()
 Gets a finder for locating data files from share/top/. More...
 
void setLibraryFileFinder (const DataFileFinder *finder)
 Sets a finder for location data files from share/top/. More...
 
std::string findLibraryFile (const std::string &filename, bool bAddCWD=true, bool bFatal=true)
 Finds full path for a library file. More...
 
std::string findLibraryFile (const char *filename, bool bAddCWD=true, bool bFatal=true)
 Finds full path for a library file. More...
 
FilePtr openLibraryFile (const std::string &filename, bool bAddCWD=true, bool bFatal=true)
 Opens a library file for reading in an RAII-style FILE handle. More...
 
FilePtr openLibraryFile (const char *filename, bool bAddCWD=true, bool bFatal=true)
 Opens a library file for reading in an RAII-style FILE handle. More...
 
IKeyValueTreeErrorHandler * defaultKeyValueTreeErrorHandler ()
 Returns a default IKeyValueTreeErrorHandler that throws on first exception.
 
void init (int *argc, char ***argv)
 Initializes the GROMACS library. More...
 
void finalize ()
 Deinitializes the GROMACS library. More...
 
void dumpKeyValueTree (TextWriter *writer, const KeyValueTreeObject &tree)
 Writes a human-readable representation of the tree with given writer. More...
 
void compareKeyValueTrees (TextWriter *writer, const KeyValueTreeObject &tree1, const KeyValueTreeObject &tree2, real ftol, real abstol)
 Compares two KeyValueTrees and prints any differences.
 
KeyValueTreePath operator+ (const KeyValueTreePath &a, const KeyValueTreePath &b)
 Combines two paths as with KeyValueTreePath::append().
 
KeyValueTreePath operator+ (const KeyValueTreePath &a, const std::string &b)
 Combines an element to a path as with KeyValueTreePath::append().
 
static std::string simpleValueToString (const KeyValueTreeValue &value)
 Helper function to format a simple KeyValueTreeValue.
 
void writeKeyValueTreeAsMdp (TextWriter *writer, const KeyValueTreeObject &tree)
 Write a flat key-value tree to writer in mdp style. More...
 
void serializeKeyValueTree (const KeyValueTreeObject &root, ISerializer *serializer)
 Serializes a KeyValueTreeObject with given serializer.
 
KeyValueTreeObject deserializeKeyValueTree (ISerializer *serializer)
 Deserializes a KeyValueTreeObject from a given serializer.
 
void niceHeader (TextWriter *writer, const char *fn, char commentChar)
 Prints creation time stamp and user information into a string as comments, and returns it. More...
 
void MPI_Comm_free_wrapper (MPI_Comm *comm)
 Wrapper function for RAII-style cleanup. More...
 
const IProgramContextgetProgramContext ()
 Returns the global IProgramContext instance. More...
 
void setProgramContext (const IProgramContext *context)
 Sets the global IProgramContext instance. More...
 
bool boolFromString (const char *str)
 Parses a boolean from a string. More...
 
int intFromString (const char *str)
 Parses an integer from a string. More...
 
int64_t int64FromString (const char *str)
 Parses a 64-bit integer from a string. More...
 
float floatFromString (const char *str)
 Parses a float value from a string. More...
 
double doubleFromString (const char *str)
 Parses a double value from a string. More...
 
template<typename T >
static T fromString (const char *str)
 Parses a value from a string to a given type. More...
 
template<typename T >
static T fromString (const std::string &str)
 Parses a value from a string to a given type. More...
 
template<typename T >
static T fromStdString (const std::string &str)
 Parses a value from a string to a given type. More...
 
template<>
bool fromString< bool > (const char *str)
 Implementation for boolean values.
 
template<>
int fromString< int > (const char *str)
 Implementation for integer values.
 
template<>
int64_t fromString< int64_t > (const char *str)
 Implementation for 64-bit integer values.
 
template<>
float fromString< float > (const char *str)
 Implementation for float values.
 
template<>
double fromString< double > (const char *str)
 Implementation for double values.
 
static const char * boolToString (bool value)
 Converts a boolean to a "true"/"false" string. More...
 
static std::string intToString (int t)
 Returns a string containing the value of t. More...
 
static std::string int64ToString (int64_t t)
 Returns a string containing the value of t. More...
 
static std::string doubleToString (double t)
 Returns a string containing the value of t. More...
 
std::size_t countWords (const char *s)
 Returns number of space-separated words in zero-terminated char ptr. More...
 
std::size_t countWords (const std::string &str)
 Returns the number of space-separated words in a string object. More...
 
bool endsWith (const char *str, const char *suffix)
 Tests whether a string ends with another string. More...
 
std::string stripSuffixIfPresent (const std::string &str, const char *suffix)
 Removes a suffix from a string. More...
 
std::string stripString (const std::string &str)
 Removes leading and trailing whitespace from a string. More...
 
std::string formatString (const char *fmt,...)
 Formats a string (snprintf() wrapper). More...
 
std::string formatStringV (const char *fmt, va_list ap)
 Formats a string (vsnprintf() wrapper). More...
 
std::vector< std::string > splitString (const std::string &str)
 Splits a string to whitespace separated tokens. More...
 
std::vector< std::string > splitDelimitedString (const std::string &str, char delim)
 Splits a string to tokens separated by a given delimiter. More...
 
std::vector< std::string > splitAndTrimDelimitedString (const std::string &str, char delim)
 Splits str to tokens separated by delimiter delim. Removes leading and trailing whitespace from those strings with std::isspace. More...
 
std::string replaceAll (const std::string &input, const char *from, const char *to)
 Replace all occurrences of a string with another string. More...
 
std::string replaceAll (const std::string &input, const std::string &from, const std::string &to)
 Replace all occurrences of a string with another string. More...
 
std::string replaceAllWords (const std::string &input, const char *from, const char *to)
 Replace whole words with others. More...
 
std::string replaceAllWords (const std::string &input, const std::string &from, const std::string &to)
 Replace whole words with others. More...
 
bool equalCaseInsensitive (const std::string &source, const std::string &target)
 Return whether two strings are equal, ignoring case. More...
 
bool equalCaseInsensitive (const std::string &source, const std::string &target, size_t maxLengthOfComparison)
 Checks if at most maxLengthOfComparison characters of two strings match case insensitive. More...
 
static bool isNullOrEmpty (const char *str)
 Tests whether a string is null or empty. More...
 
static bool startsWith (const std::string &str, const std::string &prefix)
 Tests whether a string starts with another string. More...
 
static bool startsWith (const char *str, const char *prefix)
 Tests whether a string starts with another string. More...
 
static bool endsWith (const std::string &str, const char *suffix)
 Tests whether a string ends with another string. More...
 
static bool contains (const std::string &str, const char *substr)
 Tests whether a string contains another as a substring. More...
 
static bool contains (const std::string &str, const std::string &substr)
 Tests whether a string contains another as a substring. More...
 
static bool endsWith (const std::string &str, const std::string &suffix)
 Tests whether a string ends with another string. More...
 
template<typename InputIterator , typename FormatterType >
std::string formatAndJoin (InputIterator begin, InputIterator end, const char *separator, const FormatterType &formatter)
 Formats all the range as strings, and then joins them with a separator in between. More...
 
template<typename ContainerType , typename FormatterType >
std::string formatAndJoin (const ContainerType &container, const char *separator, const FormatterType &formatter)
 Formats all elements of the container as strings, and then joins them with a separator in between. More...
 
template<typename InputIterator >
std::string joinStrings (InputIterator begin, InputIterator end, const char *separator)
 Joins strings from a range with a separator in between. More...
 
template<typename ContainerType >
std::string joinStrings (const ContainerType &container, const char *separator)
 Joins strings from a container with a separator in between. More...
 
template<size_t count>
std::string joinStrings (const char *const (&array)[count], const char *separator)
 Joins strings from an array with a separator in between. More...
 
template<class T >
void free_wrapper (T *p)
 Wrapper of standard library free(), to be used as unique_cptr deleter for memory allocated by malloc, e.g. by an external library such as TNG.
 
template<class T >
void sfree_wrapper (T *p)
 sfree wrapper to be used as unique_cptr deleter
 
template<typename T , typename D >
std::unique_ptr< T, D > create_unique_with_deleter (T *t, D d)
 Create unique_ptr with any deleter function or lambda.
 
int gmx_mdrun (int argc, char *argv[])
 Implements C-style main function for mdrun.
 
template<typename T >
std::remove_const_t< T > norm (T *v)
 Forward operations on C Array style vectors to C implementations. More...
 
template<typename T >
std::remove_const_t< T > norm2 (T *v)
 
Constant width-4 double precision SIMD types and instructions
static Simd4Double gmx_simdcall load4 (const double *m)
 Load 4 double values from aligned memory into SIMD4 variable. More...
 
static void gmx_simdcall store4 (double *m, Simd4Double a)
 Store the contents of SIMD4 double to aligned memory m. More...
 
static Simd4Double gmx_simdcall load4U (const double *m)
 Load SIMD4 double from unaligned memory. More...
 
static void gmx_simdcall store4U (double *m, Simd4Double a)
 Store SIMD4 double to unaligned memory. More...
 
static Simd4Double gmx_simdcall simd4SetZeroD ()
 Set all SIMD4 double elements to 0. More...
 
static Simd4Double gmx_simdcall operator& (Simd4Double a, Simd4Double b)
 Bitwise and for two SIMD4 double variables. More...
 
static Simd4Double gmx_simdcall andNot (Simd4Double a, Simd4Double b)
 Bitwise andnot for two SIMD4 double variables. c=(~a) & b. More...
 
static Simd4Double gmx_simdcall operator| (Simd4Double a, Simd4Double b)
 Bitwise or for two SIMD4 doubles. More...
 
static Simd4Double gmx_simdcall operator^ (Simd4Double a, Simd4Double b)
 Bitwise xor for two SIMD4 double variables. More...
 
static Simd4Double gmx_simdcall operator+ (Simd4Double a, Simd4Double b)
 Add two double SIMD4 variables. More...
 
static Simd4Double gmx_simdcall operator- (Simd4Double a, Simd4Double b)
 Subtract two SIMD4 variables. More...
 
static Simd4Double gmx_simdcall operator- (Simd4Double a)
 SIMD4 floating-point negate. More...
 
static Simd4Double gmx_simdcall operator* (Simd4Double a, Simd4Double b)
 Multiply two SIMD4 variables. More...
 
static Simd4Double gmx_simdcall fma (Simd4Double a, Simd4Double b, Simd4Double c)
 SIMD4 Fused-multiply-add. Result is a*b+c. More...
 
static Simd4Double gmx_simdcall fms (Simd4Double a, Simd4Double b, Simd4Double c)
 SIMD4 Fused-multiply-subtract. Result is a*b-c. More...
 
static Simd4Double gmx_simdcall fnma (Simd4Double a, Simd4Double b, Simd4Double c)
 SIMD4 Fused-negated-multiply-add. Result is -a*b+c. More...
 
static Simd4Double gmx_simdcall fnms (Simd4Double a, Simd4Double b, Simd4Double c)
 SIMD4 Fused-negated-multiply-subtract. Result is -a*b-c. More...
 
static Simd4Double gmx_simdcall rsqrt (Simd4Double x)
 SIMD4 1.0/sqrt(x) lookup. More...
 
static Simd4Double gmx_simdcall abs (Simd4Double a)
 SIMD4 Floating-point abs(). More...
 
static Simd4Double gmx_simdcall max (Simd4Double a, Simd4Double b)
 Set each SIMD4 element to the largest from two variables. More...
 
static Simd4Double gmx_simdcall min (Simd4Double a, Simd4Double b)
 Set each SIMD4 element to the largest from two variables. More...
 
static Simd4Double gmx_simdcall round (Simd4Double a)
 SIMD4 Round to nearest integer value (in floating-point format). More...
 
static Simd4Double gmx_simdcall trunc (Simd4Double a)
 Truncate SIMD4, i.e. round towards zero - common hardware instruction. More...
 
static double gmx_simdcall dotProduct (Simd4Double a, Simd4Double b)
 Return dot product of two double precision SIMD4 variables. More...
 
static void gmx_simdcall transpose (Simd4Double *v0, Simd4Double *v1, Simd4Double *v2, Simd4Double *v3)
 SIMD4 double transpose. More...
 
static Simd4DBool gmx_simdcall operator== (Simd4Double a, Simd4Double b)
 a==b for SIMD4 double More...
 
static Simd4DBool gmx_simdcall operator!= (Simd4Double a, Simd4Double b)
 a!=b for SIMD4 double More...
 
static Simd4DBool gmx_simdcall operator< (Simd4Double a, Simd4Double b)
 a<b for SIMD4 double More...
 
static Simd4DBool gmx_simdcall operator<= (Simd4Double a, Simd4Double b)
 a<=b for SIMD4 double. More...
 
static Simd4DBool gmx_simdcall operator&& (Simd4DBool a, Simd4DBool b)
 Logical and on single precision SIMD4 booleans. More...
 
static Simd4DBool gmx_simdcall operator|| (Simd4DBool a, Simd4DBool b)
 Logical or on single precision SIMD4 booleans. More...
 
static bool gmx_simdcall anyTrue (Simd4DBool a)
 Returns non-zero if any of the boolean in SIMD4 a is True, otherwise 0. More...
 
static Simd4Double gmx_simdcall selectByMask (Simd4Double a, Simd4DBool mask)
 Select from single precision SIMD4 variable where boolean is true. More...
 
static Simd4Double gmx_simdcall selectByNotMask (Simd4Double a, Simd4DBool mask)
 Select from single precision SIMD4 variable where boolean is false. More...
 
static Simd4Double gmx_simdcall blend (Simd4Double a, Simd4Double b, Simd4DBool sel)
 Vector-blend SIMD4 selection. More...
 
static double gmx_simdcall reduce (Simd4Double a)
 Return sum of all elements in SIMD4 double variable. More...
 
Constant width-4 single precision SIMD types and instructions
static Simd4Float gmx_simdcall load4 (const float *m)
 Load 4 float values from aligned memory into SIMD4 variable. More...
 
static void gmx_simdcall store4 (float *m, Simd4Float a)
 Store the contents of SIMD4 float to aligned memory m. More...
 
static Simd4Float gmx_simdcall load4U (const float *m)
 Load SIMD4 float from unaligned memory. More...
 
static void gmx_simdcall store4U (float *m, Simd4Float a)
 Store SIMD4 float to unaligned memory. More...
 
static Simd4Float gmx_simdcall simd4SetZeroF ()
 Set all SIMD4 float elements to 0. More...
 
static Simd4Float gmx_simdcall operator& (Simd4Float a, Simd4Float b)
 Bitwise and for two SIMD4 float variables. More...
 
static Simd4Float gmx_simdcall andNot (Simd4Float a, Simd4Float b)
 Bitwise andnot for two SIMD4 float variables. c=(~a) & b. More...
 
static Simd4Float gmx_simdcall operator| (Simd4Float a, Simd4Float b)
 Bitwise or for two SIMD4 floats. More...
 
static Simd4Float gmx_simdcall operator^ (Simd4Float a, Simd4Float b)
 Bitwise xor for two SIMD4 float variables. More...
 
static Simd4Float gmx_simdcall operator+ (Simd4Float a, Simd4Float b)
 Add two float SIMD4 variables. More...
 
static Simd4Float gmx_simdcall operator- (Simd4Float a, Simd4Float b)
 Subtract two SIMD4 variables. More...
 
static Simd4Float gmx_simdcall operator- (Simd4Float a)
 SIMD4 floating-point negate. More...
 
static Simd4Float gmx_simdcall operator* (Simd4Float a, Simd4Float b)
 Multiply two SIMD4 variables. More...
 
static Simd4Float gmx_simdcall fma (Simd4Float a, Simd4Float b, Simd4Float c)
 SIMD4 Fused-multiply-add. Result is a*b+c. More...
 
static Simd4Float gmx_simdcall fms (Simd4Float a, Simd4Float b, Simd4Float c)
 SIMD4 Fused-multiply-subtract. Result is a*b-c. More...
 
static Simd4Float gmx_simdcall fnma (Simd4Float a, Simd4Float b, Simd4Float c)
 SIMD4 Fused-negated-multiply-add. Result is -a*b+c. More...
 
static Simd4Float gmx_simdcall fnms (Simd4Float a, Simd4Float b, Simd4Float c)
 SIMD4 Fused-negated-multiply-subtract. Result is -a*b-c. More...
 
static Simd4Float gmx_simdcall rsqrt (Simd4Float x)
 SIMD4 1.0/sqrt(x) lookup. More...
 
static Simd4Float gmx_simdcall abs (Simd4Float a)
 SIMD4 Floating-point fabs(). More...
 
static Simd4Float gmx_simdcall max (Simd4Float a, Simd4Float b)
 Set each SIMD4 element to the largest from two variables. More...
 
static Simd4Float gmx_simdcall min (Simd4Float a, Simd4Float b)
 Set each SIMD4 element to the largest from two variables. More...
 
static Simd4Float gmx_simdcall round (Simd4Float a)
 SIMD4 Round to nearest integer value (in floating-point format). More...
 
static Simd4Float gmx_simdcall trunc (Simd4Float a)
 Truncate SIMD4, i.e. round towards zero - common hardware instruction. More...
 
static float gmx_simdcall dotProduct (Simd4Float a, Simd4Float b)
 Return dot product of two single precision SIMD4 variables. More...
 
static void gmx_simdcall transpose (Simd4Float *v0, Simd4Float *v1, Simd4Float *v2, Simd4Float *v3)
 SIMD4 float transpose. More...
 
static Simd4FBool gmx_simdcall operator== (Simd4Float a, Simd4Float b)
 a==b for SIMD4 float More...
 
static Simd4FBool gmx_simdcall operator!= (Simd4Float a, Simd4Float b)
 a!=b for SIMD4 float More...
 
static Simd4FBool gmx_simdcall operator< (Simd4Float a, Simd4Float b)
 a<b for SIMD4 float More...
 
static Simd4FBool gmx_simdcall operator<= (Simd4Float a, Simd4Float b)
 a<=b for SIMD4 float. More...
 
static Simd4FBool gmx_simdcall operator&& (Simd4FBool a, Simd4FBool b)
 Logical and on single precision SIMD4 booleans. More...
 
static Simd4FBool gmx_simdcall operator|| (Simd4FBool a, Simd4FBool b)
 Logical or on single precision SIMD4 booleans. More...
 
static bool gmx_simdcall anyTrue (Simd4FBool a)
 Returns non-zero if any of the boolean in SIMD4 a is True, otherwise 0. More...
 
static Simd4Float gmx_simdcall selectByMask (Simd4Float a, Simd4FBool mask)
 Select from single precision SIMD4 variable where boolean is true. More...
 
static Simd4Float gmx_simdcall selectByNotMask (Simd4Float a, Simd4FBool mask)
 Select from single precision SIMD4 variable where boolean is false. More...
 
static Simd4Float gmx_simdcall blend (Simd4Float a, Simd4Float b, Simd4FBool sel)
 Vector-blend SIMD4 selection. More...
 
static float gmx_simdcall reduce (Simd4Float a)
 Return sum of all elements in SIMD4 float variable. More...
 
SIMD implementation load/store operations for double precision floating point
static SimdDouble gmx_simdcall simdLoad (const double *m, SimdDoubleTag={})
 Load GMX_SIMD_DOUBLE_WIDTH numbers from aligned memory. More...
 
static void gmx_simdcall store (double *m, SimdDouble a)
 Store the contents of SIMD double variable to aligned memory m. More...
 
static SimdDouble gmx_simdcall simdLoadU (const double *m, SimdDoubleTag={})
 Load SIMD double from unaligned memory. More...
 
static void gmx_simdcall storeU (double *m, SimdDouble a)
 Store SIMD double to unaligned memory. More...
 
static SimdDouble gmx_simdcall setZeroD ()
 Set all SIMD double variable elements to 0.0. More...
 
SIMD implementation load/store operations for integers (corresponding to double)
static SimdDInt32 gmx_simdcall simdLoad (const std::int32_t *m, SimdDInt32Tag)
 Load aligned SIMD integer data, width corresponds to gmx::SimdDouble. More...
 
static void gmx_simdcall store (std::int32_t *m, SimdDInt32 a)
 Store aligned SIMD integer data, width corresponds to gmx::SimdDouble. More...
 
static SimdDInt32 gmx_simdcall simdLoadU (const std::int32_t *m, SimdDInt32Tag)
 Load unaligned integer SIMD data, width corresponds to gmx::SimdDouble. More...
 
static void gmx_simdcall storeU (std::int32_t *m, SimdDInt32 a)
 Store unaligned SIMD integer data, width corresponds to gmx::SimdDouble. More...
 
static SimdDInt32 gmx_simdcall setZeroDI ()
 Set all SIMD (double) integer variable elements to 0. More...
 
template<int index>
static std::int32_t gmx_simdcall extract (SimdDInt32 a)
 Extract element with index i from gmx::SimdDInt32. More...
 
SIMD implementation double precision floating-point bitwise logical operations
static SimdDouble gmx_simdcall operator& (SimdDouble a, SimdDouble b)
 Bitwise and for two SIMD double variables. More...
 
static SimdDouble gmx_simdcall andNot (SimdDouble a, SimdDouble b)
 Bitwise andnot for SIMD double. More...
 
static SimdDouble gmx_simdcall operator| (SimdDouble a, SimdDouble b)
 Bitwise or for SIMD double. More...
 
static SimdDouble gmx_simdcall operator^ (SimdDouble a, SimdDouble b)
 Bitwise xor for SIMD double. More...
 
SIMD implementation double precision floating-point arithmetics
static SimdDouble gmx_simdcall operator+ (SimdDouble a, SimdDouble b)
 Add two double SIMD variables. More...
 
static SimdDouble gmx_simdcall operator- (SimdDouble a, SimdDouble b)
 Subtract two double SIMD variables. More...
 
static SimdDouble gmx_simdcall operator- (SimdDouble a)
 SIMD double precision negate. More...
 
static SimdDouble gmx_simdcall operator* (SimdDouble a, SimdDouble b)
 Multiply two double SIMD variables. More...
 
static SimdDouble gmx_simdcall fma (SimdDouble a, SimdDouble b, SimdDouble c)
 SIMD double Fused-multiply-add. Result is a*b+c. More...
 
static SimdDouble gmx_simdcall fms (SimdDouble a, SimdDouble b, SimdDouble c)
 SIMD double Fused-multiply-subtract. Result is a*b-c. More...
 
static SimdDouble gmx_simdcall fnma (SimdDouble a, SimdDouble b, SimdDouble c)
 SIMD double Fused-negated-multiply-add. Result is -a*b+c. More...
 
static SimdDouble gmx_simdcall fnms (SimdDouble a, SimdDouble b, SimdDouble c)
 SIMD double Fused-negated-multiply-subtract. Result is -a*b-c. More...
 
static SimdDouble gmx_simdcall rsqrt (SimdDouble x)
 double SIMD 1.0/sqrt(x) lookup. More...
 
static SimdDouble gmx_simdcall rcp (SimdDouble x)
 SIMD double 1.0/x lookup. More...
 
static SimdDouble gmx_simdcall maskAdd (SimdDouble a, SimdDouble b, SimdDBool m)
 Add two double SIMD variables, masked version. More...
 
static SimdDouble gmx_simdcall maskzMul (SimdDouble a, SimdDouble b, SimdDBool m)
 Multiply two double SIMD variables, masked version. More...
 
static SimdDouble gmx_simdcall maskzFma (SimdDouble a, SimdDouble b, SimdDouble c, SimdDBool m)
 SIMD double fused multiply-add, masked version. More...
 
static SimdDouble gmx_simdcall maskzRsqrt (SimdDouble x, SimdDBool m)
 SIMD double 1.0/sqrt(x) lookup, masked version. More...
 
static SimdDouble gmx_simdcall maskzRcp (SimdDouble x, SimdDBool m)
 SIMD double 1.0/x lookup, masked version. More...
 
static SimdDouble gmx_simdcall abs (SimdDouble a)
 SIMD double floating-point fabs(). More...
 
static SimdDouble gmx_simdcall max (SimdDouble a, SimdDouble b)
 Set each SIMD double element to the largest from two variables. More...
 
static SimdDouble gmx_simdcall min (SimdDouble a, SimdDouble b)
 Set each SIMD double element to the smallest from two variables. More...
 
static SimdDouble gmx_simdcall round (SimdDouble a)
 SIMD double round to nearest integer value (in floating-point format). More...
 
static SimdDouble gmx_simdcall trunc (SimdDouble a)
 Truncate SIMD double, i.e. round towards zero - common hardware instruction. More...
 
static SimdDouble gmx_simdcall frexp (SimdDouble value, SimdDInt32 *exponent)
 Extract (integer) exponent and fraction from double precision SIMD. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static SimdDouble gmx_simdcall ldexp (SimdDouble value, SimdDInt32 exponent)
 Multiply a SIMD double value by the number 2 raised to an exp power. More...
 
static double gmx_simdcall reduce (SimdDouble a)
 Return sum of all elements in SIMD double variable. More...
 
SIMD implementation double precision floating-point comparison, boolean, selection.
static SimdDBool gmx_simdcall operator== (SimdDouble a, SimdDouble b)
 SIMD a==b for double SIMD. More...
 
static SimdDBool gmx_simdcall operator!= (SimdDouble a, SimdDouble b)
 SIMD a!=b for double SIMD. More...
 
static SimdDBool gmx_simdcall operator< (SimdDouble a, SimdDouble b)
 SIMD a<b for double SIMD. More...
 
static SimdDBool gmx_simdcall operator<= (SimdDouble a, SimdDouble b)
 SIMD a<=b for double SIMD. More...
 
static SimdDBool gmx_simdcall testBits (SimdDouble a)
 Return true if any bits are set in the single precision SIMD. More...
 
static SimdDBool gmx_simdcall operator&& (SimdDBool a, SimdDBool b)
 Logical and on double precision SIMD booleans. More...
 
static SimdDBool gmx_simdcall operator|| (SimdDBool a, SimdDBool b)
 Logical or on double precision SIMD booleans. More...
 
static bool gmx_simdcall anyTrue (SimdDBool a)
 Returns non-zero if any of the boolean in SIMD a is True, otherwise 0. More...
 
static SimdDouble gmx_simdcall selectByMask (SimdDouble a, SimdDBool mask)
 Select from double precision SIMD variable where boolean is true. More...
 
static SimdDouble gmx_simdcall selectByNotMask (SimdDouble a, SimdDBool mask)
 Select from double precision SIMD variable where boolean is false. More...
 
static SimdDouble gmx_simdcall blend (SimdDouble a, SimdDouble b, SimdDBool sel)
 Vector-blend SIMD double selection. More...
 
SIMD implementation integer (corresponding to double) bitwise logical operations
static SimdDInt32 gmx_simdcall operator& (SimdDInt32 a, SimdDInt32 b)
 Integer SIMD bitwise and. More...
 
static SimdDInt32 gmx_simdcall andNot (SimdDInt32 a, SimdDInt32 b)
 Integer SIMD bitwise not/complement. More...
 
static SimdDInt32 gmx_simdcall operator| (SimdDInt32 a, SimdDInt32 b)
 Integer SIMD bitwise or. More...
 
static SimdDInt32 gmx_simdcall operator^ (SimdDInt32 a, SimdDInt32 b)
 Integer SIMD bitwise xor. More...
 
SIMD implementation integer (corresponding to double) arithmetics
static SimdDInt32 gmx_simdcall operator+ (SimdDInt32 a, SimdDInt32 b)
 Add SIMD integers. More...
 
static SimdDInt32 gmx_simdcall operator- (SimdDInt32 a, SimdDInt32 b)
 Subtract SIMD integers. More...
 
static SimdDInt32 gmx_simdcall operator* (SimdDInt32 a, SimdDInt32 b)
 Multiply SIMD integers. More...
 
SIMD implementation integer (corresponding to double) comparisons, boolean selection
static SimdDIBool gmx_simdcall operator== (SimdDInt32 a, SimdDInt32 b)
 Equality comparison of two integers corresponding to double values. More...
 
static SimdDIBool gmx_simdcall operator< (SimdDInt32 a, SimdDInt32 b)
 Less-than comparison of two SIMD integers corresponding to double values. More...
 
static SimdDIBool gmx_simdcall testBits (SimdDInt32 a)
 Check if any bit is set in each element. More...
 
static SimdDIBool gmx_simdcall operator&& (SimdDIBool a, SimdDIBool b)
 Logical AND on SimdDIBool. More...
 
static SimdDIBool gmx_simdcall operator|| (SimdDIBool a, SimdDIBool b)
 Logical OR on SimdDIBool. More...
 
static bool gmx_simdcall anyTrue (SimdDIBool a)
 Returns true if any of the boolean in x is True, otherwise 0. More...
 
static SimdDInt32 gmx_simdcall selectByMask (SimdDInt32 a, SimdDIBool mask)
 Select from gmx::SimdDInt32 variable where boolean is true. More...
 
static SimdDInt32 gmx_simdcall selectByNotMask (SimdDInt32 a, SimdDIBool mask)
 Select from gmx::SimdDInt32 variable where boolean is false. More...
 
static SimdDInt32 gmx_simdcall blend (SimdDInt32 a, SimdDInt32 b, SimdDIBool sel)
 Vector-blend SIMD integer selection. More...
 
SIMD implementation conversion operations
static SimdDInt32 gmx_simdcall cvtR2I (SimdDouble a)
 Round double precision floating point to integer. More...
 
static SimdDInt32 gmx_simdcall cvttR2I (SimdDouble a)
 Truncate double precision floating point to integer. More...
 
static SimdDouble gmx_simdcall cvtI2R (SimdDInt32 a)
 Convert integer to double precision floating point. More...
 
static SimdDIBool gmx_simdcall cvtB2IB (SimdDBool a)
 Convert from double precision boolean to corresponding integer boolean. More...
 
static SimdDBool gmx_simdcall cvtIB2B (SimdDIBool a)
 Convert from integer boolean to corresponding double precision boolean. More...
 
static SimdDouble gmx_simdcall cvtF2D (SimdFloat f)
 Convert SIMD float to double. More...
 
static SimdFloat gmx_simdcall cvtD2F (SimdDouble d)
 Convert SIMD double to float. More...
 
static void gmx_simdcall cvtF2DD (SimdFloat f, SimdDouble *d0, SimdDouble *d1)
 Convert SIMD float to double. More...
 
static SimdFloat gmx_simdcall cvtDD2F (SimdDouble d0, SimdDouble d1)
 Convert SIMD double to float. More...
 
static SimdFInt32 gmx_simdcall cvtR2I (SimdFloat a)
 Round single precision floating point to integer. More...
 
static SimdFInt32 gmx_simdcall cvttR2I (SimdFloat a)
 Truncate single precision floating point to integer. More...
 
static SimdFloat gmx_simdcall cvtI2R (SimdFInt32 a)
 Convert integer to single precision floating point. More...
 
static SimdFIBool gmx_simdcall cvtB2IB (SimdFBool a)
 Convert from single precision boolean to corresponding integer boolean. More...
 
static SimdFBool gmx_simdcall cvtIB2B (SimdFIBool a)
 Convert from integer boolean to corresponding single precision boolean. More...
 
SIMD implementation load/store operations for single precision floating point
static SimdFloat gmx_simdcall simdLoad (const float *m, SimdFloatTag={})
 Load GMX_SIMD_FLOAT_WIDTH float numbers from aligned memory. More...
 
static void gmx_simdcall store (float *m, SimdFloat a)
 Store the contents of SIMD float variable to aligned memory m. More...
 
static SimdFloat gmx_simdcall simdLoadU (const float *m, SimdFloatTag={})
 Load SIMD float from unaligned memory. More...
 
static void gmx_simdcall storeU (float *m, SimdFloat a)
 Store SIMD float to unaligned memory. More...
 
static SimdFloat gmx_simdcall setZeroF ()
 Set all SIMD float variable elements to 0.0. More...
 
SIMD implementation load/store operations for integers (corresponding to float)
static SimdFInt32 gmx_simdcall simdLoad (const std::int32_t *m, SimdFInt32Tag)
 Load aligned SIMD integer data, width corresponds to gmx::SimdFloat. More...
 
static void gmx_simdcall store (std::int32_t *m, SimdFInt32 a)
 Store aligned SIMD integer data, width corresponds to gmx::SimdFloat. More...
 
static SimdFInt32 gmx_simdcall simdLoadU (const std::int32_t *m, SimdFInt32Tag)
 Load unaligned integer SIMD data, width corresponds to gmx::SimdFloat. More...
 
static void gmx_simdcall storeU (std::int32_t *m, SimdFInt32 a)
 Store unaligned SIMD integer data, width corresponds to gmx::SimdFloat. More...
 
static SimdFInt32 gmx_simdcall setZeroFI ()
 Set all SIMD (float) integer variable elements to 0. More...
 
template<int index>
static std::int32_t gmx_simdcall extract (SimdFInt32 a)
 Extract element with index i from gmx::SimdFInt32. More...
 
SIMD implementation single precision floating-point bitwise logical operations
static SimdFloat gmx_simdcall operator& (SimdFloat a, SimdFloat b)
 Bitwise and for two SIMD float variables. More...
 
static SimdFloat gmx_simdcall andNot (SimdFloat a, SimdFloat b)
 Bitwise andnot for SIMD float. More...
 
static SimdFloat gmx_simdcall operator| (SimdFloat a, SimdFloat b)
 Bitwise or for SIMD float. More...
 
static SimdFloat gmx_simdcall operator^ (SimdFloat a, SimdFloat b)
 Bitwise xor for SIMD float. More...
 
SIMD implementation single precision floating-point arithmetics
static SimdFloat gmx_simdcall operator+ (SimdFloat a, SimdFloat b)
 Add two float SIMD variables. More...
 
static SimdFloat gmx_simdcall operator- (SimdFloat a, SimdFloat b)
 Subtract two float SIMD variables. More...
 
static SimdFloat gmx_simdcall operator- (SimdFloat a)
 SIMD single precision negate. More...
 
static SimdFloat gmx_simdcall operator* (SimdFloat a, SimdFloat b)
 Multiply two float SIMD variables. More...
 
static SimdFloat gmx_simdcall fma (SimdFloat a, SimdFloat b, SimdFloat c)
 SIMD float Fused-multiply-add. Result is a*b+c. More...
 
static SimdFloat gmx_simdcall fms (SimdFloat a, SimdFloat b, SimdFloat c)
 SIMD float Fused-multiply-subtract. Result is a*b-c. More...
 
static SimdFloat gmx_simdcall fnma (SimdFloat a, SimdFloat b, SimdFloat c)
 SIMD float Fused-negated-multiply-add. Result is -a*b+c. More...
 
static SimdFloat gmx_simdcall fnms (SimdFloat a, SimdFloat b, SimdFloat c)
 SIMD float Fused-negated-multiply-subtract. Result is -a*b-c. More...
 
static SimdFloat gmx_simdcall rsqrt (SimdFloat x)
 SIMD float 1.0/sqrt(x) lookup. More...
 
static SimdFloat gmx_simdcall rcp (SimdFloat x)
 SIMD float 1.0/x lookup. More...
 
static SimdFloat gmx_simdcall maskAdd (SimdFloat a, SimdFloat b, SimdFBool m)
 Add two float SIMD variables, masked version. More...
 
static SimdFloat gmx_simdcall maskzMul (SimdFloat a, SimdFloat b, SimdFBool m)
 Multiply two float SIMD variables, masked version. More...
 
static SimdFloat gmx_simdcall maskzFma (SimdFloat a, SimdFloat b, SimdFloat c, SimdFBool m)
 SIMD float fused multiply-add, masked version. More...
 
static SimdFloat gmx_simdcall maskzRsqrt (SimdFloat x, SimdFBool m)
 SIMD float 1.0/sqrt(x) lookup, masked version. More...
 
static SimdFloat gmx_simdcall maskzRcp (SimdFloat x, SimdFBool m)
 SIMD float 1.0/x lookup, masked version. More...
 
static SimdFloat gmx_simdcall abs (SimdFloat a)
 SIMD float Floating-point abs(). More...
 
static SimdFloat gmx_simdcall max (SimdFloat a, SimdFloat b)
 Set each SIMD float element to the largest from two variables. More...
 
static SimdFloat gmx_simdcall min (SimdFloat a, SimdFloat b)
 Set each SIMD float element to the smallest from two variables. More...
 
static SimdFloat gmx_simdcall round (SimdFloat a)
 SIMD float round to nearest integer value (in floating-point format). More...
 
static SimdFloat gmx_simdcall trunc (SimdFloat a)
 Truncate SIMD float, i.e. round towards zero - common hardware instruction. More...
 
static SimdFloat gmx_simdcall frexp (SimdFloat value, SimdFInt32 *exponent)
 Extract (integer) exponent and fraction from single precision SIMD. More...
 
template<MathOptimization opt = MathOptimization::Safe>
static SimdFloat gmx_simdcall ldexp (SimdFloat value, SimdFInt32 exponent)
 Multiply a SIMD float value by the number 2 raised to an exp power. More...
 
static float gmx_simdcall reduce (SimdFloat a)
 Return sum of all elements in SIMD float variable. More...
 
SIMD implementation single precision floating-point comparisons, boolean, selection.
static SimdFBool gmx_simdcall operator== (SimdFloat a, SimdFloat b)
 SIMD a==b for single SIMD. More...
 
static SimdFBool gmx_simdcall operator!= (SimdFloat a, SimdFloat b)
 SIMD a!=b for single SIMD. More...
 
static SimdFBool gmx_simdcall operator< (SimdFloat a, SimdFloat b)
 SIMD a<b for single SIMD. More...
 
static SimdFBool gmx_simdcall operator<= (SimdFloat a, SimdFloat b)
 SIMD a<=b for single SIMD. More...
 
static SimdFBool gmx_simdcall testBits (SimdFloat a)
 Return true if any bits are set in the single precision SIMD. More...
 
static SimdFBool gmx_simdcall operator&& (SimdFBool a, SimdFBool b)
 Logical and on single precision SIMD booleans. More...
 
static SimdFBool gmx_simdcall operator|| (SimdFBool a, SimdFBool b)
 Logical or on single precision SIMD booleans. More...
 
static bool gmx_simdcall anyTrue (SimdFBool a)
 Returns non-zero if any of the boolean in SIMD a is True, otherwise 0. More...
 
static SimdFloat gmx_simdcall selectByMask (SimdFloat a, SimdFBool mask)
 Select from single precision SIMD variable where boolean is true. More...
 
static SimdFloat gmx_simdcall selectByNotMask (SimdFloat a, SimdFBool mask)
 Select from single precision SIMD variable where boolean is false. More...
 
static SimdFloat gmx_simdcall blend (SimdFloat a, SimdFloat b, SimdFBool sel)
 Vector-blend SIMD float selection. More...
 
SIMD implementation integer (corresponding to float) bitwise logical operations
static SimdFInt32 gmx_simdcall operator& (SimdFInt32 a, SimdFInt32 b)
 Integer SIMD bitwise and. More...
 
static SimdFInt32 gmx_simdcall andNot (SimdFInt32 a, SimdFInt32 b)
 Integer SIMD bitwise not/complement. More...
 
static SimdFInt32 gmx_simdcall operator| (SimdFInt32 a, SimdFInt32 b)
 Integer SIMD bitwise or. More...
 
static SimdFInt32 gmx_simdcall operator^ (SimdFInt32 a, SimdFInt32 b)
 Integer SIMD bitwise xor. More...
 
SIMD implementation integer (corresponding to float) arithmetics
static SimdFInt32 gmx_simdcall operator+ (SimdFInt32 a, SimdFInt32 b)
 Add SIMD integers. More...
 
static SimdFInt32 gmx_simdcall operator- (SimdFInt32 a, SimdFInt32 b)
 Subtract SIMD integers. More...
 
static SimdFInt32 gmx_simdcall operator* (SimdFInt32 a, SimdFInt32 b)
 Multiply SIMD integers. More...
 
SIMD implementation integer (corresponding to float) comparisons, boolean, selection
static SimdFIBool gmx_simdcall operator== (SimdFInt32 a, SimdFInt32 b)
 Equality comparison of two integers corresponding to float values. More...
 
static SimdFIBool gmx_simdcall operator< (SimdFInt32 a, SimdFInt32 b)
 Less-than comparison of two SIMD integers corresponding to float values. More...
 
static SimdFIBool gmx_simdcall testBits (SimdFInt32 a)
 Check if any bit is set in each element. More...
 
static SimdFIBool gmx_simdcall operator&& (SimdFIBool a, SimdFIBool b)
 Logical AND on SimdFIBool. More...
 
static SimdFIBool gmx_simdcall operator|| (SimdFIBool a, SimdFIBool b)
 Logical OR on SimdFIBool. More...
 
static bool gmx_simdcall anyTrue (SimdFIBool a)
 Returns true if any of the boolean in x is True, otherwise 0. More...
 
static SimdFInt32 gmx_simdcall selectByMask (SimdFInt32 a, SimdFIBool mask)
 Select from gmx::SimdFInt32 variable where boolean is true. More...
 
static SimdFInt32 gmx_simdcall selectByNotMask (SimdFInt32 a, SimdFIBool mask)
 Select from gmx::SimdFInt32 variable where boolean is false. More...
 
static SimdFInt32 gmx_simdcall blend (SimdFInt32 a, SimdFInt32 b, SimdFIBool sel)
 Vector-blend SIMD integer selection. More...
 
Higher-level SIMD utilities accessing partial (half-width) SIMD doubles.

See the single-precision versions for documentation. Since double precision is typically half the width of single, this double version is likely only useful with 512-bit and larger implementations.

static SimdDouble gmx_simdcall loadDualHsimd (const double *m0, const double *m1)
 Load low & high parts of SIMD double from different locations. More...
 
static SimdDouble gmx_simdcall loadDuplicateHsimd (const double *m)
 Load half-SIMD-width double data, spread to both halves. More...
 
static SimdDouble gmx_simdcall loadU1DualHsimd (const double *m)
 Load two doubles, spread 1st in low half, 2nd in high half. More...
 
static void gmx_simdcall storeDualHsimd (double *m0, double *m1, SimdDouble a)
 Store low & high parts of SIMD double to different locations. More...
 
static void gmx_simdcall incrDualHsimd (double *m0, double *m1, SimdDouble a)
 Add each half of SIMD variable to separate memory adresses. More...
 
static void gmx_simdcall decrHsimd (double *m, SimdDouble a)
 Add the two halves of a SIMD double, subtract the sum from half-SIMD-width consecutive doubles in memory. More...
 
template<int align>
static void gmx_simdcall gatherLoadTransposeHsimd (const double *base0, const double *base1, std::int32_t offset[], SimdDouble *v0, SimdDouble *v1)
 Load 2 consecutive doubles from each of GMX_SIMD_DOUBLE_WIDTH/2 offsets, transpose into SIMD double (low half from base0, high from base1). More...
 
static double gmx_simdcall reduceIncr4ReturnSumHsimd (double *m, SimdDouble v0, SimdDouble v1)
 Reduce the 4 half-SIMD-with doubles in 2 SIMD variables (sum halves), increment four consecutive doubles in memory, return sum. More...
 
static SimdDouble gmx_simdcall loadUNDuplicate4 (const double *m)
 Load N doubles and duplicate them 4 times each. More...
 
static SimdDouble gmx_simdcall load4DuplicateN (const double *m)
 Load 4 doubles and duplicate them N times each. More...
 
static SimdDouble gmx_simdcall loadU4NOffset (const double *m, int offset)
 Load doubles in blocks of 4 at fixed offsets. More...
 
Higher-level SIMD utilities accessing partial (half-width) SIMD floats.

These functions are optional. The are only useful for SIMD implementation where the width is 8 or larger, and where it would be inefficient to process 4*8, 8*8, or more, interactions in parallel.

Currently, only Intel provides very wide SIMD implementations, but these also come with excellent support for loading, storing, accessing and shuffling parts of the register in so-called 'lanes' of 4 bytes each. We can use this to load separate parts into the low/high halves of the register in the inner loop of the nonbonded kernel, which e.g. makes it possible to process 4*4 nonbonded interactions as a pattern of 2*8. We can also use implementations with width 16 or greater.

To make this more generic, when GMX_SIMD_HAVE_HSIMD_UTIL_REAL is 1, the SIMD implementation provides seven special routines that:

  • Load the low/high parts of a SIMD variable from different pointers
  • Load half the SIMD width from one pointer, and duplicate in low/high parts
  • Load two reals, put 1st one in all low elements, and 2nd in all high ones.
  • Store the low/high parts of a SIMD variable to different pointers
  • Subtract both SIMD halves from a single half-SIMD-width memory location.
  • Load aligned pairs (LJ parameters) from two base pointers, with a common offset list, and put these in the low/high SIMD halves.
  • Reduce each half of two SIMD registers (i.e., 4 parts in total), increment four adjacent memory positions, and return the total sum.

Remember: this is ONLY used when the native SIMD width is large. You will just waste time if you implement it for normal 16-byte SIMD architectures.

This is part of the new C++ SIMD interface, so these functions are only available when using C++. Since some Gromacs code reliying on the SIMD module is still C (not C++), we have kept the C-style naming for now - this will change once we are entirely C++.

static SimdFloat gmx_simdcall loadDualHsimd (const float *m0, const float *m1)
 Load low & high parts of SIMD float from different locations. More...
 
static SimdFloat gmx_simdcall loadDuplicateHsimd (const float *m)
 Load half-SIMD-width float data, spread to both halves. More...
 
static SimdFloat gmx_simdcall loadU1DualHsimd (const float *m)
 Load two floats, spread 1st in low half, 2nd in high half. More...
 
static void gmx_simdcall storeDualHsimd (float *m0, float *m1, SimdFloat a)
 Store low & high parts of SIMD float to different locations. More...
 
static void gmx_simdcall incrDualHsimd (float *m0, float *m1, SimdFloat a)
 Add each half of SIMD variable to separate memory adresses. More...
 
static void gmx_simdcall decrHsimd (float *m, SimdFloat a)
 Add the two halves of a SIMD float, subtract the sum from half-SIMD-width consecutive floats in memory. More...
 
template<int align>
static void gmx_simdcall gatherLoadTransposeHsimd (const float *base0, const float *base1, const std::int32_t offset[], SimdFloat *v0, SimdFloat *v1)
 Load 2 consecutive floats from each of GMX_SIMD_FLOAT_WIDTH/2 offsets, transpose into SIMD float (low half from base0, high from base1). More...
 
static float gmx_simdcall reduceIncr4ReturnSumHsimd (float *m, SimdFloat v0, SimdFloat v1)
 Reduce the 4 half-SIMD-with floats in 2 SIMD variables (sum halves), increment four consecutive floats in memory, return sum. More...
 
static SimdFloat gmx_simdcall loadUNDuplicate4 (const float *m)
 Load N floats and duplicate them 4 times each. More...
 
static SimdFloat gmx_simdcall load4DuplicateN (const float *m)
 Load 4 floats and duplicate them N times each. More...
 
static SimdFloat gmx_simdcall loadU4NOffset (const float *m, int offset)
 Load floats in blocks of 4 at fixed offsets. More...
 
Single precision SIMD math functions
Note
In most cases you should use the real-precision functions instead.
static SimdFloat gmx_simdcall