Commit 248522cb authored by Mark Friedrichs's avatar Mark Friedrichs
Browse files

Mods to allow Born radii to be updated if atomic positions updated off the board

parent 5cb5d89f
......@@ -291,6 +291,7 @@ CudaCalcGBSAOBCForceKernel::~CudaCalcGBSAOBCForceKernel() {
}
void CudaCalcGBSAOBCForceKernel::initialize(const System& system, const GBSAOBCForce& force) {
int numParticles = system.getNumParticles();
_gpuContext* gpu = data.gpu;
vector<int> particle(numParticles);
......@@ -363,8 +364,6 @@ static void initializeIntegration(const System& system, CudaPlatform::PlatformDa
gpuBuildExclusionList(gpu);
gpuBuildOutputBuffers(gpu);
gpuSetConstants(gpu);
kCalculateObcGbsaBornSum(gpu);
kReduceObcGbsaBornSum(gpu);
kClearBornForces(gpu);
kClearForces(gpu);
cudaThreadSynchronize();
......
......@@ -42,39 +42,39 @@ StreamImpl* CudaStreamFactory::createStreamImpl(std::string name, int size, Stre
if (name == "particlePositions") {
CudaPlatform::PlatformData& data = *static_cast<CudaPlatform::PlatformData*>(context.getPlatformData());
float padding[] = {100000.0f, 100000.0f, 100000.0f, 0.2f};
return new CudaStreamImpl<float4>(name, size, type, platform, data.gpu->psPosq4, 4, padding);
return new CudaStreamImpl<float4>(name, size, type, platform, data.gpu->psPosq4, 4, padding, data.gpu);
}
if (name == "particleVelocities") {
CudaPlatform::PlatformData& data = *static_cast<CudaPlatform::PlatformData*>(context.getPlatformData());
float padding[] = {0.0f, 0.0f, 0.0f, 0.0f};
return new CudaStreamImpl<float4>(name, size, type, platform, data.gpu->psVelm4, 4, padding);
return new CudaStreamImpl<float4>(name, size, type, platform, data.gpu->psVelm4, 4, padding, data.gpu);
}
if (name == "particleForces") {
CudaPlatform::PlatformData& data = *static_cast<CudaPlatform::PlatformData*>(context.getPlatformData());
float padding[] = {0.0f, 0.0f, 0.0f, 0.0f};
return new CudaStreamImpl<float4>(name, size, type, platform, data.gpu->psForce4, 4, padding);
return new CudaStreamImpl<float4>(name, size, type, platform, data.gpu->psForce4, 4, padding, data.gpu);
}
switch (type) {
case Stream::Float:
case Stream::Double:
return new CudaStreamImpl<float1>(name, size, type, platform, 1);
return new CudaStreamImpl<float1>(name, size, type, platform, 1, NULL);
case Stream::Float2:
case Stream::Double2:
return new CudaStreamImpl<float2>(name, size, type, platform, 1);
return new CudaStreamImpl<float2>(name, size, type, platform, 1, NULL);
case Stream::Float3:
case Stream::Double3:
return new CudaStreamImpl<float3>(name, size, type, platform, 1);
return new CudaStreamImpl<float3>(name, size, type, platform, 1, NULL);
case Stream::Float4:
case Stream::Double4:
return new CudaStreamImpl<float4>(name, size, type, platform, 1);
return new CudaStreamImpl<float4>(name, size, type, platform, 1, NULL);
case Stream::Integer:
return new CudaStreamImpl<int1>(name, size, type, platform, 1);
return new CudaStreamImpl<int1>(name, size, type, platform, 1, NULL);
case Stream::Integer2:
return new CudaStreamImpl<int2>(name, size, type, platform, 1);
return new CudaStreamImpl<int2>(name, size, type, platform, 1, NULL);
case Stream::Integer3:
return new CudaStreamImpl<int3>(name, size, type, platform, 1);
return new CudaStreamImpl<int3>(name, size, type, platform, 1, NULL);
case Stream::Integer4:
return new CudaStreamImpl<int4>(name, size, type, platform, 1);
return new CudaStreamImpl<int4>(name, size, type, platform, 1, NULL);
}
throw OpenMMException("Tried to create a Stream with an illegal DataType.");
}
......@@ -44,8 +44,8 @@ namespace OpenMM {
template <class T>
class CudaStreamImpl : public StreamImpl {
public:
CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, int substreams);
CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, CUDAStream<T>* stream, int rowOffset, float* padding);
CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, int substreams, _gpuContext* gpu);
CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, CUDAStream<T>* stream, int rowOffset, float* padding, _gpuContext* gpu);
~CudaStreamImpl();
void loadFromArray(const void* array);
void saveToArray(void* array);
......@@ -55,6 +55,7 @@ public:
private:
void initType();
CUDAStream<T>* stream;
_gpuContext* gpu;
bool ownStream;
int width, rowOffset;
float paddingValues[4];
......@@ -62,15 +63,15 @@ private:
};
template <class T>
CudaStreamImpl<T>::CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, int substreams) :
StreamImpl(name, size, type, platform), stream(new CUDAStream<T>(size, substreams)), ownStream(true) {
CudaStreamImpl<T>::CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, int substreams, _gpuContext* gpu) :
StreamImpl(name, size, type, platform), stream(new CUDAStream<T>(size, substreams)), ownStream(true), gpu(gpu) {
initType();
rowOffset = width;
};
template <class T>
CudaStreamImpl<T>::CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, CUDAStream<T>* stream, int rowOffset, float* padding) :
StreamImpl(name, size, type, platform), stream(stream), rowOffset(rowOffset), ownStream(false) {
CudaStreamImpl<T>::CudaStreamImpl(std::string name, int size, Stream::DataType type, const Platform& platform, CUDAStream<T>* stream, int rowOffset, float* padding, _gpuContext* gpu) :
StreamImpl(name, size, type, platform), stream(stream), rowOffset(rowOffset), ownStream(false), gpu(gpu) {
initType();
for (int i = 0; i < 4; ++i)
paddingValues[i] = padding[i];
......@@ -153,6 +154,13 @@ void CudaStreamImpl<T>::loadFromArray(const void* array) {
for (int j = 0; j < rowOffset; ++j)
data[i*rowOffset+j] = paddingValues[j];
stream->Upload();
// VisualStudio compiler did not like stream == gpu->psPosq4
//if( gpu && stream == gpu->psPosq4 ){
if( gpu && getName() == "particlePositions" ){
gpu->bRecalculateBornRadii = true;
}
}
template <class T>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment