Gromacs  2026.0-dev-20241204-d69d709
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Todo List
Member AtomProperties::atomNumberFromElement (const char *element)
This should be made const once the lazy implementation is done properly for the class.
Member AtomProperties::elementFromAtomNumber (int atomNumber)
This should be made const once the lazy implementation is done properly for the class.
Class BondedInteractionList
This should be merged with BondedInteraction.
Member checkDeviceBuffer (DeviceBuffer< T > buffer, gmx_unused int requiredSize)
Add checks on the buffer size when it will be possible.
Member clearModificationBlock (MoleculePatchDatabase *globalPatches)
Remove once constructor/destructor takes care of all of this.
Member copyPreprocessResidues (const PreprocessResidue &s, PreprocessResidue *d, t_symtab *symtab)
Remove once copy can be done directly.
Class df_history_t
Split out into microstate and observables history.
File domdec_network.h
Wrap the raw dd_bcast in md.cpp into a higher-level function in the domdec module, then this file can be module-internal.
Member findDevices ()
: Check if errors do propagate in OpenCL as they do in CUDA and whether there is a mechanism to "clear" them.
Member fit_acf (int ncorr, int fitfn, const gmx_output_env_t *oenv, gmx_bool bVerbose, real tbeginfit, real tendfit, real dt, real c1[], real *fit)
check parameters
Member getDeviceComputeUnitFactor (const DeviceInformation &deviceInfo)
: Handled AMD RDNA?
Class gmx::AbstractAnalysisArrayData
Add support for multiple data sets.
Class gmx::AbstractAnalysisData
Improve the exception-handling semantics. In most cases, it doesn't make much sense to continue data processing after one module fails, but having the alternative would not hurt.
Member gmx::AbstractAnalysisData::addColumnModule (int col, int span, const AnalysisDataModulePointer &module)

This method doesn't currently work in all cases with multipoint data or with multiple data sets. In particular, if the added module requests storage and uses getDataFrame(), it will behave unpredictably (most likely asserts).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).

Member gmx::AbstractAnalysisData::applyModule (IAnalysisDataModule *module)
Currently, this method may not work correctly if module requests storage (addModule() has the same problem if called after data is started).
Member gmx::AbstractOptionStorage::processSet ()=0
Improve the call semantics.
Class gmx::AnalysisData
Parallel implementation is not complete.
Class gmx::AnalysisDataStorage
Proper multi-threaded implementation.
Class gmx::AnalysisNeighborhood
Generalize the exclusion machinery to make it easier to use for other cases than atom-atom exclusions from the topology.
Class gmx::AnalysisNeighborhoodSearch

Make it such that reset() is not necessary to call in code that repeatedly assigns the result of AnalysisNeighborhood::initSearch() to the same variable (see sm_distance.cpp).

Consider removing minimumDistance(), as nearestPoint() already returns the distance.

Member gmx::applyGlobalSimulationState (const SimulationInput &simulationInput, PartialDeserializedTprFile *partialDeserializedTpr, t_state *globalState, t_inputrec *inputrec, gmx_mtop_t *globalTopology)
Factor the logic for global/local and main-rank-checks. The SimulationInput utilities should behave properly for the various distributed data scenarios. Consider supplying data directly to the consumers rather than exposing the implementation details of the legacy aggregate types.
Member gmx::applyLocalState (const SimulationInput &simulationInput, t_fileio *logfio, const t_commrec *cr, int *dd_nc, t_inputrec *ir, t_state *state, ObservablesHistory *observablesHistory, bool reproducibilityRequested, const MDModulesNotifiers &notifiers, gmx::ReadCheckpointDataHolder *modularSimulatorCheckpointData, bool useModularSimulator)

Factor the distributed data aspects of simulation input data into the SimulationInput implementation.

Consider refactoring to decouple the checkpoint facility from its consumers (state, observablesHistory, mdModulesNotifiers, and parts of ir).

