mirror of
https://github.com/openmm/openmm
synced 2026-06-03 06:39:48 +09:00
* 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
198 lines
6.7 KiB
C++
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__
|