Gromacs  2021.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Typedefs | Enumerations | Functions | Variables | Files
+ Collaboration diagram for The modular simulator:

Description

The modular simulator improves extensibility, adds Monte Carlo capabilities, promotes data locality and communication via interfaces, supports multi-stepping integrators, and paves the way for some task parallelism.

For more information, see page_modularsimulator

Todo:
Can we link to docs/doxygen/lib/modularsimulator.md?
Author
Pascal Merz pasca.nosp@m.l.me.nosp@m.rz@me.nosp@m..com

Classes

struct  gmx::IsSerializableType< T >
 Struct allowing to check if data is serializable through the KeyValueTree serializer. More...
 
struct  gmx::IsSerializableEnum< T, bool >
 Struct allowing to check if enum has a serializable underlying type. More...
 
class  gmx::CheckpointData< operation >
 } More...
 
struct  gmx::test::anonymous_namespace{checkpointdata.cpp}::IsVectorOfSerializableType< T >
 Struct allowing to check if type is vector of serializable data. More...
 
class  gmx::CheckpointHelper
 Checkpoint helper. More...
 
class  gmx::CheckpointHelperBuilder
 Builder for the checkpoint helper. More...
 
class  gmx::CompositeSimulatorElement
 Composite simulator element. More...
 
class  gmx::ComputeGlobalsElement< algorithm >
 Encapsulate the calls to compute_globals More...
 
class  gmx::ConstraintsElement< variable >
 Constraints element. More...
 
class  gmx::DomDecHelper
 Infrastructure element responsible for domain decomposition. More...
 
class  gmx::EnergyData
 Data class managing energies. More...
 
class  gmx::EnergyData::Element
 Element for EnergyData. More...
 
class  gmx::ForceElement
 Force element. More...
 
class  gmx::FreeEnergyPerturbationData
 The free energy perturbation data. More...
 
class  gmx::ModularSimulator
 The modular simulator. More...
 
class  gmx::ISimulatorElement
 The general interface for elements of the modular simulator. More...
 
class  gmx::ISignaller
 The general Signaller interface. More...
 
class  gmx::INeighborSearchSignallerClient
 Interface for clients of the NeighborSearchSignaller. More...
 
class  gmx::ILastStepSignallerClient
 Interface for clients of the LastStepSignaller. More...
 
class  gmx::ILoggingSignallerClient
 Interface for clients of the LoggingSignaller. More...
 
class  gmx::IEnergySignallerClient
 Interface for clients of the EnergySignaller. More...
 
class  gmx::ITrajectorySignallerClient
 Interface for signaller clients of the TrajectoryElement. More...
 
class  gmx::ITrajectoryWriterClient
 Interface for writer clients of the TrajectoryElement. More...
 
class  gmx::ITopologyHolderClient
 Client requiring read access to the local topology. More...
 
class  gmx::ICheckpointHelperClient
 Client that needs to store data during checkpointing. More...
 
class  gmx::ElementNotFoundError
 Exception class signalling that a requested element was not found. More...
 
class  gmx::MissingElementConnectionError
 Exception class signalling that elements were not connected properly. More...
 
class  gmx::SimulationAlgorithmSetupError
 Exception class signalling that the ModularSimulatorAlgorithm was set up in an incompatible way. More...
 
class  gmx::CheckpointError
 Exception class signalling an error in reading or writing modular checkpoints. More...
 
struct  gmx::PropagatorThermostatConnection
 Information needed to connect a propagator to a thermostat. More...
 
struct  gmx::PropagatorBarostatConnection
 Information needed to connect a propagator to a barostat. More...
 
class  gmx::ParrinelloRahmanBarostat
 Element implementing the Parrinello-Rahman barostat. More...
 
class  gmx::PmeLoadBalanceHelper
 Infrastructure element responsible for PME load balancing. More...
 
class  gmx::Propagator< algorithm >
 Propagator element. More...
 
class  gmx::SignallerBuilder< Signaller >
 Builder for signallers. More...
 
class  gmx::NeighborSearchSignaller
 Element signalling a neighbor search step. More...
 
class  gmx::LastStepSignaller
 Element signalling the last step. More...
 
