Gromacs  2016.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Classes | Typedefs | Enumerations | Functions | Variables
gmx Namespace Reference

Description

Generic GROMACS namespace.

Declares the integrator for test particle insertion.

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
Berk Hess hess@.nosp@m.kth..nosp@m.se

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  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  ConstArrayRef
 STL-like container for non-mutable interface to a C array (or part of a std::vector). 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  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...
 
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...
 
class  BasicVector
 C++ class for 3D vectors. More...
 
class  ArrayRef
 STL-like container for an interface to a C array (or part of a std::vector). 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  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  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  IOptionManager
 Base class for option managers. More...
 
class  Options
 Collection of options. More...
 
class  TimeUnitManager
 Provides common functionality for time unit conversions. More...
 
class  TimeUnitBehavior
 Options behavior to add a time unit option. 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  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...
 
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  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  TopologyInformation
 Topology information passed to a trajectory analysis module. More...
 
class  TrajectoryAnalysisCommandLineRunner
 Runner for command-line trajectory analysis tools. More...
 
struct  EmptyArrayRef
 Tag type to initialize empty array references. 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  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  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  NotImplementedError
 Exception class for use of an unimplemented feature. More...
 
class  FlagsTemplate
 Template class for typesafe handling of combination of flags. 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  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...
 

Typedefs

typedef std::shared_ptr
< IAnalysisDataModule
AnalysisDataModulePointer
 Smart pointer for managing a generic analysis data module.
 
typedef ConstArrayRef
< 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 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
< ICommandLineModule
CommandLineModulePointer
 Smart pointer type for managing a ICommandLineModule.
 
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.
 
typedef BasicVector< realRVec
 Shorthand for C++ rvec-equivalent type.
 
typedef double integrator_t (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
 Integrator algorithm implementation. More...
 
typedef std::array
< SimulationSignal, eglsNR > 
SimulationSignals
 Convenience typedef for the group of signals used.
 
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 std::random_device RandomDevice
 Random device. More...
 
typedef ThreeFry2x64Fast DefaultRandomEngine
 Default fast and accurate random engine in Gromacs. More...
 
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.
 
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.
 
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.
 
typedef scoped_cptr< void > scoped_guard_sfree
 Simple guard which calls sfree. See scoped_cptr for details.
 
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.
 

Enumerations

enum  OptionFileType {
  eftUnknown, eftTopology, eftTrajectory, eftEnergy,
  eftPDB, eftIndex, eftPlot, eftGenericData,
  eftOptionFileType_NR
}
 Purpose of file(s) provided through an option.
 
enum  TimeUnit {
  TimeUnit_fs, TimeUnit_ps, TimeUnit_ns, TimeUnit_us,
  TimeUnit_ms, TimeUnit_s, TimeUnit_Default = TimeUnit_ps
}
 Time values for TimeUnitManager. More...
 
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
}
 Enumerated values for fixed part of random seed (domain) More...
 
enum  ErrorCode {
  eeOK, eeOutOfMemory, eeFileNotFound, eeFileIO,
  eeInvalidInput, eeInconsistentInput, eeInstability, eeNotImplemented,
  eeInvalidValue, eeInvalidCall, eeInternalError, eeAPIError,
  eeRange, eeCommunication, eeUnknownError
}
 Possible error return codes from Gromacs functions. 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...
 