Consider refactoring to decouple the checkpoint facility from its consumers (state, observablesHistory, mdModulesNotifiers, and parts of ir).

Consider refactoring to decouple the checkpoint facility from its consumers (state, observablesHistory, mdModulesNotifiers, and parts of ir).

Class gmx::ArrayRef< typename >
This class is not complete. There are likely also methods missing (not required for current usage).
Class gmx::Awh
Update parameter reading and checkpointing, when general C++ framework is ready.
Member gmx::BoxMatrix
Implement a full replacement for C-style real[DIM][DIM]
Member gmx::buildSupportsNonbondedOnGpu (std::string *error)
Move this to NB module once it exists.
Member gmx::CheckpointHandler::decideIfCheckpointingThisStep (bool bNS, bool bFirstStep, bool bLastStep)
Change these bools to enums to make calls more self-explanatory
Member gmx::checkUserGpuIds (ArrayRef< const std::unique_ptr< DeviceInformation >> deviceInfoList, ArrayRef< const int > compatibleGpus, ArrayRef< const int > gpuIds)
Note that the selected GPUs can be different on each rank, and the IDs of compatible GPUs can be different on each node, so this routine ought to do communication to determine whether all ranks are able to proceed. Currently this relies on the MPI runtime to kill the other processes because GROMACS lacks the appropriate infrastructure to do a good job of coordinating error messages and behaviour across MPMD ranks and multiple simulations.
Class gmx::ClfftInitializer

Consider making a composite object that also handles on-demand compilation, managing lifetime of PME FFT kernel programs to avoid exhausting resources and/or recompiling kernels previously used. See Issue #2535.

Consider implementing an appropriate flavor of the nifty counter idiom so that both static initialization and deinitialization can work in a fast, leak-free, and thread-safe way without imposing constraints on the calling code. See Issue #2535.

Class gmx::compat::not_null< T >
Eliminate this when we require a version of C++ that supports std::not_null.
Member gmx::computeSpecialForces (FILE *fplog, const t_commrec *cr, const t_inputrec &inputrec, Awh *awh, gmx_enfrot *enforcedRotation, ImdSession *imdSession, pull_t *pull_work, int64_t step, double t, gmx_wallcycle *wcycle, ForceProviders *forceProviders, const matrix box, ArrayRef< const RVec > x, const t_mdatoms *mdatoms, ArrayRef< const real > lambda, const StepWorkload &stepWork, ForceWithVirial *forceWithVirialMtsLevel0, ForceWithVirial *forceWithVirialMtsLevel1, gmx_enerdata_t *enerd, gmx_edsam *ed, bool didNeighborSearch)

Remove didNeighborSearch, which is used incorrectly.

Convert all other algorithms called here to ForceProviders.