class  gmx::LoggingSignaller
 Element signalling a logging step. More...
 
class  gmx::TrajectorySignaller
 Element signalling trajectory writing. More...
 
class  gmx::EnergySignaller
 Element signalling energy related special steps. More...
 
class  gmx::ModularSimulatorAlgorithm
 The modular simulator. More...
 
class  gmx::StatePropagatorData
 StatePropagatorData and associated data. More...
 
class  gmx::TopologyHolder
 Object holding the topology. More...
 
class  gmx::TopologyHolder::Builder
 Builder for the topology holder. More...
 
class  gmx::TrajectoryElement
 Trajectory element signals and handles trajectory writing. More...
 
class  gmx::TrajectoryElementBuilder
 Build the TrajectoryElement More...
 
class  gmx::VelocityScalingTemperatureCoupling
 Element implementing the a velocity-scaling thermostat. More...
 

Typedefs

typedef std::function< void()> gmx::CheckBondedInteractionsCallback
 The function type allowing to request a check of the number of bonded interactions.
 
using gmx::Step = int64_t
 Step number.
 
using gmx::Time = double
 Simulation time.
 
typedef std::function< void()> gmx::SimulatorRunFunction
 The function type that can be scheduled to be run during the simulator run.
 
typedef std::function< void(SimulatorRunFunction)> gmx::RegisterRunFunction
 The function type that allows to register run functions.
 
typedef std::function< void(Step,
Time)> 
gmx::SignallerCallback
 The function type that can be registered to signallers for callback.
 
typedef std::function< void(gmx_mdoutf
*, Step, Time, bool, bool)> 
gmx::ITrajectoryWriterCallback
 Function type for trajectory writing clients.
 
typedef std::function< void(Step)> gmx::PropagatorCallback
 Generic callback to the propagator.
 

Enumerations

enum  gmx::CheckpointDataOperation { Read, Write, Count }
 The operations on CheckpointData. More...
 
enum  gmx::ComputeGlobalsAlgorithm { LeapFrog, VelocityVerlet }
 The different global reduction schemes we know about.
 
enum  gmx::EnergySignallerEvent { EnergyCalculationStep, VirialCalculationStep, FreeEnergyCalculationStep }
 The energy events signalled by the EnergySignaller.
 
enum  gmx::TrajectoryEvent { StateWritingStep, EnergyWritingStep }
 The trajectory writing events.
 
enum  gmx::ModularSimulatorBuilderState { AcceptingClientRegistrations, NotAcceptingClientRegistrations }
 Enum allowing builders to store whether they can accept client registrations.
 
enum  gmx::RegisterWithThermostat { True, False }
 Whether built propagator should be registered with thermostat.
 
enum  gmx::RegisterWithBarostat { True, False }
 Whether built propagator should be registered with barostat.
 
enum  gmx::IntegrationStep {
  PositionsOnly, VelocitiesOnly, LeapFrog, VelocityVerletPositionsAndVelocities,
  Count
}
 The different integration types we know about. More...
 
enum  gmx::NumVelocityScalingValues { gmx::NumVelocityScalingValues::None, gmx::NumVelocityScalingValues::Single, gmx::NumVelocityScalingValues::Multiple, Count }
 Sets the number of different velocity scaling values. More...
 
enum  gmx::ParrinelloRahmanVelocityScaling { gmx::ParrinelloRahmanVelocityScaling::No, gmx::ParrinelloRahmanVelocityScaling::Diagonal, gmx::ParrinelloRahmanVelocityScaling::Full, Count }
 Sets the type of Parrinello-Rahman pressure scaling. More...
 

Functions

template<CheckpointDataOperation operation, typename T >
ArrayRef< std::conditional_t
< operation==CheckpointDataOperation::Write||std::is_const
< T >::value, const typename
T::value_type, typename
T::value_type > > 
gmx::makeCheckpointArrayRef (T &container)
 Get an ArrayRef whose const-ness is defined by the checkpointing operation. More...
 
template<typename... Ts>
auto gmx::checkUseModularSimulator (Ts &&...args) -> decltype(ModularSimulator::isInputCompatible(std::forward< Ts >(args)...))
 Whether or not to use the ModularSimulator. More...
 
