Files
openmm/platforms/reference/include/ReferenceDynamics.h
Peter Eastman de180e4e94 DPDIntegrator (#4799)
* Created DPDIntegrator class

* Reference implementation of DPDIntegrator

* Build neighbor list for DPDIntegrator

* Minor fixes

* Documentation for DPDIntegrator

* Python API for DPDIntegrator

* Preliminary OpenCL implementation of DPDIntegrator

* Enable USE_PERIODIC

* Use updated positions in DPD thermostat

* Working on neighbor list for OpenCL DPDIntegrator

* ReorderListener for particle types

* Serialization for DPDIntegrator

* CUDA implementation of DPDIntegrator

* HIP implementation of DPDIntegrator

* Fixed compile error in Python wrapper

* Fixed compile error in wrappers

* Fixed uninitialized memory in reference neighbor list

* Added DPDIntegrator to C++ API docs

* Fixed incorrect launch size

* Fixed nan in DPD random number generator

* Minor optimizations

* Improved load balancing

* Fixed an indexing error

* Neighbor list uses the maximum cutoff of any force

* Fixed HIP compilation error

* Fixed access to invalid memory

* Added test case for diffusion coefficient

* Try to debug segfaults on CI

* Debugging

* Debugging

* Debugging

* Debugging

* Debugging

* Debugging

* Possible fix

* Debugging

* Debugging

* Debugging

* Use correct block size on CPU OpenCL

* Workaround for bug in Intel's OpenCL for CPUs

* Removed an unnecessary define

* Removed debugging code

* Include Dart

* More Intel workarounds

* Workaround for error in NVIDIA OpenCL
2025-04-14 08:44:16 -07:00

198 lines
6.7 KiB
C++

/* Portions copyright (c) 2006-2012 Stanford University and Simbios.
* Contributors: Pande Group
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject
* to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __ReferenceDynamics_H__
#define __ReferenceDynamics_H__
#include "ReferenceConstraintAlgorithm.h"
#include "ReferenceVirtualSites.h"
#include "openmm/System.h"
#include <cstddef>
#include <vector>
namespace OpenMM {
/**---------------------------------------------------------------------------------------
Abstract class for dynamics
Main method (virtual) is update()
'Random' numbers are currently fixed to allow testing
--------------------------------------------------------------------------------------- */
class OPENMM_EXPORT ReferenceDynamics {
private:
int _numberOfAtoms;
int _timeStep;
double _deltaT;
double _temperature;
ReferenceConstraintAlgorithm* _referenceConstraint;
const ReferenceVirtualSites* virtualSites;
public:
/**---------------------------------------------------------------------------------------
Constructor
@param numberOfAtoms number of atoms
@param deltaT delta t for dynamics
@param temperature temperature
--------------------------------------------------------------------------------------- */
ReferenceDynamics(int numberOfAtoms, double _deltaT, double temperature);
/**---------------------------------------------------------------------------------------
Destructor
--------------------------------------------------------------------------------------- */
virtual ~ReferenceDynamics();
/**---------------------------------------------------------------------------------------
Get number of atoms
@return number of atoms
--------------------------------------------------------------------------------------- */
int getNumberOfAtoms() const;
/**---------------------------------------------------------------------------------------
Get time step
@return time step
--------------------------------------------------------------------------------------- */
int getTimeStep() const;
/**---------------------------------------------------------------------------------------
Increment time step
@return incremented time step
--------------------------------------------------------------------------------------- */
int incrementTimeStep();
/**---------------------------------------------------------------------------------------
Get delta t
@return deltaT
--------------------------------------------------------------------------------------- */
double getDeltaT() const;
/**---------------------------------------------------------------------------------------
Set delta t
--------------------------------------------------------------------------------------- */
void setDeltaT(double deltaT);
/**---------------------------------------------------------------------------------------
Get temperature
@return temperature
--------------------------------------------------------------------------------------- */
double getTemperature() const;
/**---------------------------------------------------------------------------------------
Set the temperature
--------------------------------------------------------------------------------------- */
void setTemperature(double temperature);
/**---------------------------------------------------------------------------------------
Update
@param system the System to be integrated
@param atomCoordinates atom coordinates
@param velocities velocities
@param forces forces
@param masses atom masses
@param tolerance the constraint tolerance
--------------------------------------------------------------------------------------- */
virtual void update(const OpenMM::System& system, std::vector<OpenMM::Vec3>& atomCoordinates,
std::vector<OpenMM::Vec3>& velocities, std::vector<OpenMM::Vec3>& forces, std::vector<double>& masses, double tolerance);
/**---------------------------------------------------------------------------------------
Get ReferenceConstraint
@return referenceConstraint object
--------------------------------------------------------------------------------------- */
ReferenceConstraintAlgorithm* getReferenceConstraintAlgorithm() const;
/**---------------------------------------------------------------------------------------
Set ReferenceConstraint
@param referenceConstraint referenceConstraint object
--------------------------------------------------------------------------------------- */
void setReferenceConstraintAlgorithm(ReferenceConstraintAlgorithm* referenceConstraint);
/**
* Get the object used to compute virtual sites.
*/
const ReferenceVirtualSites& getVirtualSites() const;
/**
* Set the object used to compute virtual sites.
*/
void setVirtualSites(const ReferenceVirtualSites& sites);
};
} // namespace OpenMM
#endif // __ReferenceDynamics_H__