void ValidateOpenMM::writePeriodicTorsionForce( FILE* filePtr, const PeriodicTorsionForce& periodicTorsionForce ) const { (void) fprintf( filePtr, "PeriodicTorsionForce %d\n", periodicTorsionForce.getNumTorsions() ); for(int ii = 0; ii < periodicTorsionForce.getNumTorsions(); ii++ ){ int particle1, particle2, particle3, particle4, periodicity; double phase, k; periodicTorsionForce.getTorsionParameters( ii, particle1, particle2, particle3, particle4, periodicity, phase, k ); (void) fprintf( filePtr, "%8d %8d %8d %8d %8d %8d %14.7e %14.7e\n", ii, particle1, particle2, particle3, particle4, periodicity, phase, k ); } }
void CpuCalcPeriodicTorsionForceKernel::copyParametersToContext(ContextImpl& context, const PeriodicTorsionForce& force) { if (numTorsions != force.getNumTorsions()) throw OpenMMException("updateParametersInContext: The number of torsions has changed"); // Record the values. for (int i = 0; i < numTorsions; ++i) { int particle1, particle2, particle3, particle4, periodicity; double phase, k; force.getTorsionParameters(i, particle1, particle2, particle3, particle4, periodicity, phase, k); if (particle1 != torsionIndexArray[i][0] || particle2 != torsionIndexArray[i][1] || particle3 != torsionIndexArray[i][2] || particle4 != torsionIndexArray[i][3]) throw OpenMMException("updateParametersInContext: The set of particles in a torsion has changed"); torsionParamArray[i][0] = (RealOpenMM) k; torsionParamArray[i][1] = (RealOpenMM) phase; torsionParamArray[i][2] = (RealOpenMM) periodicity; } }
void CpuCalcPeriodicTorsionForceKernel::initialize(const System& system, const PeriodicTorsionForce& force) { numTorsions = force.getNumTorsions(); torsionIndexArray = new int*[numTorsions]; for (int i = 0; i < numTorsions; i++) torsionIndexArray[i] = new int[4]; torsionParamArray = new RealOpenMM*[numTorsions]; for (int i = 0; i < numTorsions; i++) torsionParamArray[i] = new RealOpenMM[3]; for (int i = 0; i < numTorsions; ++i) { int particle1, particle2, particle3, particle4, periodicity; double phase, k; force.getTorsionParameters(i, particle1, particle2, particle3, particle4, periodicity, phase, k); torsionIndexArray[i][0] = particle1; torsionIndexArray[i][1] = particle2; torsionIndexArray[i][2] = particle3; torsionIndexArray[i][3] = particle4; torsionParamArray[i][0] = (RealOpenMM) k; torsionParamArray[i][1] = (RealOpenMM) phase; torsionParamArray[i][2] = (RealOpenMM) periodicity; } bondForce.initialize(system.getNumParticles(), numTorsions, 4, torsionIndexArray, data.threads); }