virtual void gmx::ISimulatorElement::scheduleTask (Step, Time, const RegisterRunFunction &)=0
 Query whether element wants to run at step / time. More...
 
virtual void gmx::ISimulatorElement::elementSetup ()=0
 Method guaranteed to be called after construction, before simulator run.
 
virtual void gmx::ISimulatorElement::elementTeardown ()=0
 Method guaranteed to be called after simulator run, before deconstruction.
 
virtual gmx::ISimulatorElement::~ISimulatorElement ()=default
 Standard virtual destructor.
 
virtual void gmx::ISignaller::signal (Step, Time)=0
 Function run before every step of scheduling.
 
virtual void gmx::ISignaller::setup ()=0
 Method guaranteed to be called after construction, before simulator run.
 
virtual gmx::ISignaller::~ISignaller ()=default
 Standard virtual destructor.
 
virtual gmx::INeighborSearchSignallerClient::~INeighborSearchSignallerClient ()=default
 Standard virtual destructor.
 
virtual std::optional
< SignallerCallback > 
gmx::INeighborSearchSignallerClient::registerNSCallback ()=0
 Return callback to NeighborSearchSignaller.
 
virtual gmx::ILastStepSignallerClient::~ILastStepSignallerClient ()=default
 Standard virtual destructor.
 
virtual std::optional
< SignallerCallback > 
gmx::ILastStepSignallerClient::registerLastStepCallback ()=0
 Return callback to LastStepSignaller.
 
virtual gmx::ILoggingSignallerClient::~ILoggingSignallerClient ()=default
 Standard virtual destructor.
 
virtual std::optional
< SignallerCallback > 
gmx::ILoggingSignallerClient::registerLoggingCallback ()=0
 Return callback to LoggingSignaller.
 
virtual gmx::IEnergySignallerClient::~IEnergySignallerClient ()=default
 Standard virtual destructor.
 
virtual std::optional
< SignallerCallback > 
gmx::IEnergySignallerClient::registerEnergyCallback (EnergySignallerEvent)=0
 Return callback to EnergySignaller.
 
virtual gmx::ITrajectorySignallerClient::~ITrajectorySignallerClient ()=default
 Standard virtual destructor.
 
virtual std::optional
< SignallerCallback > 
gmx::ITrajectorySignallerClient::registerTrajectorySignallerCallback (TrajectoryEvent)=0
 Return callback to TrajectoryElement.
 
virtual gmx::ITrajectoryWriterClient::~ITrajectoryWriterClient ()=default
 Standard virtual destructor.
 
virtual void gmx::ITrajectoryWriterClient::trajectoryWriterSetup (gmx_mdoutf *outf)=0
 Setup method with valid output pointer.
 
virtual void gmx::ITrajectoryWriterClient::trajectoryWriterTeardown (gmx_mdoutf *outf)=0
 Teardown method with valid output pointer.
 
virtual std::optional
< ITrajectoryWriterCallback > 
gmx::ITrajectoryWriterClient::registerTrajectoryWriterCallback (TrajectoryEvent)=0
 Return callback to TrajectoryElement.
 
virtual gmx::ITopologyHolderClient::~ITopologyHolderClient ()=default
 Standard virtual destructor.
 
virtual void gmx::ITopologyHolderClient::setTopology (const gmx_localtop_t *)=0
 Pass pointer to new local topology.
 
virtual gmx::ICheckpointHelperClient::~ICheckpointHelperClient ()=default
 Standard virtual destructor.
 
virtual void gmx::ICheckpointHelperClient::saveCheckpointState (std::optional< WriteCheckpointData > checkpointData, const t_commrec *cr)=0
 Write checkpoint (CheckpointData object only passed on master rank)
 
virtual void gmx::ICheckpointHelperClient::restoreCheckpointState (std::optional< ReadCheckpointData > checkpointData, const t_commrec *cr)=0
 Read checkpoint (CheckpointData object only passed on master rank)
 