CommandLineProgramContext & initForCommandLine (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...
 
bool cpuIsX86Nehalem (const CpuInfo &cpuInfo)
 Return true if the CPU is an Intel x86 Nehalem. 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...
 
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...
 
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.
 
double do_cg (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
 Do conjugate gradients minimization. More...
 
double do_lbfgs (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
 Do L-BFGS conjugate gradients minimization. More...
 
double do_steep (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
 Do steepest descents minimization. More...
 
double do_nm (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
 Do normal modes analysis. More...
 
double do_tpi (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
 Do test particle insertion. More...
 
gmx_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...
 
static void simdPrefetch (void *m)
 Prefetch memory at address m. 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, float 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, double 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, float 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...
 
static float log (float x)
 Float log(x). This is the natural logarithm. More...
 
static float exp2 (float x)
 Float 2^x. More...
 
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...
 
static double log (double x)
 Double log(x). This is the natural logarithm. More...
 
static double exp2 (double x)
 Double 2^x. More...
 
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 float reduceIncr4ReturnSum (double *m, double v0, double v1, double v2, double v3)
 Add each double to four consecutive memory locations, return sum. More...
 
template<typename T >
void swap (ArrayRef< T > &a, ArrayRef< T > &b)
 Simple swap method for ArrayRef objects. More...
 
template<typename T >
void swap (ConstArrayRef< T > &a, ConstArrayRef< T > &b)
 Simple swap method for ConstArrayRef objects. More...
 
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...
 
std::string bromacs ()
 Return a cool definition for the acronym GROMACS.
 
std::string getCoolQuote ()
 Return a string with a cool quote.
 
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
< std::is_base_of
< GromacsException, Exception >
::value, const Exception & >
::type 
operator<< (const Exception &ex, const ExceptionInfo< Tag, T > &item)
 Associates extra information with an exception. 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...
 
void init (int *argc, char ***argv)
 Initializes the GROMACS library. More...
 
void finalize ()
 Deinitializes the GROMACS library. More...
 
const IProgramContextgetProgramContext ()
 Returns the global IProgramContext instance. More...
 
void setProgramContext (const IProgramContext *context)
 Sets the global IProgramContext instance. More...
 
template<class T >
void sfree_wrapper (T *p)
 sfree wrapper to be used as scoped_cptr deleter
 
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::vector< std::string > splitString (const std::string &str)
 Splits a string to whitespace separated tokens. 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...
 
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...
 
static const char * boolToString (bool value)
 Converts a boolean to a "true"/"false" string. More...
 
static integrator_tmy_integrator (unsigned int ei)
 Return the correct integrator function.
 
int mdrunner (gmx_hw_opt_t *hw_opt, FILE *fplog, struct t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, ivec ddxyz, int dd_rank_order, int npme, real rdd, real rconstr, const char *dddlb_opt, real dlb_scale, const char *ddcsx, const char *ddcsy, const char *ddcsz, const char *nbpu_opt, int nstlist_cmdline, gmx_int64_t nsteps_cmdline, int nstepout, int resetstep, int nmultisim, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, real pforce, real cpt_period, real max_hours, int imdport, unsigned long Flags)
 Driver routine, that calls the different methods. More...
 

Variables

integrator_t do_steep
 Steepest descents energy minimization.
 
integrator_t do_cg
 Conjugate gradient energy minimization.
 
integrator_t do_lbfgs
 Conjugate gradient energy minimization using the L-BFGS algorithm.
 
integrator_t do_nm
 Normal mode analysis.
 
integrator_t do_tpi
 Test particle insertion.
 
integrator_t do_md
 MD simulations.
 

Typedef Documentation

Default fast and accurate random engine in Gromacs.

This engine will return 2*2^64 random results using the default gmx::RandomDomain::Other stream, and can be initialized with a single seed argument without having to remember empty template angle brackets.

typedef double gmx::integrator_t(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)

Integrator algorithm implementation.

Parameters
[in]fplogLog file for output
[in]crCommunication record
[in]nfileNumber of files
[in]fnmFilename structure array
[in]oenvOutput information
[in]bVerboseVerbose output or not
[in]nstglobalcommHow often global communication is done
[in]vsiteVirtual site information
[in]constrConstraint information
[in]stepoutHow often we writen to the console
[in]inputrecInput record with mdp options
[in]top_globalMolecular topology for the whole system
[in]fcdForce and constraint data
[in]state_globalThe state (x, v, f, box etc.) of the whole system
[in]mdatomsStructure containing atom information
[in]nrnbAccounting for floating point operations
[in]wcycleWall cycle timing information
[in]edEssential dynamics sampling information
[in]frForce record with cut-off information and more
[in]repl_ex_nstHow often we do replica exchange (in steps)
[in]repl_ex_nexHow many replicas we have
[in]repl_ex_seedThe seed for Monte Carlo swaps
[in]membedMembrane embedding data structure
[in]cpt_periodHow often to checkpoint the simulation
[in]max_hoursMaximume length of the simulation (wall time)
[in]imdportInteractive MD port (socket)
[in]FlagsFlags to control mdrun
[in]walltime_accountingMore timing information
typedef std::random_device gmx::RandomDevice

Random device.

For now this is identical to the standard library, but since we use the GROMACS random module for all other random engines and distributions it is convenient to have this too in the same module.

Enumeration Type Documentation

enum gmx::RandomDomain
strong

Enumerated values for fixed part of random seed (domain)

Random numbers are used in many places in GROMACS, and to avoid identical streams the random seeds should be different. Instead of keeping track of several different user-provided seeds, it is better to use the fact that generators like ThreeFry take two 64-bit keys, and combine a general user-provided 64-bit random seed with a second constant value from this list to make each stream guaranteed unique.

Note
There is no reason to go overboard with adding options; we only need to guarantee different streams for cases that might be present simultaneously in a single simulation. As an example, two different integrators (or thermostats) can reuse the same domain.
When you do add options, leave some space between the values so you can group new options with old ones without changing old values.
Enumerator
Other 

Generic - stream uniqueness is not important.

MaxwellVelocities 

Veolcity assignment from Maxwell distribution.

TestParticleInsertion 

Test particle insertion.

UpdateCoordinates 

Particle integrators.

UpdateConstraints 

Second integrator step for constraints.

Thermostat 

Stochastic temperature coupling.

Barostat 

Stochastic pressure coupling.

ReplicaExchange 

Replica exchange metropolis moves.

ExpandedEnsemble 

Expanded ensemble lambda moves.

Function Documentation

static float gmx::abs ( float  a)
inlinestatic

Float Floating-point abs().

Parameters
aany floating point values
Returns
abs(a) for each element.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::abs ( double  a)
inlinestatic

double doubleing-point abs().

Parameters
aany doubleing point values
Returns
abs(a) for each element.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::acos ( float  x)
inlinestatic

Float acos.

Parameters
xThe argument to evaluate acos for
Returns
Acos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::acos ( double  x)
inlinestatic

Double acos.

Parameters
xThe argument to evaluate acos for
Returns
Acos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::acosSingleAccuracy ( double  x)
inlinestatic

Double acos, but with single accuracy.

Parameters
xThe argument to evaluate acos for
Returns
Acos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::andNot ( float  a,
float  b 
)
inlinestatic

Bitwise andnot for two scalar float variables.

Parameters
adata1
bdata2
Returns
(~data1) & data2
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::andNot ( double  a,
double  b 
)
inlinestatic

Bitwise andnot for two scalar double variables.

Parameters
adata1
bdata2
Returns
(~data1) & data2
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::andNot ( std::int32_t  a,
std::int32_t  b 
)
inlinestatic

Bitwise andnot for two scalar integer variables.

Parameters
adata1
bdata2
Returns
(~data1) & data2
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static bool gmx::anyTrue ( bool  a)
inlinestatic

Returns if the boolean is true.

Parameters
aLogical variable.
Returns
true if a is true, otherwise false.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::asin ( float  x)
inlinestatic

float asin.

Parameters
xThe argument to evaluate asin for
Returns
Asin(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::asin ( double  x)
inlinestatic

Double asin.

Parameters
xThe argument to evaluate asin for
Returns
Asin(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::asinSingleAccuracy ( double  x)
inlinestatic

Double asin, but with single accuracy.

Parameters
xThe argument to evaluate asin for
Returns
Asin(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::atan ( float  x)
inlinestatic

Float atan.

Parameters
xThe argument to evaluate atan for
Returns
Atan(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::atan ( double  x)
inlinestatic

Double atan.

Parameters
xThe argument to evaluate atan for
Returns
Atan(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::atan2 ( float  y,
float  x 
)
inlinestatic

Float atan2(y,x).

Parameters
yY component of vector, any quartile
xX component of vector, any quartile
Returns
Atan(y,x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::atan2 ( double  y,
double  x 
)
inlinestatic

Double atan2(y,x).

Parameters
yY component of vector, any quartile
xX component of vector, any quartile
Returns
Atan(y,x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::atan2SingleAccuracy ( double  y,
double  x 
)
inlinestatic

Double atan2(y,x), but with single accuracy.

Parameters
yY component of vector, any quartile
xX component of vector, any quartile
Returns
Atan(y,x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::atanSingleAccuracy ( double  x)
inlinestatic

Double atan, but with single accuracy.

Parameters
xThe argument to evaluate atan for
Returns
Atan(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::blend ( float  a,
float  b,
float  sel 
)
inlinestatic

Blend float selection.

Parameters
aFirst source
bSecond source
selBoolean selector
Returns
Select b if sel is true, a otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::blend ( double  a,
double  b,
double  sel 
)
inlinestatic

Blend double selection.

Parameters
aFirst source
bSecond source
selBoolean selector
Returns
Select b if sel is true, a otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::blend ( std::int32_t  a,
std::int32_t  b,
float  sel 
)
inlinestatic

Blend integer selection.

Parameters
aFirst source
bSecond source
selBoolean selector
Returns
Select b if sel is true, a otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::copysign ( float  x,
float  y 
)
inlinestatic

Composes single value with the magnitude of x and the sign of y.

Parameters
xValue to set sign for
yValue used to set sign
Returns
Magnitude of x, sign of y
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::copysign ( double  x,
double  y 
)
inlinestatic

Composes double value with the magnitude of x and the sign of y.

Parameters
xValue to set sign for
yValue used to set sign
Returns
Magnitude of x, sign of y
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::cos ( float  x)
inlinestatic

Float cos.

Parameters
xThe argument to evaluate cos for
Returns
Cos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::cos ( double  x)
inlinestatic

Double cos.

Parameters
xThe argument to evaluate cos for
Returns
Cos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::cosSingleAccuracy ( double  x)
inlinestatic

Double cos, but with single accuracy.

Parameters
xThe argument to evaluate cos for
Returns
Cos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
bool gmx::cpuIsX86Nehalem ( const CpuInfo &  cpuInfo)

Return true if the CPU is an Intel x86 Nehalem.

Parameters
cpuInfoObject with cpu information
Returns
True if running on Nehalem CPU
static bool gmx::cvtB2IB ( bool  a)
inlinestatic

Just return a boolean (mimicks SIMD real-to-int bool conversions)

Parameters
aboolean
Returns
same boolean
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::cvtD2F ( double  a)
inlinestatic

Convert double to float (mimicks SIMD conversion)

Parameters
adouble
Returns
a, as float
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::cvtF2D ( float  a)
inlinestatic

Convert float to double (mimicks SIMD conversion)

Parameters
afloat
Returns
a, as double double
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::cvtI2R ( std::int32_t  a)
inlinestatic

Return integer.

This function mimicks the SIMD integer-to-real conversion routines. By simply returning an integer, we let the compiler sort out whether the conversion should be to float or double rather than using proxy objects.

Parameters
ainteger
Returns
same value (a)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static bool gmx::cvtIB2B ( bool  a)
inlinestatic

Just return a boolean (mimicks SIMD int-to-real bool conversions)

Parameters
aboolean
Returns
same boolean
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::cvtR2I ( float  a)
inlinestatic

Round single precision floating point to integer.

Parameters
afloat
Returns
Integer format, a rounded to nearest integer.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::cvtR2I ( double  a)
inlinestatic

Round single precision doubleing point to integer.

Parameters
adouble
Returns
Integer format, a rounded to nearest integer.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::cvttR2I ( float  a)
inlinestatic

Truncate single precision floating point to integer.

Parameters
afloat
Returns
Integer format, a truncated to integer.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::cvttR2I ( double  a)
inlinestatic

Truncate single precision doubleing point to integer.

Parameters
adouble
Returns
Integer format, a truncated to integer.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
double gmx::do_cg ( FILE *  fplog,
t_commrec *  cr,
int  nfile,
const t_filenm  fnm[],
const gmx_output_env_t *  oenv,
gmx_bool  bVerbose,
int  nstglobalcomm,
gmx_vsite_t *  vsite,
gmx_constr_t  constr,
int  stepout,
t_inputrec *  inputrec,
gmx_mtop_t *  top_global,
t_fcdata *  fcd,
t_state *  state_global,
t_mdatoms mdatoms,
t_nrnb *  nrnb,
gmx_wallcycle_t  wcycle,
gmx_edsam_t  ed,
t_forcerec *  fr,
int  repl_ex_nst,
int  repl_ex_nex,
int  repl_ex_seed,
gmx_membed_t *  membed,
real  cpt_period,
real  max_hours,
int  imdport,
unsigned long  Flags,
gmx_walltime_accounting_t  walltime_accounting 
)

Do conjugate gradients minimization.

Integrator algorithm implementation. (FILE *fplog, t_commrec *cr,

Parameters
[in]fplogLog file for output
[in]crCommunication record
[in]nfileNumber of files
[in]fnmFilename structure array
[in]oenvOutput information
[in]bVerboseVerbose output or not
[in]nstglobalcommHow often global communication is done
[in]vsiteVirtual site information
[in]constrConstraint information
[in]stepoutHow often we writen to the console
[in]inputrecInput record with mdp options
[in]top_globalMolecular topology for the whole system
[in]fcdForce and constraint data
[in]state_globalThe state (x, v, f, box etc.) of the whole system
[in]mdatomsStructure containing atom information
[in]nrnbAccounting for floating point operations
[in]wcycleWall cycle timing information
[in]edEssential dynamics sampling information
[in]frForce record with cut-off information and more
[in]repl_ex_nstHow often we do replica exchange (in steps)
[in]repl_ex_nexHow many replicas we have
[in]repl_ex_seedThe seed for Monte Carlo swaps
[in]membedMembrane embedding data structure
[in]cpt_periodHow often to checkpoint the simulation
[in]max_hoursMaximume length of the simulation (wall time)
[in]imdportInteractive MD port (socket)
[in]FlagsFlags to control mdrun
[in]walltime_accountingMore timing information (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t gmx_unused *membed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
double gmx::do_lbfgs ( FILE *  fplog,
t_commrec *  cr,
int  nfile,
const t_filenm  fnm[],
const gmx_output_env_t *  oenv,
gmx_bool  bVerbose,
int  nstglobalcomm,
gmx_vsite_t *  vsite,
gmx_constr_t  constr,
int  stepout,
t_inputrec *  inputrec,
gmx_mtop_t *  top_global,
t_fcdata *  fcd,
t_state *  state_global,
t_mdatoms mdatoms,
t_nrnb *  nrnb,
gmx_wallcycle_t  wcycle,
gmx_edsam_t  ed,
t_forcerec *  fr,
int  repl_ex_nst,
int  repl_ex_nex,
int  repl_ex_seed,
gmx_membed_t *  membed,
real  cpt_period,
real  max_hours,
int  imdport,
unsigned long  Flags,
gmx_walltime_accounting_t  walltime_accounting 
)

Do L-BFGS conjugate gradients minimization.

Integrator algorithm implementation. (FILE *fplog, t_commrec *cr,

Parameters
[in]fplogLog file for output
[in]crCommunication record
[in]nfileNumber of files
[in]fnmFilename structure array
[in]oenvOutput information
[in]bVerboseVerbose output or not
[in]nstglobalcommHow often global communication is done
[in]vsiteVirtual site information
[in]constrConstraint information
[in]stepoutHow often we writen to the console
[in]inputrecInput record with mdp options
[in]top_globalMolecular topology for the whole system
[in]fcdForce and constraint data
[in]state_globalThe state (x, v, f, box etc.) of the whole system
[in]mdatomsStructure containing atom information
[in]nrnbAccounting for floating point operations
[in]wcycleWall cycle timing information
[in]edEssential dynamics sampling information
[in]frForce record with cut-off information and more
[in]repl_ex_nstHow often we do replica exchange (in steps)
[in]repl_ex_nexHow many replicas we have
[in]repl_ex_seedThe seed for Monte Carlo swaps
[in]membedMembrane embedding data structure
[in]cpt_periodHow often to checkpoint the simulation
[in]max_hoursMaximume length of the simulation (wall time)
[in]imdportInteractive MD port (socket)
[in]FlagsFlags to control mdrun
[in]walltime_accountingMore timing information (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
double gmx::do_nm ( FILE *  fplog,
t_commrec *  cr,
int  nfile,
const t_filenm  fnm[],
const gmx_output_env_t *  oenv,
gmx_bool  bVerbose,
int  nstglobalcomm,
gmx_vsite_t *  vsite,
gmx_constr_t  constr,
int  stepout,
t_inputrec *  inputrec,
gmx_mtop_t *  top_global,
t_fcdata *  fcd,
t_state *  state_global,
t_mdatoms mdatoms,
t_nrnb *  nrnb,
gmx_wallcycle_t  wcycle,
gmx_edsam_t  ed,
t_forcerec *  fr,
int  repl_ex_nst,
int  repl_ex_nex,
int  repl_ex_seed,
gmx_membed_t *  membed,
real  cpt_period,
real  max_hours,
int  imdport,
unsigned long  Flags,
gmx_walltime_accounting_t  walltime_accounting 
)

Do normal modes analysis.

Integrator algorithm implementation. (FILE *fplog, t_commrec *cr,

Parameters
[in]fplogLog file for output
[in]crCommunication record
[in]nfileNumber of files
[in]fnmFilename structure array
[in]oenvOutput information
[in]bVerboseVerbose output or not
[in]nstglobalcommHow often global communication is done
[in]vsiteVirtual site information
[in]constrConstraint information
[in]stepoutHow often we writen to the console
[in]inputrecInput record with mdp options
[in]top_globalMolecular topology for the whole system
[in]fcdForce and constraint data
[in]state_globalThe state (x, v, f, box etc.) of the whole system
[in]mdatomsStructure containing atom information
[in]nrnbAccounting for floating point operations
[in]wcycleWall cycle timing information
[in]edEssential dynamics sampling information
[in]frForce record with cut-off information and more
[in]repl_ex_nstHow often we do replica exchange (in steps)
[in]repl_ex_nexHow many replicas we have
[in]repl_ex_seedThe seed for Monte Carlo swaps
[in]membedMembrane embedding data structure
[in]cpt_periodHow often to checkpoint the simulation
[in]max_hoursMaximume length of the simulation (wall time)
[in]imdportInteractive MD port (socket)
[in]FlagsFlags to control mdrun
[in]walltime_accountingMore timing information (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
double gmx::do_steep ( FILE *  fplog,
t_commrec *  cr,
int  nfile,
const t_filenm  fnm[],
const gmx_output_env_t *  oenv,
gmx_bool  bVerbose,
int  nstglobalcomm,
gmx_vsite_t *  vsite,
gmx_constr_t  constr,
int  stepout,
t_inputrec *  inputrec,
gmx_mtop_t *  top_global,
t_fcdata *  fcd,
t_state *  state_global,
t_mdatoms mdatoms,
t_nrnb *  nrnb,
gmx_wallcycle_t  wcycle,
gmx_edsam_t  ed,
t_forcerec *  fr,
int  repl_ex_nst,
int  repl_ex_nex,
int  repl_ex_seed,
gmx_membed_t *  membed,
real  cpt_period,
real  max_hours,
int  imdport,
unsigned long  Flags,
gmx_walltime_accounting_t  walltime_accounting 
)

Do steepest descents minimization.

Integrator algorithm implementation. (FILE *fplog, t_commrec *cr,

Parameters
[in]fplogLog file for output
[in]crCommunication record
[in]nfileNumber of files
[in]fnmFilename structure array
[in]oenvOutput information
[in]bVerboseVerbose output or not
[in]nstglobalcommHow often global communication is done
[in]vsiteVirtual site information
[in]constrConstraint information
[in]stepoutHow often we writen to the console
[in]inputrecInput record with mdp options
[in]top_globalMolecular topology for the whole system
[in]fcdForce and constraint data
[in]state_globalThe state (x, v, f, box etc.) of the whole system
[in]mdatomsStructure containing atom information
[in]nrnbAccounting for floating point operations
[in]wcycleWall cycle timing information
[in]edEssential dynamics sampling information
[in]frForce record with cut-off information and more
[in]repl_ex_nstHow often we do replica exchange (in steps)
[in]repl_ex_nexHow many replicas we have
[in]repl_ex_seedThe seed for Monte Carlo swaps
[in]membedMembrane embedding data structure
[in]cpt_periodHow often to checkpoint the simulation
[in]max_hoursMaximume length of the simulation (wall time)
[in]imdportInteractive MD port (socket)
[in]FlagsFlags to control mdrun
[in]walltime_accountingMore timing information (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
double gmx::do_tpi ( FILE *  fplog,
t_commrec *  cr,
int  nfile,
const t_filenm  fnm[],
const gmx_output_env_t *  oenv,
gmx_bool  bVerbose,
int  nstglobalcomm,
gmx_vsite_t *  vsite,
gmx_constr_t  constr,
int  stepout,
t_inputrec *  inputrec,
gmx_mtop_t *  top_global,
t_fcdata *  fcd,
t_state *  state_global,
t_mdatoms mdatoms,
t_nrnb *  nrnb,
gmx_wallcycle_t  wcycle,
gmx_edsam_t  ed,
t_forcerec *  fr,
int  repl_ex_nst,
int  repl_ex_nex,
int  repl_ex_seed,
gmx_membed_t *  membed,
real  cpt_period,
real  max_hours,
int  imdport,
unsigned long  Flags,
gmx_walltime_accounting_t  walltime_accounting 
)

Do test particle insertion.

Integrator algorithm implementation. (FILE *fplog, t_commrec *cr,

Parameters
[in]fplogLog file for output
[in]crCommunication record
[in]nfileNumber of files
[in]fnmFilename structure array
[in]oenvOutput information
[in]bVerboseVerbose output or not
[in]nstglobalcommHow often global communication is done
[in]vsiteVirtual site information
[in]constrConstraint information
[in]stepoutHow often we writen to the console
[in]inputrecInput record with mdp options
[in]top_globalMolecular topology for the whole system
[in]fcdForce and constraint data
[in]state_globalThe state (x, v, f, box etc.) of the whole system
[in]mdatomsStructure containing atom information
[in]nrnbAccounting for floating point operations
[in]wcycleWall cycle timing information
[in]edEssential dynamics sampling information
[in]frForce record with cut-off information and more
[in]repl_ex_nstHow often we do replica exchange (in steps)
[in]repl_ex_nexHow many replicas we have
[in]repl_ex_seedThe seed for Monte Carlo swaps
[in]membedMembrane embedding data structure
[in]cpt_periodHow often to checkpoint the simulation
[in]max_hoursMaximume length of the simulation (wall time)
[in]imdportInteractive MD port (socket)
[in]FlagsFlags to control mdrun
[in]walltime_accountingMore timing information (FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], const gmx_output_env_t *oenv, gmx_bool bVerbose, int nstglobalcomm, gmx_vsite_t *vsite, gmx_constr_t constr, int stepout, t_inputrec *inputrec, gmx_mtop_t *top_global, t_fcdata *fcd, t_state *state_global, t_mdatoms *mdatoms, t_nrnb *nrnb, gmx_wallcycle_t wcycle, gmx_edsam_t ed, t_forcerec *fr, int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, real cpt_period, real max_hours, int imdport, unsigned long Flags, gmx_walltime_accounting_t walltime_accounting)
static float gmx::erf ( float  x)
inlinestatic

Float erf(x).

Parameters
xArgument.
Returns
erf(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::erf ( double  x)
inlinestatic

Double erf(x).

Parameters
xArgument.
Returns
erf(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::erfc ( float  x)
inlinestatic

Float erfc(x).

Parameters
xArgument.
Returns
erfc(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::erfc ( double  x)
inlinestatic

Double erfc(x).

Parameters
xArgument.
Returns
erfc(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::erfcSingleAccuracy ( double  x)
inlinestatic

Double erfc(x), but with single accuracy.

Parameters
xArgument.
Returns
erfc(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
double gmx::erfinv ( double  x)

Inverse error function, double precision.

Parameters
xArgument, should be in the range -1.0 < x < 1.0
Returns
The inverse of the error function if the argument is inside the range, +/- infinity if it is exactly 1.0 or -1.0, and NaN otherwise.
float gmx::erfinv ( float  x)

Inverse error function, single precision.

Parameters
xArgument, should be in the range -1.0 < x < 1.0
Returns
The inverse of the error function if the argument is inside the range, +/- infinity if it is exactly 1.0 or -1.0, and NaN otherwise.
static double gmx::erfSingleAccuracy ( double  x)
inlinestatic

Double erf(x), but with single accuracy.

Parameters
xArgument.
Returns
erf(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::exp ( float  x)
inlinestatic

Float exp(x).

Parameters
xArgument.
Returns
exp(x). Undefined if input argument caused overflow.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::exp ( double  x)
inlinestatic

Double exp(x).

Parameters
xArgument.
Returns
exp(x). Undefined if input argument caused overflow.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::exp2 ( float  x)
inlinestatic

Float 2^x.

Parameters
xArgument.
Returns
2^x. Undefined if input argument caused overflow.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::exp2 ( double  x)
inlinestatic

Double 2^x.

Parameters
xArgument.
Returns
2^x. Undefined if input argument caused overflow.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::exp2SingleAccuracy ( double  x)
inlinestatic

Double 2^x, but with single accuracy.

Parameters
xArgument.
Returns
2^x. Undefined if input argument caused overflow.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::expandScalarsToTriplets ( float  scalar,
float *  triplets0,
float *  triplets1,
float *  triplets2 
)
inlinestatic

Copy single float to three variables.

Parameters
scalarFloating-point input.
[out]triplets0Copy 1.
[out]triplets1Copy 2.
[out]triplets2Copy 3.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::expandScalarsToTriplets ( double  scalar,
double *  triplets0,
double *  triplets1,
double *  triplets2 
)
inlinestatic

Copy single double to three variables.

Parameters
scalarFloating-point input.
[out]triplets0Copy 1.
[out]triplets1Copy 2.
[out]triplets2Copy 3.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::expSingleAccuracy ( double  x)
inlinestatic

Double exp(x), but with single accuracy.

Parameters
xArgument.
Returns
exp(x). Undefined if input argument caused overflow.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::fma ( float  a,
float  b,
float  c 
)
inlinestatic

Float Fused-multiply-add. Result is a*b + c.

Parameters
afactor1
bfactor2
cterm
Returns
a*b + c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::fma ( double  a,
double  b,
double  c 
)
inlinestatic

double Fused-multiply-add. Result is a*b + c.

Parameters
afactor1
bfactor2
cterm
Returns
a*b + c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::fms ( float  a,
float  b,
float  c 
)
inlinestatic

Float Fused-multiply-subtract. Result is a*b - c.

Parameters
afactor1
bfactor2
cterm
Returns
a*b - c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::fms ( double  a,
double  b,
double  c 
)
inlinestatic

double Fused-multiply-subtract. Result is a*b - c.

Parameters
afactor1
bfactor2
cterm
Returns
a*b - c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::fnma ( float  a,
float  b,
float  c 
)
inlinestatic

Float Fused-negated-multiply-add. Result is -a*b + c.

Parameters
afactor1
bfactor2
cterm
Returns
-a*b + c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::fnma ( double  a,
double  b,
double  c 
)
inlinestatic

double Fused-negated-multiply-add. Result is - a*b + c.

Parameters
afactor1
bfactor2
cterm
Returns
-a*b + c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::fnms ( float  a,
float  b,
float  c 
)
inlinestatic

Float Fused-negated-multiply-subtract. Result is -a*b - c.

Parameters
afactor1
bfactor2
cterm
Returns
-a*b - c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::fnms ( double  a,
double  b,
double  c 
)
inlinestatic

double Fused-negated-multiply-subtract. Result is -a*b - c.

Parameters
afactor1
bfactor2
cterm
Returns
-a*b - c
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadBySimdIntTranspose ( const float *  base,
std::int32_t  offset,
float *  v0,
float *  v1,
float *  v2,
float *  v3 
)
inlinestatic

Load 4 floats from base/offsets and store into variables.

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
baseAligned pointer to the start of the memory.
offsetInteger type with offset to the start of each triplet.
[out]v0First float, base[align*offset[0]].
[out]v1Second float, base[align*offset[0] + 1].
[out]v2Third float, base[align*offset[0] + 2].
[out]v3Fourth float, base[align*offset[0] + 3].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadBySimdIntTranspose ( const float *  base,
std::int32_t  offset,
float *  v0,
float *  v1 
)
inlinestatic

Load 2 floats from base/offsets and store into variables (aligned).

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
baseAligned pointer to the start of the memory.
offsetInteger type with offset to the start of each triplet.
[out]v0First float, base[align*offset[0]].
[out]v1Second float, base[align*offset[0] + 1].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadBySimdIntTranspose ( const double *  base,
std::int32_t  offset,
double *  v0,
double *  v1,
double *  v2,
double *  v3 
)
inlinestatic

Load 4 doubles from base/offsets and store into variables.

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
baseAligned pointer to the start of the memory.
offsetInteger type with offset to the start of each triplet.
[out]v0First double, base[align*offset[0]].
[out]v1Second double, base[align*offset[0] + 1].
[out]v2Third double, base[align*offset[0] + 2].
[out]v3Fourth double, base[align*offset[0] + 3].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadBySimdIntTranspose ( const double *  base,
std::int32_t  offset,
double *  v0,
double *  v1 
)
inlinestatic

Load 2 doubles from base/offsets and store into variables (aligned).

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
baseAligned pointer to the start of the memory.
offsetInteger type with offset to the start of each triplet.
[out]v0First double, base[align*offset[0]].
[out]v1Second double, base[align*offset[0] + 1].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadTranspose ( const float *  base,
const std::int32_t  offset[],
float *  v0,
float *  v1,
float *  v2,
float *  v3 
)
inlinestatic

Load 4 consecutive floats from base/offset into four variables.

Template Parameters
alignAlignment of the memory from which we read.
Parameters
basePointer to the start of the memory area
offsetIndex to data.
[out]v01st float, base[align*offset[0]].
[out]v12nd float, base[align*offset[0] + 1].
[out]v23rd float, base[align*offset[0] + 2].
[out]v34th float, base[align*offset[0] + 3].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadTranspose ( const float *  base,
const std::int32_t  offset[],
float *  v0,
float *  v1 
)
inlinestatic

Load 2 consecutive floats from base/offset into four variables.

Template Parameters
alignAlignment of the memory from which we read.
Parameters
basePointer to the start of the memory area
offsetIndex to data.
[out]v01st float, base[align*offset[0]].
[out]v12nd float, base[align*offset[0] + 1].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadTranspose ( const double *  base,
const std::int32_t  offset[],
double *  v0,
double *  v1,
double *  v2,
double *  v3 
)
inlinestatic

Load 4 consecutive doubles from base/offset into four variables.

Template Parameters
alignAlignment of the memory from which we read.
Parameters
basePointer to the start of the memory area
offsetIndex to data.
[out]v01st double, base[align*offset[0]].
[out]v12nd double, base[align*offset[0] + 1].
[out]v23rd double, base[align*offset[0] + 2].
[out]v34th double, base[align*offset[0] + 3].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadTranspose ( const double *  base,
const std::int32_t  offset[],
double *  v0,
double *  v1 
)
inlinestatic

Load 2 consecutive doubles from base/offset into four variables.

Template Parameters
alignAlignment of the memory from which we read.
Parameters
basePointer to the start of the memory area
offsetIndex to data.
[out]v01st double, base[align*offset[0]].
[out]v12nd double, base[align*offset[0] + 1].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadUBySimdIntTranspose ( const float *  base,
std::int32_t  offset,
float *  v0,
float *  v1 
)
inlinestatic

Load 2 floats from base/offsets and store into variables (unaligned).

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
baseAligned pointer to the start of the memory.
offsetInteger type with offset to the start of each triplet.
[out]v0First float, base[align*offset[0]].
[out]v1Second float, base[align*offset[0] + 1].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadUBySimdIntTranspose ( const double *  base,
std::int32_t  offset,
double *  v0,
double *  v1 
)
inlinestatic

Load 2 doubles from base/offsets and store into variables (unaligned).

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
baseAligned pointer to the start of the memory.
offsetInteger type with offset to the start of each triplet.
[out]v0First double, base[align*offset[0]].
[out]v1Second double, base[align*offset[0] + 1].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadUTranspose ( const float *  base,
const std::int32_t  offset[],
float *  v0,
float *  v1,
float *  v2 
)
inlinestatic

Load 3 consecutive floats from base/offsets, store into three vars.

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
basePointer to the start of the memory area
offsetOffset to the start of data.
[out]v01st value, base[align*offset[0]].
[out]v12nd value, base[align*offset[0] + 1].
[out]v23rd value, base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::gatherLoadUTranspose ( const double *  base,
const std::int32_t  offset[],
double *  v0,
double *  v1,
double *  v2 
)
inlinestatic

Load 3 consecutive doubles from base/offsets, store into three vars.

Template Parameters
alignAlignment of the memory from which we read, i.e. distance (measured in elements, not bytes) between index points.
Parameters
basePointer to the start of the memory area
offsetOffset to the start of data.
[out]v01st double, base[align*offset[0]].
[out]v12nd double, base[align*offset[0] + 1].
[out]v23rd double, base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<class RealType = real, unsigned int Bits, class Rng >
RealType gmx::generateCanonical ( Rng &  g)

Generate a floating-point value with specified number of random bits.

Template Parameters
RealTypeFloating-point type to generate
BitsNumber of random bits to generate
RngRandom number generator class
Parameters
gRandom number generator to use

This implementation avoids the bug in libc++ and stdlibc++ (which is due to the C++ standard being unclear) where 1.0 can be returned occasionally.

std::int64_t gmx::greatestCommonDivisor ( std::int64_t  p,
std::int64_t  q 
)

Find greatest common divisor of two numbers.

Parameters
pFirst number, positive
qSecond number, positive
Returns
Greatest common divisor of p and q
static float gmx::inv ( float  x)
inlinestatic

Calculate 1/x for float.

Parameters
xArgument that must be nonzero. This routine does not check arguments.
Returns
1/x. Result is undefined if your argument was invalid.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::inv ( double  x)
inlinestatic

Calculate 1/x for double.

Parameters
xArgument that must be nonzero. This routine does not check arguments.
Returns
1/x. Result is undefined if your argument was invalid.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::invcbrt ( float  x)
inlinestatic

Calculate inverse cube root of x in single precision.

Parameters
xArgument
Returns
x^(-1/3)

This routine is typically faster than using std::pow().

static double gmx::invcbrt ( double  x)
inlinestatic

Calculate inverse sixth root of x in double precision.

Parameters
xArgument
Returns
x^(-1/3)

This routine is typically faster than using std::pow().

static double gmx::invcbrt ( int  x)
inlinestatic

Calculate inverse sixth root of integer x in double precision.

Parameters
xArgument
Returns
x^(-1/3)

This routine is typically faster than using std::pow().

void gmx::invertBoxMatrix ( const matrix  src,
matrix  dest 
)

Invert a simulation-box matrix in src, return in dest.

This routine assumes that src is a simulation-box matrix, i.e. has zeroes in the upper-right triangle. A fatal error occurs if the product of the leading diagonal is too small. The inversion can be done "in place", i.e src and dest can be the same matrix.

void gmx::invertMatrix ( const matrix  src,
matrix  dest 
)

Invert a general 3x3 matrix in src, return in dest.

A fatal error occurs if the determinant is too small. src and dest cannot be the same matrix.

static double gmx::invSingleAccuracy ( double  x)
inlinestatic

Calculate 1/x for double, but with single accuracy.

Parameters
xArgument that must be nonzero. This routine does not check arguments.
Returns
1/x. Result is undefined if your argument was invalid.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::invsixthroot ( float  x)
inlinestatic

Calculate inverse sixth root of x in single precision.

Parameters
xArgument, must be greater than zero.
Returns
x^(-1/6)

This routine is typically faster than using std::pow().

static double gmx::invsixthroot ( double  x)
inlinestatic

Calculate inverse sixth root of x in double precision.

Parameters
xArgument, must be greater than zero.
Returns
x^(-1/6)

This routine is typically faster than using std::pow().

static double gmx::invsixthroot ( int  x)
inlinestatic

Calculate inverse sixth root of integer x in double precision.

Parameters
xArgument, must be greater than zero.
Returns
x^(-1/6)

This routine is typically faster than using std::pow().

static float gmx::invsqrt ( float  x)
inlinestatic

Calculate 1.0/sqrt(x) in single precision.

Parameters
xPositive value to calculate inverse square root for

For now this is implemented with std::sqrt(x) since gcc seems to do a decent job optimizing it. However, we might decide to use instrinsics or compiler-specific functions in the future.

Returns
1.0/sqrt(x)
static double gmx::invsqrt ( double  x)
inlinestatic

Calculate 1.0/sqrt(x) in double precision, but single range.

Parameters
xPositive value to calculate inverse square root for, must be in the input domain valid for single precision.

For now this is implemented with std::sqrt(x). However, we might decide to use instrinsics or compiler-specific functions in the future, and then we want to have the freedom to do the first step in single precision.

Returns
1.0/sqrt(x)
static double gmx::invsqrt ( int  x)
inlinestatic

Calculate 1.0/sqrt(x) for integer x in double precision.

Parameters
xPositive value to calculate inverse square root for.
Returns
1.0/sqrt(x)
static void gmx::invsqrtPair ( float  x0,
float  x1,
float *  out0,
float *  out1 
)
inlinestatic

Calculate 1/sqrt(x) for two floats.

Parameters
x0First argument, x0 must be positive - no argument checking.
x1Second argument, x1 must be positive - no argument checking.
[out]out0Result 1/sqrt(x0)
[out]out1Result 1/sqrt(x1)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::invsqrtPair ( double  x0,
double  x1,
double *  out0,
double *  out1 
)
inlinestatic

Calculate 1/sqrt(x) for two doubles.

Parameters
x0First argument, x0 must be positive - no argument checking.
x1Second argument, x1 must be positive - no argument checking.
[out]out0Result 1/sqrt(x0)
[out]out1Result 1/sqrt(x1)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::invsqrtPairSingleAccuracy ( double  x0,
double  x1,
double *  out0,
double *  out1 
)
inlinestatic

Calculate 1/sqrt(x) for two doubles, but with single accuracy.

Parameters
x0First argument, x0 must be positive - no argument checking.
x1Second argument, x1 must be positive - no argument checking.
[out]out0Result 1/sqrt(x0)
[out]out1Result 1/sqrt(x1)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::invsqrtSingleAccuracy ( double  x)
inlinestatic

Calculate 1/sqrt(x) for double, but with single accuracy.

Parameters
xArgument that must be >0. This routine does not check arguments.
Returns
1/sqrt(x). Result is undefined if your argument was invalid.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::log ( float  x)
inlinestatic

Float log(x). This is the natural logarithm.

Parameters
xArgument, should be >0.
Returns
The natural logarithm of x. Undefined if argument is invalid.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::log ( double  x)
inlinestatic

Double log(x). This is the natural logarithm.

Parameters
xArgument, should be >0.
Returns
The natural logarithm of x. Undefined if argument is invalid.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
unsigned int gmx::log2I ( std::uint32_t  x)

Compute floor of logarithm to base 2, 32 bit unsigned argument.

Parameters
x32-bit unsigned argument
Returns
log2(x)
Note
This version of the overloaded function uses unsigned arguments to be able to handle arguments using all 32 bits.
unsigned int gmx::log2I ( std::uint64_t  x)

Compute floor of logarithm to base 2, 64 bit unsigned argument.

Parameters
x64-bit unsigned argument
Returns
log2(x)
Note
This version of the overloaded function uses unsigned arguments to be able to handle arguments using all 64 bits.
unsigned int gmx::log2I ( std::int32_t  x)

Compute floor of logarithm to base 2, 32 bit signed argument.

Parameters
x32-bit signed argument
Returns
log2(x)
Note
This version of the overloaded function will assert that x is not negative.
unsigned int gmx::log2I ( std::int64_t  x)

Compute floor of logarithm to base 2, 64 bit signed argument.

Parameters
x64-bit signed argument
Returns
log2(x)
Note
This version of the overloaded function will assert that x is not negative.
static double gmx::logSingleAccuracy ( double  x)
inlinestatic

Double log(x), but with single accuracy. This is the natural logarithm.

Parameters
xArgument, should be >0.
Returns
The natural logarithm of x. Undefined if argument is invalid.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
gmx_uint64_t gmx::makeRandomSeed ( )

Return 64 random bits from the random device, suitable as seed.

If the internal random device output is smaller than 64 bits, this routine will use multiple calls internally until we have 64 bits of random data.

Returns
64-bit unsigned integer with random bits.
static float gmx::maskAdd ( float  a,
float  b,
float  m 
)
inlinestatic

Add two float variables, masked version.

Parameters
aterm1
bterm2
mmask
Returns
a+b where mask is true, a otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::maskAdd ( double  a,
double  b,
double  m 
)
inlinestatic

Add two double variables, masked version.

Parameters
aterm1
bterm2
mmask
Returns
a+b where mask is true, a otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::maskzFma ( float  a,
float  b,
float  c,
float  m 
)
inlinestatic

Float fused multiply-add, masked version.

Parameters
afactor1
bfactor2
cterm
mmask
Returns
a*b+c where mask is true, 0.0 otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::maskzFma ( double  a,
double  b,
double  c,
double  m 
)
inlinestatic

double fused multiply-add, masked version.

Parameters
afactor1
bfactor2
cterm
mmask
Returns
a*b+c where mask is true, 0.0 otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::maskzInv ( float  x,
bool  m 
)
inlinestatic

Calculate 1/x for masked entry of float.

This routine only evaluates 1/x if mask is true. Illegal values for a masked-out float will not lead to floating-point exceptions.

Parameters
xArgument that must be nonzero if masked-in.
mMask
Returns
1/x. Result is undefined if your argument was invalid or entry was not masked, and 0.0 for masked-out entries.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::maskzInv ( double  x,
bool  m 
)
inlinestatic

Calculate 1/x for masked entry of double.

This routine only evaluates 1/x if mask is true. Illegal values for a masked-out double will not lead to floating-point exceptions.

Parameters
xArgument that must be nonzero if masked-in.
mMask
Returns
1/x. Result is undefined if your argument was invalid or entry was not masked, and 0.0 for masked-out entries.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::maskzInvSingleAccuracy ( double  x,
bool  m 
)
inlinestatic

Calculate 1/x for masked entry of double, but with single accuracy.

This routine only evaluates 1/x if mask is true. Illegal values for a masked-out double will not lead to floating-point exceptions.

Parameters
xArgument that must be nonzero if masked-in.
mMask
Returns
1/x. Result is undefined if your argument was invalid or entry was not masked, and 0.0 for masked-out entries.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::maskzInvsqrt ( float  x,
bool  m 
)
inlinestatic

Calculate 1/sqrt(x) for masked entry of float.

This routine only evaluates 1/sqrt(x) if mask is true. Illegal values for a masked-out float will not lead to floating-point exceptions.

Parameters
xArgument that must be >0 if masked-in.
mMask
Returns
1/sqrt(x). Result is undefined if your argument was invalid or entry was not masked, and 0.0 for masked-out entries.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::maskzInvsqrt ( double  x,
bool  m 
)
inlinestatic

Calculate 1/sqrt(x) for masked entry of double.

This routine only evaluates 1/sqrt(x) if mask is true. Illegal values for a masked-out double will not lead to floating-point exceptions.

Parameters
xArgument that must be >0 if masked-in.
mMask
Returns
1/sqrt(x). Result is undefined if your argument was invalid or entry was not masked, and 0.0 for masked-out entries.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::maskzInvsqrtSingleAccuracy ( double  x,
bool  m 
)
inlinestatic

Calculate 1/sqrt(x) for masked entry of double, but with single accuracy.

This routine only evaluates 1/sqrt(x) if mask is true. Illegal values for a masked-out double will not lead to floating-point exceptions.

Parameters
xArgument that must be >0 if masked-in.
mMask
Returns
1/sqrt(x). Result is undefined if your argument was invalid or entry was not masked, and 0.0 for masked-out entries.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::maskzMul ( float  a,
float  b,
float  m 
)
inlinestatic

Multiply two float variables, masked version.

Parameters
afactor1
bfactor2
mmask
Returns
a*b where mask is true, 0.0 otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::maskzMul ( double  a,
double  b,
double  m 
)
inlinestatic

Multiply two double variables, masked version.

Parameters
afactor1
bfactor2
mmask
Returns
a*b where mask is true, 0.0 otherwise.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::max ( float  a,
float  b 
)
inlinestatic

Set each float element to the largest from two variables.

Parameters
aAny floating-point value
bAny floating-point value
Returns
max(a,b) for each element.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::max ( double  a,
double  b 
)
inlinestatic

Set each double element to the largest from two variables.

Parameters
aAny doubleing-point value
bAny doubleing-point value
Returns
max(a,b) for each element.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
int gmx::mdrunner ( gmx_hw_opt_t *  hw_opt,
FILE *  fplog,
struct t_commrec *  cr,
int  nfile,
const t_filenm  fnm[],
const gmx_output_env_t *  oenv,
gmx_bool  bVerbose,
int  nstglobalcomm,
ivec  ddxyz,
int  dd_rank_order,
int  npme,
real  rdd,
real  rconstr,
const char *  dddlb_opt,
real  dlb_scale,
const char *  ddcsx,
const char *  ddcsy,
const char *  ddcsz,
const char *  nbpu_opt,
int  nstlist_cmdline,
gmx_int64_t  nsteps_cmdline,
int  nstepout,
int  resetstep,
int  nmultisim,
int  repl_ex_nst,
int  repl_ex_nex,
int  repl_ex_seed,
real  pforce,
real  cpt_period,
real  max_hours,
int  imdport,
unsigned long  Flags 
)

Driver routine, that calls the different methods.

Parameters
[in]hw_optHardware detection structure
[in]fplogFile pointer for log file
[in]crCommunication data
[in]nfileNumber of files
[in]fnmArray of filenames and file properties
[in]oenvOutput variables for storing xvg files etc.
[in]bVerboseVerbose output or not
[in]nstglobalcommNumber of steps between global communication
[in]ddxyzDivision of sub-boxes over processors for use in domain decomposition parallellization
[in]dd_rank_orderOrdering of the PP and PME ranks
[in]npmeThe number of separate PME ranks requested, -1 = auto
[in]rddThe maximum distance for bonded interactions with DD (nm)
[in]rconstrMaximum distance for P-LINCS (nm)
[in]dddlb_optFile name for debugging
[in]dlb_scaleFile name for debugging
[in]ddcsxFile name for debugging
[in]ddcsyFile name for debugging
[in]ddcszFile name for debugging
[in]nbpu_optType of nonbonded processing unit
[in]nstlist_cmdlineOverride neighbor search frequency
[in]nsteps_cmdlineOverride number of simulation steps
[in]nstepoutHow often to write to the console
[in]resetstepReset the step counter
[in]nmultisimNumber of parallel simulations to run
[in]repl_ex_nstNumber steps between replica exchange attempts
[in]repl_ex_nexNumber of replicas in REMD
[in]repl_ex_seedThe seed for Monte Carlo swaps
[in]pforceMinimum force for printing (for debugging)
[in]cpt_periodHow often to checkpoint the simulation
[in]max_hoursMaximume length of the simulation (wall time)
[in]imdportInteractive MD port (socket)
[in]FlagsMore command line options
static float gmx::min ( float  a,
float  b 
)
inlinestatic

Set each float element to the smallest from two variables.

Parameters
aAny floating-point value
bAny floating-point value
Returns
min(a,b) for each element.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::min ( double  a,
double  b 
)
inlinestatic

Set each double element to the smallest from two variables.

Parameters
aAny doubleing-point value
bAny doubleing-point value
Returns
min(a,b) for each element.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::pmeForceCorrection ( float  z2)
inlinestatic

Calculate the force correction due to PME analytically in float.

See the SIMD version of this function for details.

Parameters
z2input parameter
Returns
Correction to use on force
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::pmeForceCorrection ( double  z2)
inlinestatic

Calculate the force correction due to PME analytically in double.

See the SIMD version of this function for details.

Parameters
z2input parameter
Returns
Correction to use on force
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::pmeForceCorrectionSingleAccuracy ( double  z2)
inlinestatic

Force correction due to PME in double, but with single accuracy.

See the SIMD version of this function for details.

Parameters
z2input parameter
Returns
Correction to use on force
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::pmePotentialCorrection ( float  z2)
inlinestatic

Calculate the potential correction due to PME analytically in float.

See the SIMD version of this function for details.

Parameters
z2input parameter
Returns
Correction to use on potential.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::pmePotentialCorrection ( double  z2)
inlinestatic

Calculate the potential correction due to PME analytically in double.

See the SIMD version of this function for details.

Parameters
z2input parameter
Returns
Correction to use on potential.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::pmePotentialCorrectionSingleAccuracy ( double  z2)
inlinestatic

Potential correction due to PME in double, but with single accuracy.

See the SIMD version of this function for details.

Parameters
z2input parameter
Returns
Correction to use on potential.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<typename T >
T gmx::power12 ( x)

calculate x^12

Template Parameters
TType of argument and return value
Parameters
xargument
Returns
x^12
template<typename T >
T gmx::power3 ( x)

calculate x^3

Template Parameters
TType of argument and return value
Parameters
xargument
Returns
x^3
template<typename T >
T gmx::power4 ( x)

calculate x^4

Template Parameters
TType of argument and return value
Parameters
xargument
Returns
x^4
template<typename T >
T gmx::power5 ( x)

calculate x^5

Template Parameters
TType of argument and return value
Parameters
xargument
Returns
x^5
template<typename T >
T gmx::power6 ( x)

calculate x^6

Template Parameters
TType of argument and return value
Parameters
xargument
Returns
x^6
void gmx::printBinaryInformation ( FILE *  fp,
const IProgramContext &  programContext 
)

Print basic information about the executable.

Parameters
fpWhere to print the information to.
[in]programContextProgram information object to use.
void gmx::printBinaryInformation ( FILE *  fp,
const IProgramContext &  programContext,
const BinaryInformationSettings &  settings 
)

Print basic information about the executable with custom settings.

Needed to read the members without otherwise unnecessary accessors.

Parameters
fpWhere to print the information to.
[in]programContextProgram information object to use.
[in]settingsSpecifies what to print.
See Also
BinaryInformationSettings
int gmx::processExceptionAtExitForCommandLine ( const std::exception &  ex)

Handles an exception and deinitializes after initForCommandLine.

Parameters
[in]exException that is the cause for terminating the program.
Returns
Return code to return from main().

This method should be called as the last thing before terminating the program because of an exception. See processExceptionAtExit() for details. Additionally this method undoes the work done by initForCommandLine.

Does not throw.

static float gmx::reduce ( float  a)
inlinestatic

Return sum of all elements in float variable (i.e., the variable itself).

Parameters
avariable to reduce/sum.
Returns
The argument variable itself.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::reduce ( double  a)
inlinestatic

Return sum of all elements in double variable (i.e., the variable itself).

Parameters
avariable to reduce/sum.
Returns
The argument variable itself.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::reduceIncr4ReturnSum ( float *  m,
float  v0,
float  v1,
float  v2,
float  v3 
)
inlinestatic

Add each float to four consecutive memory locations, return sum.

Parameters
mPointer to memory where four floats should be incremented
v0float to be added to m[0]
v1float to be added to m[1]
v2float to be added to m[2]
v3float to be added to m[3]
Returns
v0+v1+v2+v3.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::reduceIncr4ReturnSum ( double *  m,
double  v0,
double  v1,
double  v2,
double  v3 
)
inlinestatic

Add each double to four consecutive memory locations, return sum.

Parameters
mPointer to memory where four floats should be incremented
v0double to be added to m[0]
v1double to be added to m[1]
v2double to be added to m[2]
v3double to be added to m[3]
Returns
v0+v1+v2+v3.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::round ( float  a)
inlinestatic

Float round to nearest integer value (in floating-point format).

Parameters
aAny floating-point value
Returns
The nearest integer, represented in floating-point format.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::round ( double  a)
inlinestatic

double round to nearest integer value (in doubleing-point format).

Parameters
aAny doubleing-point value
Returns
The nearest integer, represented in doubleing-point format.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
int gmx::runCommandLineModule ( int  argc,
char *  argv[],
ICommandLineModule *  module 
)

Implements a main() method that runs a single module.

Parameters
argcargc passed to main().
argvargv passed to main().
moduleModule to run.

This method allows for uniform behavior for binaries that only contain a single module without duplicating any of the implementation from CommandLineModuleManager (startup headers, common options etc.).

The signature assumes that module construction does not throw (because otherwise the caller would need to duplicate all the exception handling code). It is possible to move the construction inside the try/catch in this method using an indirection similar to TrajectoryAnalysisCommandLineRunner::runAsMain(), but until that is necessary, the current approach leads to simpler code.

Usage:

int main(int argc, char *argv[])
{
CustomCommandLineModule module;
return gmx::runCommandLineModule(argc, argv, &module);
}

Does not throw. All exceptions are caught and handled internally.

int gmx::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.

Parameters
argcargc passed to main().
argvargv passed to main().
[in]nameName for the module.
[in]descriptionShort description for the module.
factoryFactory method that creates the module to run.

This method allows for uniform behavior for binaries that only contain a single module without duplicating any of the implementation from CommandLineModuleManager (startup headers, common options etc.).

Usage:

class CustomCommandLineOptionsModule : public ICommandLineOptionsModule
{
// <...>
};
static ICommandLineOptionsModule *create()
{
return new CustomCommandLineOptionsModule();
}
int main(int argc, char *argv[])
{
argc, argv, "mymodule", "short description", &create);
}

Does not throw. All exceptions are caught and handled internally.

static float gmx::selectByMask ( float  a,
bool  mask 
)
inlinestatic

Select from single precision variable where boolean is true.

Parameters
aFloating-point variable to select from
maskBoolean selector
Returns
a is selected for true, 0 for false.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::selectByMask ( double  a,
bool  mask 
)
inlinestatic

Select from double precision variable where boolean is true.

Parameters
adouble variable to select from
maskBoolean selector
Returns
a is selected for true, 0 for false.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::selectByMask ( std::int32_t  a,
bool  mask 
)
inlinestatic

Select from integer variable where boolean is true.

Parameters
aInteger variable to select from
maskBoolean selector
Returns
a is selected for true, 0 for false.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::selectByNotMask ( float  a,
bool  mask 
)
inlinestatic

Select from single precision variable where boolean is false.

Parameters
aFloating-point variable to select from
maskBoolean selector
Returns
a is selected for false, 0 for true.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::selectByNotMask ( double  a,
bool  mask 
)
inlinestatic

Select from double precision variable where boolean is false.

Parameters
adouble variable to select from
maskBoolean selector
Returns
a is selected for false, 0 for true.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static std::int32_t gmx::selectByNotMask ( std::int32_t  a,
bool  mask 
)
inlinestatic

Select from integer variable where boolean is false.

Parameters
aInteger variable to select from
maskBoolean selector
Returns
a is selected for false, 0 for true.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static real gmx::series_sinhx ( real  x)
inlinestatic

Maclaurin series for sinh(x)/x.

Used for NH chains and MTTK pressure control. Here, we compute it to 10th order, which might be an overkill. 8th is probably enough, but it's not very much more expensive.

void gmx::setLibraryFileFinder ( const DataFileFinder *  finder)

Sets a finder for location data files from share/top/.

Parameters
[in]finderfinder to set (can be NULL to restore the default finder).

The library does not take ownership of finder. The provided object must remain valid until the global instance is changed by another call to setLibraryFileFinder().

The global instance is used by gmxlibfn() and libopen().

This method is not thread-safe. See setProgramContext(); the same constraints apply here as well.

Does not throw.

static void gmx::simdPrefetch ( void *  m)
static

Prefetch memory at address m.

This typically prefetches one cache line of memory from address m, usually 64bytes or more, but the exact amount will depend on the implementation. On many platforms this is simply a no-op. Technically it might not be part of the SIMD instruction set, but since it is a hardware-specific function that is normally only used in tight loops where we also apply SIMD, it fits well here.

There are no guarantees about the level of cache or temporality, but usually we expect stuff to end up in level 2, and be used in a few hundred clock cycles, after which it stays in cache until evicted (normal caching).

Parameters
mPointer to location prefetch. There are no alignment requirements, but if the pointer is not aligned the prefetch might start at the lower cache line boundary (meaning fewer bytes are prefetched).
static float gmx::sin ( float  x)
inlinestatic

Float sin.

Parameters
xThe argument to evaluate sin for
Returns
Sin(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::sin ( double  x)
inlinestatic

Double sin.

Parameters
xThe argument to evaluate sin for
Returns
Sin(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::sincos ( float  x,
float *  sinval,
float *  cosval 
)
inlinestatic

Float sin & cos.

Parameters
xThe argument to evaluate sin/cos for
[out]sinvalSin(x)
[out]cosvalCos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::sincos ( double  x,
double *  sinval,
double *  cosval 
)
inlinestatic

Double sin & cos.

Parameters
xThe argument to evaluate sin/cos for
[out]sinvalSin(x)
[out]cosvalCos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::sincosSingleAccuracy ( double  x,
double *  sinval,
double *  cosval 
)
inlinestatic

Double sin & cos, but with single accuracy.

Parameters
xThe argument to evaluate sin/cos for
[out]sinvalSin(x)
[out]cosvalCos(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::sinSingleAccuracy ( double  x)
inlinestatic

Double sin, but with single accuracy.

Parameters
xThe argument to evaluate sin for
Returns
Sin(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::sixthroot ( float  x)
inlinestatic

Calculate sixth root of x in single precision.

Parameters
xArgument, must be greater than or equal to zero.
Returns
x^(1/6)

This routine is typically faster than using std::pow().

static double gmx::sixthroot ( double  x)
inlinestatic

Calculate sixth root of x in double precision.

Parameters
xArgument, must be greater than or equal to zero.
Returns
x^(1/6)

This routine is typically faster than using std::pow().

static double gmx::sixthroot ( int  x)
inlinestatic

Calculate sixth root of integer x, return double.

Parameters
xArgument, must be greater than or equal to zero.
Returns
x^(1/6)

This routine is typically faster than using std::pow().

static double gmx::sqrtSingleAccuracy ( double  x)
inlinestatic

Calculate sqrt(x) for double, but with single accuracy.

Parameters
xArgument that must be >=0.
Returns
sqrt(x).
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<typename T >
T gmx::square ( x)

calculate x^2

Template Parameters
TType of argument and return value
Parameters
xargument
Returns
x^2
static void gmx::store ( float *  m,
float  a 
)
inlinestatic

Store contents of float variable to aligned memory m.

Parameters
[out]mPointer to memory.
afloat variable to store
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::store ( double *  m,
double  a 
)
inlinestatic

Store contents of double variable to aligned memory m.

Parameters
[out]mPointer to memory.
adouble variable to store
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::store ( std::int32_t *  m,
std::int32_t  a 
)
inlinestatic

Store contents of integer variable to aligned memory m.

Parameters
[out]mPointer to memory.
ainteger variable to store
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::storeU ( float *  m,
float  a 
)
inlinestatic

Store contents of float variable to unaligned memory m.

Parameters
[out]mPointer to memory, no alignment requirement.
afloat variable to store.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::storeU ( double *  m,
double  a 
)
inlinestatic

Store contents of double variable to unaligned memory m.

Parameters
[out]mPointer to memory, no alignment requirement.
adouble variable to store.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static void gmx::storeU ( std::int32_t *  m,
std::int32_t  a 
)
inlinestatic

Store contents of integer variable to unaligned memory m.

Parameters
[out]mPointer to memory, no alignment requirement.
ainteger variable to store.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::tan ( float  x)
inlinestatic

Float tan.

Parameters
xThe argument to evaluate tan for
Returns
Tan(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::tan ( double  x)
inlinestatic

Double tan.

Parameters
xThe argument to evaluate tan for
Returns
Tan(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::tanSingleAccuracy ( double  x)
inlinestatic

Double tan, but with single accuracy.

Parameters
xThe argument to evaluate tan for
Returns
Tan(x)
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static bool gmx::testBits ( float  a)
inlinestatic

Return true if any bits are set in the float variable.

This function is used to handle bitmasks, mainly for exclusions in the inner kernels. Note that it will return true even for -0.0f (sign bit set), so it is not identical to not-equal.

Parameters
avalue
Returns
True if any bit in a is nonzero.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static bool gmx::testBits ( double  a)
inlinestatic

Return true if any bits are set in the double variable.

This function is used to handle bitmasks, mainly for exclusions in the inner kernels. Note that it will return true even for -0.0 (sign bit set), so it is not identical to not-equal.

Parameters
avalue
Returns
True if any bit in a is nonzero.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static bool gmx::testBits ( std::int32_t  a)
inlinestatic

Return true if any bits are set in the integer variable.

This function is used to handle bitmasks, mainly for exclusions in the inner kernels.

Parameters
avalue
Returns
True if any bit in a is nonzero.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::transposeScatterDecrU ( float *  base,
const std::int32_t  offset[],
float  v0,
float  v1,
float  v2 
)
inlinestatic

Subtract 3 floats from base/offset.

Template Parameters
alignAlignment of the memory to which we write, i.e. distance (measured in elements, not bytes) between index points.
Parameters
[out]basePointer to the start of the memory area
offsetOffset to the start of triplet.
v01st value, subtracted from base[align*offset[0]].
v12nd value, subtracted from base[align*offset[0] + 1].
v23rd value, subtracted from base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::transposeScatterDecrU ( double *  base,
const std::int32_t  offset[],
double  v0,
double  v1,
double  v2 
)
inlinestatic

Subtract 3 doubles from base/offset.

Template Parameters
alignAlignment of the memory to which we write, i.e. distance (measured in elements, not bytes) between index points.
Parameters
[out]basePointer to the start of the memory area
offsetOffset to the start of triplet.
v01st value, subtracted from base[align*offset[0]].
v12nd value, subtracted from base[align*offset[0] + 1].
v23rd value, subtracted from base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::transposeScatterIncrU ( float *  base,
const std::int32_t  offset[],
float  v0,
float  v1,
float  v2 
)
inlinestatic

Add 3 floats to base/offset.

Template Parameters
alignAlignment of the memory to which we write, i.e. distance (measured in elements, not bytes) between index points.
Parameters
[out]basePointer to the start of the memory area
offsetOffset to the start of triplet.
v01st value, added to base[align*offset[0]].
v12nd value, added to base[align*offset[0] + 1].
v23rd value, added to base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::transposeScatterIncrU ( double *  base,
const std::int32_t  offset[],
double  v0,
double  v1,
double  v2 
)
inlinestatic

Add 3 doubles to base/offset.

Template Parameters
alignAlignment of the memory to which we write, i.e. distance (measured in elements, not bytes) between index points.
Parameters
[out]basePointer to the start of the memory area
offsetOffset to the start of triplet.
v01st value, added to base[align*offset[0]].
v12nd value, added to base[align*offset[0] + 1].
v23rd value, added to base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::transposeScatterStoreU ( float *  base,
const std::int32_t  offset[],
float  v0,
float  v1,
float  v2 
)
inlinestatic

Store 3 floats to 3 to base/offset.

Template Parameters
alignAlignment of the memory to which we write, i.e. distance (measured in elements, not bytes) between index points.
Parameters
[out]basePointer to the start of the memory area
offsetOffset to the start of triplet.
v01st value, written to base[align*offset[0]].
v12nd value, written to base[align*offset[0] + 1].
v23rd value, written to base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
template<int align>
static void gmx::transposeScatterStoreU ( double *  base,
const std::int32_t  offset[],
double  v0,
double  v1,
double  v2 
)
inlinestatic

Store 3 doubles to 3 to base/offset.

Template Parameters
alignAlignment of the memory to which we write, i.e. distance (measured in elements, not bytes) between index points.
Parameters
[out]basePointer to the start of the memory area
offsetOffset to the start of triplet.
v01st value, written to base[align*offset[0]].
v12nd value, written to base[align*offset[0] + 1].
v23rd value, written to base[align*offset[0] + 2].
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static float gmx::trunc ( float  a)
inlinestatic

Truncate float, i.e. round towards zero - common hardware instruction.

Parameters
aAny floating-point value
Returns
Integer rounded towards zero, represented in floating-point format.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.
static double gmx::trunc ( double  a)
inlinestatic

Truncate double, i.e. round towards zero - common hardware instruction.

Parameters
aAny doubleing-point value
Returns
Integer rounded towards zero, represented in doubleing-point format.
Note
This function might be superficially meaningless, but it helps us to write templated SIMD/non-SIMD code. For clarity it should not be used outside such code.