"docs-source/vscode:/vscode.git/clone" did not exist on "4507205cf23d2befb1fceb33a77988b357dd2485"
Commit b2c89feb authored by Peter Eastman's avatar Peter Eastman
Browse files

CUDA platform would fail if you had a GBSAOBCForce but no NonbondedForce.

parent 11eab27d
...@@ -343,17 +343,17 @@ void CudaCalcGBSAOBCForceKernel::initialize(const System& system, const GBSAOBCF ...@@ -343,17 +343,17 @@ void CudaCalcGBSAOBCForceKernel::initialize(const System& system, const GBSAOBCF
int numParticles = system.getNumParticles(); int numParticles = system.getNumParticles();
_gpuContext* gpu = data.gpu; _gpuContext* gpu = data.gpu;
vector<int> particle(numParticles);
vector<float> radius(numParticles); vector<float> radius(numParticles);
vector<float> scale(numParticles); vector<float> scale(numParticles);
vector<float> charge(numParticles);
for (int i = 0; i < numParticles; i++) { for (int i = 0; i < numParticles; i++) {
double charge, particleRadius, scalingFactor; double particleCharge, particleRadius, scalingFactor;
force.getParticleParameters(i, charge, particleRadius, scalingFactor); force.getParticleParameters(i, particleCharge, particleRadius, scalingFactor);
particle[i] = i;
radius[i] = (float) particleRadius; radius[i] = (float) particleRadius;
scale[i] = (float) scalingFactor; scale[i] = (float) scalingFactor;
charge[i] = (float) particleCharge;
} }
gpuSetObcParameters(gpu, (float) force.getSoluteDielectric(), (float) force.getSolventDielectric(), particle, radius, scale); gpuSetObcParameters(gpu, (float) force.getSoluteDielectric(), (float) force.getSolventDielectric(), radius, scale, charge);
} }
void CudaCalcGBSAOBCForceKernel::executeForces(OpenMMContextImpl& context) { void CudaCalcGBSAOBCForceKernel::executeForces(OpenMMContextImpl& context) {
......
...@@ -425,15 +425,16 @@ void gpuSetPeriodicBoxSize(gpuContext gpu, float xsize, float ysize, float zsize ...@@ -425,15 +425,16 @@ void gpuSetPeriodicBoxSize(gpuContext gpu, float xsize, float ysize, float zsize
} }
extern "C" extern "C"
void gpuSetObcParameters(gpuContext gpu, float innerDielectric, float solventDielectric, const vector<int>& atom, const vector<float>& radius, const vector<float>& scale) void gpuSetObcParameters(gpuContext gpu, float innerDielectric, float solventDielectric, const vector<float>& radius, const vector<float>& scale, const vector<float>& charge)
{ {
unsigned int atoms = atom.size(); unsigned int atoms = radius.size();
gpu->bIncludeGBSA = true; gpu->bIncludeGBSA = true;
for (unsigned int i = 0; i < atoms; i++) for (unsigned int i = 0; i < atoms; i++)
{ {
(*gpu->psObcData)[i].x = radius[i] - dielectricOffset; (*gpu->psObcData)[i].x = radius[i] - dielectricOffset;
(*gpu->psObcData)[i].y = scale[i] * (*gpu->psObcData)[i].x; (*gpu->psObcData)[i].y = scale[i] * (*gpu->psObcData)[i].x;
(*gpu->psPosq4)[i].w = charge[i];
#if (DUMP_PARAMETERS == 1) #if (DUMP_PARAMETERS == 1)
cout << cout <<
...@@ -453,6 +454,7 @@ void gpuSetObcParameters(gpuContext gpu, float innerDielectric, float solventDie ...@@ -453,6 +454,7 @@ void gpuSetObcParameters(gpuContext gpu, float innerDielectric, float solventDie
gpu->psBornRadii->Upload(); gpu->psBornRadii->Upload();
gpu->psObcData->Upload(); gpu->psObcData->Upload();
gpu->psPosq4->Upload();
gpu->sim.preFactor = 2.0f*electricConstant*((1.0f/innerDielectric)-(1.0f/solventDielectric))*gpu->sim.forceConversionFactor; gpu->sim.preFactor = 2.0f*electricConstant*((1.0f/innerDielectric)-(1.0f/solventDielectric))*gpu->sim.forceConversionFactor;
} }
......
...@@ -180,7 +180,7 @@ extern "C" ...@@ -180,7 +180,7 @@ extern "C"
void gpuSetPeriodicBoxSize(gpuContext gpu, float xsize, float ysize, float zsize); void gpuSetPeriodicBoxSize(gpuContext gpu, float xsize, float ysize, float zsize);
extern "C" extern "C"
void gpuSetObcParameters(gpuContext gpu, float innerDielectric, float solventDielectric, const std::vector<int>& atom, const std::vector<float>& radius, const std::vector<float>& scale); void gpuSetObcParameters(gpuContext gpu, float innerDielectric, float solventDielectric, const std::vector<float>& radius, const std::vector<float>& scale, const std::vector<float>& charge);
extern "C" extern "C"
void gpuSetConstraintParameters(gpuContext gpu, const std::vector<int>& atom1, const std::vector<int>& atom2, const std::vector<float>& distance, void gpuSetConstraintParameters(gpuContext gpu, const std::vector<int>& atom1, const std::vector<int>& atom2, const std::vector<float>& distance,
......
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