Member gmx::Constraints::setConstraints (gmx_localtop_t *top, int numAtoms, int numHomeAtoms, gmx::ArrayRef< const real > masses, gmx::ArrayRef< const real > inverseMasses, bool hasMassPerturbedAtoms, real lambda, gmx::ArrayRef< const unsigned short > cFREEZE)
Make this a callback that is called automatically once a new domain has been made.
Member gmx::CoordinateFileFlags
Use std::bitset<16> for the entries.
Member gmx::cshake (const int iatom[], int ncon, int *nnit, int maxnit, ArrayRef< const real > constraint_distance_squared, ArrayRef< RVec > positions, const t_pbc *pbc, ArrayRef< const RVec > initial_displacements, ArrayRef< const real > half_of_reduced_mass, real omega, ArrayRef< const real > invmass, ArrayRef< const real > distance_squared_tolerance, ArrayRef< real > scaled_lagrange_multiplier, int *nerror)
Make SHAKE use better data structures, in particular for iatom.
Member gmx::DataFileInfo::fromDefaultDir_
Consider replacing with an enum that identifies the source (current dir, GMXLIB, default).
Member gmx::detectAllDeviceInformation (const PhysicalNodeCommunicator &physicalNodeComm)
Coordinating the efficient detection of devices across multiple ranks per node should be separated from the lower-level hardware detection. See https://gitlab.com/gromacs/gromacs/-/issues/3650.
Class gmx::EnergyAnalysisFrame
Make this supersede t_enxframe.
Class gmx::ExceptionInitializer
With the exception of the reason string, information added with this class is not currently accessible through any public API, except for calling printFatalErrorMessage(), formatExceptionMessageToString() or formatExceptionMessageToFile(). This is not implemented as there is not yet need for it, and it is not clear what would be the best alternative for the access. It should be possible to refactor the internal implementation to suit the needs of such external access without requiring changes in code that throws these exceptions.
Member gmx::FileNameOption::libraryFile (bool bLibrary=true)
Currently, this flag only affects the help output. Callers must take care themselves to actually search the file in the library directories. It would be nicer to do this searching within the file name option implementation.
Class gmx::FileNameOptionManager
Most of the functionality in this class is specific to command line parsing, so it would be cleaner to replace this with an interface, and have the actual code in the commandline module.
Member gmx::getPageSize ()
Move this function into sysinfo.cpp where other OS-specific code/includes live
Member gmx::gmx_mdrun (MPI_Comm communicator, const gmx_hw_info_t &hwinfo, int argc, char *argv[])
Progress on https://gitlab.com/gromacs/gromacs/-/issues/3774 will remove the need of test binaries to call gmx_mdrun in a way that is different from the command-line and gmxapi.
Member gmx::gpu_try_finish_task (NbnxmGpu *nb, const StepWorkload &stepWork, const AtomLocality aloc, real *e_lj, real *e_el, ArrayRef< RVec > shiftForces, GpuTaskCompletion completionKind)
Move into shared source file, perhaps including cuda_runtime.h if needed for any remaining CUDA-specific objects.
Member gmx::GpuTaskAssignments::reportGpuUsage (const MDLogger &mdlog, bool printHostName, PmeRunMode pmeRunMode, const SimulationWorkload &simulationWork)
It could be useful to report also whether any nodes differed, and in what way.
Class gmx::GpuTaskAssignmentsBuilder

Later, this might become a loop over all registered modules relevant to the mdp inputs, to find those that have such tasks.

Later we might need the concept of computeTasksOnThisRank, from which we construct gpuTasksOnThisRank.

Member gmx::GromacsException::prependContext (const std::string &context)
The added information is currently not accessible through what(), nor through any other means except for calling printFatalErrorMessage(), formatExceptionMessageToString() or formatExceptionMessageToFile(). See ExceptionInitializer for more discussion.
Member gmx::HelpWriterContext::setReplacement (const std::string &search, const std::string &replace)
Improve semantics if the same search item is set multiple times.
Class gmx::HostAllocationPolicy
As a minor optimization, consider also having a stateless version of this policy, which might be slightly faster or more convenient to use in the cases where it is known at compile time that the allocation will be used to transfer to a GPU.
Class gmx::InteractiveMD
If adding doxygen stubs actual add the full stub.
Class gmx::IonSwapping
Add full information.
Class gmx::IRestraintPotential
Template headers can help to build compatible calculation methods with different input requirements. For reference, see https://github.com/kassonlab/sample_restraint
Member gmx::IRestraintPotential::evaluate (Vector r1, Vector r2, double t)=0
The virtual function call should be replaced by a (table of) function objects retrieved before the run.
Class gmx::LegacyMdrunOptions

Modules in mdrun should acquire proper option handling so that all of these declarations and defaults are local to the modules.

Contextual aspects, such as working directory and environment variable handling are more properly the role of SimulationContext, and should be moved there.