virtual const std::string & gmx::ICheckpointHelperClient::clientID ()=0
 Get unique client id.
 
 gmx::ElementNotFoundError::ElementNotFoundError (const ExceptionInitializer &details)
 Creates an exception object with the provided initializer/reason. More...
 
 gmx::MissingElementConnectionError::MissingElementConnectionError (const ExceptionInitializer &details)
 Creates an exception object with the provided initializer/reason. More...
 
 gmx::SimulationAlgorithmSetupError::SimulationAlgorithmSetupError (const ExceptionInitializer &details)
 Creates an exception object with the provided initializer/reason. More...
 
 gmx::CheckpointError::CheckpointError (const ExceptionInitializer &details)
 Creates an exception object with the provided initializer/reason. More...
 

Variables

std::function< void(int)> gmx::PropagatorThermostatConnection::setNumVelocityScalingVariables
 Function variable for setting velocity scaling variables.
 
std::function< ArrayRef< real >)> gmx::PropagatorThermostatConnection::getViewOnVelocityScaling
 Function variable for receiving view on velocity scaling.
 
std::function
< PropagatorCallback()> 
gmx::PropagatorThermostatConnection::getVelocityScalingCallback
 Function variable for callback.
 
std::function< ArrayRef< rvec >)> gmx::PropagatorBarostatConnection::getViewOnPRScalingMatrix
 Function variable for receiving view on pressure scaling matrix.
 
std::function
< PropagatorCallback()> 
gmx::PropagatorBarostatConnection::getPRScalingCallback
 Function variable for callback.
 

Files

file  checkpointhelper.cpp
 Defines the checkpoint helper for the modular simulator.
 
file  checkpointhelper.h
 Declares the checkpoint helper for the modular simulator.
 
file  compositesimulatorelement.cpp
 Defines the composite element for the modular simulator.
 
file  compositesimulatorelement.h
 Declares the composite element for the modular simulator.
 
file  computeglobalselement.cpp
 Defines the global reduction element for the modular simulator.
 
file  computeglobalselement.h
 Declares the global reduction element for the modular simulator.
 
file  constraintelement.cpp
 Defines the constraint element for the modular simulator.
 
file  constraintelement.h
 Declares the constraint element for the modular simulator.
 
file  domdechelper.cpp
 Defines the domain decomposition helper for the modular simulator.
 
file  domdechelper.h
 Declares the domain decomposition helper for the modular simulator.
 
file  energydata.cpp
 Defines the microstate for the modular simulator.
 
file  energydata.h
 Declares the energy element for the modular simulator.
 
file  forceelement.cpp
 Defines the force element for the modular simulator.
 
file  forceelement.h
 Declares the force element for the modular simulator.
 
file  freeenergyperturbationdata.cpp
 Defines the free energy perturbation element for the modular simulator.
 
file  freeenergyperturbationdata.h
 Declares the free energy perturbation element for the modular simulator.
 
file  modularsimulator.cpp
 Defines the modular simulator.
 
file  modularsimulator.h
 Provides the modular simulator.
 
file  modularsimulatorinterfaces.h
 Declares the main interfaces used by the modular simulator.
 
file  parrinellorahmanbarostat.cpp
 Defines the Parrinello-Rahman barostat for the modular simulator.
 
file  parrinellorahmanbarostat.h
 Declares the Parrinello-Rahman barostat for the modular simulator.
 
file  pmeloadbalancehelper.cpp
 Declares the PME load balancing helper for the modular simulator.
 
file  pmeloadbalancehelper.h
 Declares the PME load balancing helper for the modular simulator.
 
file  propagator.cpp
 Defines the propagator element for the modular simulator.
 
file  propagator.h
 Declares the propagator element for the modular simulator.
 
file  signallers.cpp
 Defines the signallers for the modular simulator.
 
file  signallers.h
 Declares the signallers for the modular simulator.
 
file  simulatoralgorithm.cpp
 Defines the modular simulator algorithm.
 
file  simulatoralgorithm.h
 Provides the modular simulator algorithm.
 
file  statepropagatordata.cpp
 Defines the state for the modular simulator.
 
file  statepropagatordata.h
 Declares the state for the modular simulator.
 
file  topologyholder.cpp
 Defines the topology class for the modular simulator.
 
file  topologyholder.h
 Declares the topology class for the modular simulator.
 
file  trajectoryelement.cpp
 Defines the trajectory element for the modular simulator.
 
file  trajectoryelement.h
 Declares the trajectory element for the modular simulator.
 
