Gromacs  2019
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Todo List
Member areAllGpuDevicesFromAmd (const gmx_gpu_info_t &gpuInfo)
An enumeration visible in the hardware module would make such checks more configurable, if we discover other needs in future.
Member buildSupportsNonbondedOnGpu (std::string *error)
Move this to NB module once it exists.
Member ddSendrecv (const gmx_domdec_t *dd, int ddDimensionIndex, int direction, T *sendBuffer, int numElementsToSend, T *receiveBuffer, int numElementsToReceive)
This function template is deprecated, new calls should be made to the version taking ArrayRef parameters and this function template removed when unused.
Member df_history_t
Split out into microstate and observables history.
Member DIR_SEPARATOR
Get rid of this (Redmine #950). It is not necessary for constructing paths on the systems that it currently supports, and is not reliable in parsing input paths either, since Windows needs to accept both instead of only DIR_SEPARATOR. At the very least, we should refactor the clients of this header so that they operate upon path objects rather than raw path strings.
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 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
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, 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.
Member gmx::AnalysisDataPlotSettings::plotFormat () const
Use a proper enum.
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.

Class gmx::ArrayRef< T >
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::checkUserGpuIds (const gmx_gpu_info_t &gpu_info, const std::vector< int > &compatibleGpus, const std::vector< 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::compat::not_null< T >
Eliminate this when we require a version of C++ that supports std::not_null.
Member gmx::Constraints::setConstraints (const gmx_localtop_t &top, const t_mdatoms &md)
Make this a callback that is called automatically once a new domain has been made.
Member gmx::cshake (const int iatom[], int ncon, int *nnit, int maxnit, const real constraint_distance_squared[], real positions[], const real initial_displacements[], const real half_of_reduced_mass[], real omega, const real invmass[], const real distance_squared_tolerance[], real scaled_lagrange_multiplier[], int *nerror)
Make SHAKE use better data structures, in particular for iatom.
Member gmx::DataFileInfo::bFromDefaultDir
Consider replacing with an enum that identifies the source (current dir, GMXLIB, default).
Class gmx::detail::PaddingTraits< T >
Consider explicitly tying these types to the SimdTrait types. That would require depending on the SIMD module, or extracting the traits from it. This would also permit maxSimdWidthOfBaseType to be set more efficiently, e.g. as a metaprogramming max over the maximum width from different implementations.
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::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.
Member gmx::hwinfo_g
This should become a shared_ptr owned by e.g. Mdrunner::runner() that is shared across any threads as needed (e.g. for thread-MPI). That offers about the same run time performance as we get here, and avoids a lot of custom code.
Member gmx::initializeClfftLibrary ()

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 Redmine #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 Redmine #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 Redmine #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 Redmine #2535.

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, MPI environment, 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.
Class gmx::MDAtoms
Refactor this class and rename MDAtoms once the group scheme is 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 master rank, and differently for the spawned ranks with thread-MPI).

Member gmx::Mdrunner::addPotential (std::shared_ptr< IRestraintPotential > restraint, std::string name)
Mdrunner should fetch such resources from the SimulationContext rather than offering this public interface.
Member gmx::OptionFlag
The flags related to default values are confusing, consider reorganizing them.
Member gmx::PaddedVector< T, Allocator >::PaddedVector (size_type count, value_type const &v)
This should also be specialized by allocator, but std::vector for storage_ doesn't have such a constructor before C++14. Resolve.
Member gmx::PaddedVector< T, Allocator >::PaddedVector (size_type count)
This should also be specialized by allocator, but std::vector for storage_ doesn't have such a constructor before C++14. Resolve.
Class gmx::PpForceWorkload
Add more responsibilities, including whether GPUs are in use, whether there is PME work, whether DD is active, whether NB local/nonlocal regions have work, whether forces/virial/energy are required.
Member gmx::Regex::Regex (const char *value)
Consider whether some other exception type would be better.
Member gmx::reportGpuUsage (const MDLogger &mdlog, bool userSetGpuIds, const GpuTaskAssignments &gpuTaskAssignmentOnRanksOfThisNode, size_t numGpuTasksOnThisNode, size_t numPpRanks, bool bPrintHostName, bool useGpuForBonded, PmeRunMode pmeRunMode)
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
This class should also handle aspects of simulation environment such as working directory and environment variables.
Member gmx::SimulationContext::communicationRecord_
Context should own communicator.
Class gmx::test::AnalysisDataTestFixture
Support for arbitrary AnalysisDataValues (errors and missing values).
Member gmx::test::checkEnergiesAgainstReferenceData (const std::string &energyFilename, const EnergyTolerances &energiesToMatch, TestReferenceChecker *checker)
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::getKeys (const Map &m)
This returns a copy of the keys, which is convenient, but inefficient. Alternatively, this could return a view of the keys from a range rather than a container, but there's no implementation of that in C++11 at the moment.
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.
Member gmx_pme_init (const t_commrec *cr, const NumPmeDomains &numPmeDomains, const t_inputrec *ir, int homenr, gmx_bool bFreeEnergy_q, gmx_bool bFreeEnergy_lj, gmx_bool bReproducible, real ewaldcoeff_q, real ewaldcoeff_lj, int nthread, PmeRunMode runMode, PmeGpu *pmeGpu, const gmx_device_info_t *gpuInfo, PmeGpuProgramHandle pmeGpuProgram, const gmx::MDLogger &mdlog)
We should evolve something like a GpuManager that holds gmx_device_info_t * and PmeGpuProgramHandle and perhaps other related things whose lifetime can/should exceed that of a task (or perhaps task manager). See Redmine #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.
Group module_domdec
Get domdec stuff out of mdtypes/commrec.h
Member pmalloc (void **h_ptr, size_t nbytes)
This function should allocate page-locked memory to help reduce D2H and H2D transfer times, similar with pmalloc from pmalloc_cuda.cu.
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_gpu_reinit_computation (const gmx_pme_t *pme, gmx_wallcycle *wcycle)
Rename this function to clear – it clearly only does output resetting and we should be clear about what the function does..
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).
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
File pointers.h
Replace comments referring to c++14-constexpr with constexpr when we require C++14.
Member set_over_alloc_dd (gmx_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_state
Move pure observables history to ObservablesHistory.