Member gmx::LegacyMdrunOptions::oenv
Clarify initialization, ownership, and lifetime.
Member gmx::lincsKernel (sycl::handler &cgh, const int numConstraintsThreads, const AtomPair *__restrict__ gm_constraints, const float *__restrict__ gm_constraintsTargetLengths, const int *__restrict__ gm_coupledConstraintsCounts, const int *__restrict__ gm_coupledConstraintsIndices, const float *__restrict__ gm_massFactors, float *__restrict__ gm_matrixA, const float *__restrict__ gm_inverseMasses, const int numIterations, const int expansionOrder, const Float3 *__restrict__ gm_x, Float3 *__restrict__ gm_xp, const float invdt, Float3 *__restrict__ gm_v, float *__restrict__ gm_virialScaled, PbcAiuc pbcAiuc)

Reduce synchronization overhead. Some ideas are:

  1. Consider going to warp-level synchronization for the coupled constraints.
  2. Move more data to local/shared memory and try to get rid of atomic operations (at least on the device level).
  3. Use analytical solution for matrix A inversion.
  4. Introduce mapping of thread id to both single constraint and single atom, thus designating Nth threads to deal with Nat <= Nth coupled atoms and Nc <= Nth coupled constraints. See Issue #2885 for details (https://gitlab.com/gromacs/gromacs/-/issues/2885)

The use of restrict for gm_xp and gm_v causes failure, probably because of the atomic operations. Investigate this issue further.

Member gmx::makeOpenClInternalErrorString (const char *message, cl_int status)
Make use of this function more.
Class gmx::MDAtoms
The group-scheme kernels needed a plain C-style t_mdatoms, so this type combines that with the memory management needed for efficient PME on GPU transfers. The mdatoms_ member should be removed.
Class gmx::Mdrunner

Most of the attributes should be declared by specific modules as command-line options. Accordingly, they do not conform to the naming scheme, because that would make for a lot of noise in the diff, only to have it change again when the options move to their modules.

Preparing logging and MPI contexts could probably be a higher-level responsibility, so that an Mdrunner would get made without needing to re-initialize these components (as currently happens always for the main rank, and differently for the spawned ranks with thread-MPI).

Member gmx::Mdrunner::addPotential (std::shared_ptr< IRestraintPotential > restraint, const std::string &name)
Mdrunner should fetch such resources from the SimulationContext rather than offering this public interface.
Member gmx::MdrunnerBuilder::addHardwareDetectionResult (const gmx_hw_info_t *hwinfo)
It would be better to express this as either a not-null const pointer or a const reference, but neither of those is consistent with incremental building of an object. This motivates future work to be able to make a deep copy of the detection result. See https://gitlab.com/gromacs/gromacs/-/issues/3650
Member gmx::NumTempScaleValues
Unify with similar enum in CPU update module
Member gmx::openTNG (const std::string &name, const Selection &sel, const gmx_mtop_t *mtop)
Those should be methods in a replacement for t_trxstatus instead.
Member gmx::OptionFlag
The flags related to default values are confusing, consider reorganizing them.
Class gmx::OutputAdapterContainer

Keeping track of those abilities has to be the responsibility of an object implementing and interface that declares it capabilities and will execute the the function of writing to a file.

This could be changed to instead construct the container with a pointer to an ICoordinateOutputWriter that can be passed to the IOutputAdapter modules to check their cross-dependencies.

Member gmx::reportGpuUsage (const MDLogger &mdlog, ArrayRef< const GpuTaskAssignment > gpuTaskAssignmentOnRanksOfThisNode, size_t numGpuTasksOnThisNode, size_t numPpRanks, bool printHostName, PmeRunMode pmeRunMode, const SimulationWorkload &simulationWork)
It could be useful to report also whether any nodes differed, and in what way.
Class gmx::RestraintManager
This should be generalized as work description and factory functions in Context.
Member gmx::Selection::setEvaluateVelocities (bool bEnabled)
Implement it such that in the above case, hasVelocities() will return false for such frames.
Class gmx::SelectionOption

Support for specifying that an option accepts, e.g., two to four selections. Currently, only a fixed count or any number of selections is possible.

Class gmx::SimulationContext

Clarify and strengthen the invariant represented by SimulationContext.

This class should also handle aspects of simulation environment such as working directory and environment variables.