file  velocityscalingtemperaturecoupling.cpp
 Defines a velocity-scaling temperature coupling element for the modular simulator.
 
file  velocityscalingtemperaturecoupling.h
 Declares a velocity-scaling temperature coupling element for the modular simulator.
 

Enumeration Type Documentation

The operations on CheckpointData.

This enum defines the two modes of operation on CheckpointData objects, reading and writing. This allows to template all access functions, which in turn enables clients to write a single function for read and write access, eliminating the risk of having read and write functions getting out of sync.

enum gmx::IntegrationStep
strong

The different integration types we know about.

PositionsOnly: Moves the position vector by the given time step VelocitiesOnly: Moves the velocity vector by the given time step LeapFrog: Is a manual fusion of the previous two propagators VelocityVerletPositionsAndVelocities: Is a manual fusion of VelocitiesOnly and PositionsOnly, where VelocitiesOnly is only propagated by half the time step of the positions.

Sets the number of different velocity scaling values.

Enumerator
None 

No velocity scaling (either this step or ever)

Single 

Single T-scaling value (either one group or all values =1)

Multiple 

Multiple T-scaling values, need to use T-group indices.

Sets the type of Parrinello-Rahman pressure scaling.

Enumerator
No 

Do not apply velocity scaling (not a PR-coupling run or step)

Diagonal 

Apply velocity scaling using a diagonal matrix.

Full 

Apply velocity scaling using a full matrix.

Function Documentation

gmx::CheckpointError::CheckpointError ( const ExceptionInitializer details)
inlineexplicit

Creates an exception object with the provided initializer/reason.

Parameters
[in]detailsInitializer for the exception.
Exceptions
std::bad_allocif out of memory.

It is possible to call this constructor either with an explicit ExceptionInitializer object (useful for more complex cases), or a simple string if only a reason string needs to be provided.

template<typename... Ts>
auto gmx::checkUseModularSimulator ( Ts &&...  args) -> decltype(ModularSimulator::isInputCompatible(std::forward<Ts>(args)...))

Whether or not to use the ModularSimulator.

GMX_DISABLE_MODULAR_SIMULATOR environment variable allows to disable modular simulator for all uses.

See ModularSimulator::isInputCompatible() for function signature.

gmx::ElementNotFoundError::ElementNotFoundError ( const ExceptionInitializer details)
inlineexplicit

Creates an exception object with the provided initializer/reason.

Parameters
[in]detailsInitializer for the exception.
Exceptions
std::bad_allocif out of memory.

It is possible to call this constructor either with an explicit ExceptionInitializer object (useful for more complex cases), or a simple string if only a reason string needs to be provided.

template<CheckpointDataOperation operation, typename T >
ArrayRef<std::conditional_t<operation == CheckpointDataOperation::Write || std::is_const<T>::value, const typename T::value_type, typename T::value_type> > gmx::makeCheckpointArrayRef ( T &  container)

Get an ArrayRef whose const-ness is defined by the checkpointing operation.

Template Parameters
operationWhether we are reading or writing
TThe type of values stored in the ArrayRef
Parameters
containerThe container the ArrayRef is referencing to
Returns
The ArrayRef
See Also
ArrayRef
gmx::MissingElementConnectionError::MissingElementConnectionError ( const ExceptionInitializer details)
inlineexplicit

Creates an exception object with the provided initializer/reason.

Parameters
[in]detailsInitializer for the exception.
Exceptions
std::bad_allocif out of memory.

It is possible to call this constructor either with an explicit ExceptionInitializer object (useful for more complex cases), or a simple string if only a reason string needs to be provided.

virtual void gmx::ISimulatorElement::scheduleTask ( Step  ,
Time  ,
const RegisterRunFunction  
)
pure virtual
gmx::SimulationAlgorithmSetupError::SimulationAlgorithmSetupError ( const ExceptionInitializer details)
inlineexplicit

Creates an exception object with the provided initializer/reason.

Parameters
[in]detailsInitializer for the exception.
Exceptions
std::bad_allocif out of memory.

It is possible to call this constructor either with an explicit ExceptionInitializer object (useful for more complex cases), or a simple string if only a reason string needs to be provided.