Member gmx::SimulationContext::SimulationContext (MPI_Comm communicator, ArrayRef< const std::string > multiSimDirectoryNames)
Refine distribution of environment management. There should be a context level at which only the current simulator directory matters, and a level above which encapsulates multisim details in a specialized type.
Class gmx::SimulatorEnv
Fix doxygen checks.
Class gmx::SimulatorStateData
Think of a better name and annoy people that forget to add documentation for their code.
Class gmx::test::AnalysisDataTestFixture
Support for arbitrary AnalysisDataValues (errors and missing values).
Member gmx::test::checkEnergiesAgainstReferenceData (const std::string &energyFilename, const EnergyTermsToCompare &energyTermsToCompare, TestReferenceChecker *checker, MaxNumFrames maxNumEnergyFrames)
This is quite similar to the functionality used in PmeTest, and we should consider reducing the duplication.
Member gmx::test::compareBox (const TrajectoryFrame &reference, const TrajectoryFrame &test, const TrajectoryFrameMatchSettings &matchSettings, const FloatingPointTolerance tolerance)
This could be streamlined when we have a proper 3D matrix class and view.
Class gmx::test::FloatingPointTolerance
The factory methods that take ULP difference could be better formulated as methods that take the acceptable number of incorrect bits and/or the number of accurate bits.
Member gmx::test::outputParameters ()
Test nstlog, nstdhdl, nstxout-compressed
Member gmx::test::throwIfNonEmptyAndOnlyWhitespace (const std::string &s, const char *id)
Eliminate this limitation of TinyXML2. See e.g. https://github.com/leethomason/tinyxml2/issues/432
Member gmx::TextWriter::wrapperSettings ()
Wrapping is not currently implemented for code that writes partial lines with writeString().
Member gmx::TopologyInformation::fillFromInputFile (const std::string &filename)
This should throw upon error but currently does not.
Class gmx::TrajectoryAnalysisSettings
Remove plain flags from the public interface.
Class gmx_multisim_t
Change this to class
Member gmx_pme_init (const t_commrec *cr, const NumPmeDomains &numPmeDomains, const t_inputrec *ir, const matrix box, real haloExtentForAtomDisplacement, gmx_bool bFreeEnergy_q, gmx_bool bFreeEnergy_lj, gmx_bool bReproducible, real ewaldcoeff_q, real ewaldcoeff_lj, int nthread, PmeRunMode runMode, PmeGpu *pmeGpu, const DeviceContext *deviceContext, const DeviceStream *deviceStream, const PmeGpuProgram *pmeGpuProgram, const gmx::MDLogger &mdlog, std::shared_ptr< PmeGridsStorage > pmeGridsStoragePtr)
We should evolve something like a GpuManager that holds DeviceInformation* and PmeGpuProgram* and perhaps other related things whose lifetime can/should exceed that of a task (or perhaps task manager). See Issue #2522.
Member GMX_UNUSED_VALUE (value)
Deprecated - use gmx_unused
File handlerestart.h
There may be other code in runner.cpp etc. that can usefully live here
Class history_t
Rename this with a more descriptive name.
File hostallocator.h
This should not be in the public API, but it needs to be for the moment because state.h is in that API.
Member initParamLookupTable (DeviceBuffer< ValueType > *deviceBuffer, DeviceTexture *, const ValueType *hostBuffer, int numValues, const DeviceContext &deviceContext, const DeviceStream &)
Decide if using image2d is most efficient.
Member initParamLookupTable (DeviceBuffer< ValueType > *deviceBuffer, DeviceTexture *, const ValueType *hostBuffer, int numValues, const DeviceContext &deviceContext, const DeviceStream &deviceStream)
Test if using textures is still relevant on modern hardware.
File iserializer.h
Generalize and transfer serialization functionality used in mrc density file header serialization to here.
Group module_domdec
Get domdec stuff out of mdtypes/commrec.h
Group module_imd
Rename the directory, source and test files to interactive_md, and prefer type names like InteractiveMDSession. Avoid ambiguity with IMDModule.
Group module_modularsimulator
Can we link to docs/doxygen/lib/modularsimulator.md?
File pbc_aiuc.h
CPU, GPU and SIMD routines essentially do the same operations on different data-types. Currently this leads to code duplication, which has to be resolved. For details, see Issue #2863 https://gitlab.com/gromacs/gromacs/-/issues/2863
Member pbcDxAiuc (const PbcAiuc &pbcAiuc, const rvec &r1, const rvec &r2, rvec dr)
This routine operates on rvec types and uses PbcAiuc to define periodic box, but essentially does the same thing as SIMD and GPU version. These will have to be unified in future to avoid code duplication. See Issue #2863: https://gitlab.com/gromacs/gromacs/-/issues/2863
Member pbcDxAiucSycl (const PbcAiuc &pbcAiuc, const rvec &r1, const rvec &r2, rvec dr)
This routine operates on rvec types and uses PbcAiuc to define periodic box, but essentially does the same thing as SIMD and GPU version. These will have to be unified in future to avoid code duplication. See Issue #2863: https://gitlab.com/gromacs/gromacs/-/issues/2863
Member pbcDxAiucSycl (const PbcAiuc &pbcAiuc, const sycl::float4 &r1, const sycl::float4 &r2, Float3 &dr)
This routine uses CUDA float4 types for input coordinates and returns in rvec data-type. Other than that, it does essentially the same thing as the version below, as well as SIMD and CPU versions. This routine is used in GPU listed forces module. To avoid code duplication, these implementations should be unified. See Issue #2863: https://gitlab.com/gromacs/gromacs/-/issues/2863
Member pme_gpu_reinit_computation (const gmx_pme_t *pme, bool gpuGraphWithSeparatePmeRank, gmx_wallcycle *wcycle)
Rename this function to clear – it clearly only does output resetting and we should be clear about what the function does..
File pme_gpu_settings.h
Some renaming/refactoring, which does not impair the performance: – PmeGpuSettings -> PmeGpuTasks
File pme_gpu_staging.h
Some renaming/refactoring, which does not impair the performance: – bringing the function names up to guidelines – PmeGpuSettings -> PmeGpuTasks – refining GPU notation application (#2053) – renaming coefficients to charges (?)
Member pme_gpu_task_enabled (const gmx_pme_t *pme)
This is a rather static data that should be managed by the hardware assignment manager. For now, it is synonymous with the active PME codepath (in the absence of dynamic switching).
File pme_gpu_types_host.h
Some renaming/refactoring, which does not impair the performance: – bringing the function names up to guidelines – PmeGpuSettings -> PmeGpuTasks – refining GPU notation application (#2053) – renaming coefficients to charges (?)
Member pme_run_mode (const gmx_pme_t *pme)
This is a rather static data that should be managed by the higher level task scheduler.
Member PmeRunMode
: make this enum class with gmx_pme_t C++ refactoring
Member PreprocessingAtomTypes::atomTypeFromName (const std::string &str) const
The code should be changed to instead use a gmx::compat version of std::optional to return an iterator to the element being searched, or an empty optional construct if the entry has not been found.
Member PreprocessingBondAtomType::bondAtomTypeFromName (const std::string &str) const
The code should be changed to instead use a gmx::compat version of std::optional to return a handle to the element being searched, or an empty optional construct if the entry has not been found.
Member set_over_alloc_dd (bool set)
This is mdrun-specific, so it might be better to put this and over_alloc_dd() much higher up.
File simulationsignal.h
Move this to mdrunutility module alongside gathering multi-simulation communication infrastructure there.
File snprintf.h
When all callers of snprintf compile as C++, perhaps use gmx::formatString() everywhere instead of snprintf.
Class t_matrix
nx and ny should probably be replaced by operations on the extent of matrix, but currently there is only limited ability to iterate over contents of matrix.
Class t_state
Move pure observables history to ObservablesHistory.