Commit c8a984f8 authored by Michael Sherman's avatar Michael Sherman
Browse files

Checkpoint: added HarmonicBond, HarmonicAngle, and PeriodicTorsion to C...

Checkpoint: added HarmonicBond, HarmonicAngle, and PeriodicTorsion to C Wrappers so these can be accessed from the Fortran Module per Mark Williamson's request for Amber.
parent 9cad8b27
...@@ -5,16 +5,19 @@ ...@@ -5,16 +5,19 @@
// The functions here convert between C types and OpenMM's C++ objects // The functions here convert between C types and OpenMM's C++ objects
// and then call the appropriate OpenMM methods. // and then call the appropriate OpenMM methods.
// //
// Each C function comes in two forms -- one is intended to be called from C // Each C function comes in several forms -- one is intended to be called from C
// main programs, and the other from Fortran main programs. The Fortran one // main programs, and the others from Fortran main programs. The Fortran ones
// typically just translates Fortran naming and argument conventions into C // typically just translates Fortran naming and argument conventions into C
// and then calls the C function. // and then calls the C function. In particular, gcc's gfortran compiler
// translates names into all-lowercase and appends an underscore, while
// Intel's ifort compiler tranlates names into all-uppercase and does not
// append an underscore.
// //
// A C main program can use this just by including the OpenMM_CWrapper.h // A C main program can use this just by including the OpenMM_CWrapper.h
// header file that is included here as well. A Fortran 95 program can use // header file that is included here as well. A Fortran 95 program can use
// the "use OpenMM" module which defines an interface to the Fortran-callable // the "use OpenMM" module which defines an interface to the Fortran-callable
// functions defined here. Fortran 77 programs have to call these directly; // functions defined here. Fortran 77 programs have to call these directly;
// you can use an integer*8 to hold the pointers. // you can use an integer*8 to hold the pointers on any platform.
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include "OpenMM_CWrapper.h" #include "OpenMM_CWrapper.h"
...@@ -113,6 +116,71 @@ void OpenMM_Vec3_scale(const double in[3], double s, double out[3]) ...@@ -113,6 +116,71 @@ void OpenMM_Vec3_scale(const double in[3], double s, double out[3])
void openmm_vec3_scale_(const double in[3], const double& s, double out[3]) void openmm_vec3_scale_(const double in[3], const double& s, double out[3])
{ out[0]=s*in[0]; out[1]=s*in[1]; out[2]=s*in[2]; } { out[0]=s*in[0]; out[1]=s*in[1]; out[2]=s*in[2]; }
///////////////////////////////////////
// std::vector< std::pair<int,int> > //
///////////////////////////////////////
// This provides std::vector< std::pair<int,int> > functionality to the
// C program, for use as a list of bond pairs.
typedef std::vector< std::pair<int,int> > IntPairs;
OpenMM_BondArray* OpenMM_BondArray_create(int n)
{ return (OpenMM_BondArray*)new IntPairs(n); }
void openmm_bondarray_create_(OpenMM_BondArray*& a, const int& n)
{ a = OpenMM_BondArray_create(n); }
void OPENMM_BONDARRAY_CREATE(OpenMM_BondArray*& a, const int& n)
{ a = OpenMM_BondArray_create(n); }
int OpenMM_BondArray_size(const OpenMM_BondArray* a)
{ return (int)((const IntPairs*)a)->size(); }
int openmm_bondarray_size_(const OpenMM_BondArray*& a)
{ return OpenMM_BondArray_size(a); }
int OPENMM_BONDARRAY_SIZE(const OpenMM_BondArray*& a)
{ return OpenMM_BondArray_size(a); }
void OpenMM_BondArray_resize(OpenMM_BondArray* a, int n)
{ ((IntPairs*)a)->resize(n); }
void openmm_bondarray_resize_(OpenMM_BondArray* const& a, const int& n)
{ OpenMM_BondArray_resize(a, n); }
void OPENMM_BONDARRAY_RESIZE(OpenMM_BondArray* const& a, const int& n)
{ OpenMM_BondArray_resize(a, n); }
void OpenMM_BondArray_destroy(OpenMM_BondArray* doomed)
{ delete ((IntPairs*)doomed); }
void openmm_bondarray_destroy_(OpenMM_BondArray*& doomed)
{ OpenMM_BondArray_destroy(doomed); doomed = 0; }
void OPENMM_BONDARRAY_DESTROY(OpenMM_BondArray*& doomed)
{ OpenMM_BondArray_destroy(doomed); doomed = 0; }
void OpenMM_BondArray_append(OpenMM_BondArray* a, int p1, int p2)
{ ((IntPairs*)a)->push_back(std::make_pair(p1,p2)); }
void openmm_bondarray_append_(OpenMM_BondArray* const& a, int const& p1, int const& p2)
{ OpenMM_BondArray_append(a, p1, p2); }
void OPENMM_BONDARRAY_APPEND(OpenMM_BondArray* const& a, int const& p1, int const& p2)
{ OpenMM_BondArray_append(a, p1, p2); }
// Get a single int pair from the array. Index is 0-relative in C, 1-relative in Fortran.
void OpenMM_BondArray_get(const OpenMM_BondArray* a, int i0, int* p1, int* p2) {
*p1 = (*(const IntPairs*)a)[i0].first;
*p2 = (*(const IntPairs*)a)[i0].second;
}
void openmm_bondarray_get_(const OpenMM_BondArray* const& a, const int& i1, int& p1, int& p2)
{ OpenMM_BondArray_get(a, i1-1, &p1, &p2); }
void OPENMM_BONDARRAY_GET(const OpenMM_BondArray* const& a, const int& i1, int& p1, int& p2)
{ OpenMM_BondArray_get(a, i1-1, &p1, &p2); }
// Set a single Vec3 element in the array. Index is 0-relative in C, 1-relative in Fortran.
void OpenMM_BondArray_set(OpenMM_BondArray* a, int i0, int p1, int p2)
{ (*(IntPairs*)a)[i0] = std::make_pair(p1,p2); }
void openmm_bondarray_set_(OpenMM_BondArray* const& a, const int& i1, int const& p1, int const& p2)
{ OpenMM_BondArray_set(a, i1-1, p1, p2); }
void OPENMM_BONDARRAY_SET(OpenMM_BondArray* const& a, const int& i1, int const& p1, int const& p2)
{ OpenMM_BondArray_set(a, i1-1, p1, p2); }
///////////////// /////////////////
// std::string // // std::string //
///////////////// /////////////////
...@@ -242,87 +310,388 @@ int openmm_system_getnumparticles_(const OpenMM_System*& sys) ...@@ -242,87 +310,388 @@ int openmm_system_getnumparticles_(const OpenMM_System*& sys)
//////////////////////////// ////////////////////////////
// OpenMM::NonbondedForce // // OpenMM::NonbondedForce //
//////////////////////////// ////////////////////////////
// create
OpenMM_NonbondedForce* OpenMM_NonbondedForce_create() OpenMM_NonbondedForce* OpenMM_NonbondedForce_create()
{ return (OpenMM_NonbondedForce*)new NonbondedForce(); } { return (OpenMM_NonbondedForce*)new NonbondedForce(); }
void openmm_nonbondedforce_create_(OpenMM_NonbondedForce*& frc) void openmm_nonbondedforce_create_(OpenMM_NonbondedForce*& frc)
{ frc = OpenMM_NonbondedForce_create();} { frc = OpenMM_NonbondedForce_create();}
void OPENMM_NONBONDEDFORCE_CREATE(OpenMM_NonbondedForce*& frc)
{ frc = OpenMM_NonbondedForce_create();}
// destroy
void OpenMM_NonbondedForce_destroy(OpenMM_NonbondedForce* doomed) void OpenMM_NonbondedForce_destroy(OpenMM_NonbondedForce* doomed)
{ delete (NonbondedForce*)doomed; } { delete (NonbondedForce*)doomed; }
void openmm_nonbondedforce_destroy_(OpenMM_NonbondedForce*& doomed) void openmm_nonbondedforce_destroy_(OpenMM_NonbondedForce*& doomed)
{ OpenMM_NonbondedForce_destroy(doomed); doomed = 0;} { OpenMM_NonbondedForce_destroy(doomed); doomed = 0;}
void OPENMM_NONBONDEDFORCE_DESTROY(OpenMM_NonbondedForce*& doomed)
{ OpenMM_NonbondedForce_destroy(doomed); doomed = 0;}
// Fortran only: recast NonbondedForce as a Force. // Fortran only: recast NonbondedForce as a Force.
void openmm_nonbondedforce_asforce_(OpenMM_NonbondedForce* const& nonbond, void openmm_nonbondedforce_asforce_(OpenMM_NonbondedForce* const& nonbond,
OpenMM_Force*& force) OpenMM_Force*& force)
{ force = (OpenMM_Force*)nonbond; } { force = (OpenMM_Force*)nonbond; }
void OPENMM_NONBONDEDFORCE_ASFORCE(OpenMM_NonbondedForce* const& nonbond,
OpenMM_Force*& force)
{ force = (OpenMM_Force*)nonbond; }
// setNonbondedMethod
void OpenMM_NonbondedForce_setNonbondedMethod(OpenMM_NonbondedForce* nbf, void OpenMM_NonbondedForce_setNonbondedMethod(OpenMM_NonbondedForce* nbf,
OpenMM_NonbondedForce_NonbondedMethod method) OpenMM_NonbondedForce_NonbondedMethod method)
{ ((NonbondedForce*)nbf)->setNonbondedMethod(NonbondedForce::NonbondedMethod(method)); } { ((NonbondedForce*)nbf)->setNonbondedMethod(NonbondedForce::NonbondedMethod(method)); }
void openmm_nonbondedforce_setnonbondedmethod_(OpenMM_NonbondedForce*& nbf, const int& method) void openmm_nonbondedforce_setnonbondedmethod_(OpenMM_NonbondedForce* const& nbf, const int& method)
{ OpenMM_NonbondedForce_setNonbondedMethod(nbf,OpenMM_NonbondedForce_NonbondedMethod(method));} { OpenMM_NonbondedForce_setNonbondedMethod(nbf,OpenMM_NonbondedForce_NonbondedMethod(method)); }
void OPENMM_NONBONDEDFORCE_SETNONBONDEDMETHOD(OpenMM_NonbondedForce* const& nbf, const int& method)
{ OpenMM_NonbondedForce_setNonbondedMethod(nbf,OpenMM_NonbondedForce_NonbondedMethod(method)); }
// getNonbondedMethod
OpenMM_NonbondedForce_NonbondedMethod
OpenMM_NonbondedForce_getNonbondedMethod(const OpenMM_NonbondedForce* nbf)
{ return OpenMM_NonbondedForce_NonbondedMethod(((const NonbondedForce*)nbf)->getNonbondedMethod()); }
int openmm_nonbondedforce_getnonbondedmethod_(const OpenMM_NonbondedForce* const& nbf)
{ return (int)OpenMM_NonbondedForce_getNonbondedMethod(nbf); }
int OPENMM_NONBONDEDFORCE_GETNONBONDEDMETHOD(const OpenMM_NonbondedForce* const& nbf)
{ return (int)OpenMM_NonbondedForce_getNonbondedMethod(nbf); }
// setCutoffDistance
void OpenMM_NonbondedForce_setCutoffDistance(OpenMM_NonbondedForce* nbf, double d) void OpenMM_NonbondedForce_setCutoffDistance(OpenMM_NonbondedForce* nbf, double d)
{ ((NonbondedForce*)nbf)->setCutoffDistance(d); } { ((NonbondedForce*)nbf)->setCutoffDistance(d); }
void openmm_nonbondedforce_setcutoffdistance_(OpenMM_NonbondedForce*& nbf, const double& d) void openmm_nonbondedforce_setcutoffdistance_(OpenMM_NonbondedForce* const& nbf, const double& d)
{ OpenMM_NonbondedForce_setCutoffDistance(nbf,d);} { OpenMM_NonbondedForce_setCutoffDistance(nbf,d);}
void OPENMM_NONBONDEDFORCE_SETCUTOFFDISTANCE(OpenMM_NonbondedForce* const& nbf, const double& d)
{ OpenMM_NonbondedForce_setCutoffDistance(nbf,d);}
// getCutoffDistance
double OpenMM_NonbondedForce_getCutoffDistance(const OpenMM_NonbondedForce* nbf)
{ return ((NonbondedForce*)nbf)->getCutoffDistance(); }
double openmm_nonbondedforce_getcutoffdistance_(const OpenMM_NonbondedForce* const& nbf)
{ return OpenMM_NonbondedForce_getCutoffDistance(nbf);}
double OPENMM_NONBONDEDFORCE_GETCUTOFFDISTANCE(const OpenMM_NonbondedForce* const& nbf)
{ return OpenMM_NonbondedForce_getCutoffDistance(nbf);}
// setPeriodicBoxVectors
void OpenMM_NonbondedForce_setPeriodicBoxVectors(OpenMM_NonbondedForce* nbf, void OpenMM_NonbondedForce_setPeriodicBoxVectors(OpenMM_NonbondedForce* nbf,
const OpenMM_Vec3 a,const OpenMM_Vec3 b,const OpenMM_Vec3 c) const OpenMM_Vec3 a,const OpenMM_Vec3 b,const OpenMM_Vec3 c)
{ { ((NonbondedForce*)nbf)->setPeriodicBoxVectors(*(const Vec3*)a, *(const Vec3*)b, *(const Vec3*)c); }
((NonbondedForce*)nbf)->setPeriodicBoxVectors(*(const Vec3*)a, *(const Vec3*)b, *(const Vec3*)c); void openmm_nonbondedforce_setperiodicboxvectors_(OpenMM_NonbondedForce* const& nbf,
} const OpenMM_Vec3 a,const OpenMM_Vec3 b,const OpenMM_Vec3 c)
void openmm_nonbondedforce_setperiodicboxvectors_(OpenMM_NonbondedForce*& nbf, { OpenMM_NonbondedForce_setPeriodicBoxVectors(nbf,a,b,c);}
void OPENMM_NONBONDEDFORCE_SETPERIODICBOXVECTORS(OpenMM_NonbondedForce* const& nbf,
const OpenMM_Vec3 a,const OpenMM_Vec3 b,const OpenMM_Vec3 c) const OpenMM_Vec3 a,const OpenMM_Vec3 b,const OpenMM_Vec3 c)
{ OpenMM_NonbondedForce_setPeriodicBoxVectors(nbf,a,b,c);} { OpenMM_NonbondedForce_setPeriodicBoxVectors(nbf,a,b,c);}
void OpenMM_NonbondedForce_addParticle(OpenMM_NonbondedForce* nbf, // getPeriodicBoxVectors
void OpenMM_NonbondedForce_getPeriodicBoxVectors(const OpenMM_NonbondedForce* nbf,
OpenMM_Vec3 a,OpenMM_Vec3 b,OpenMM_Vec3 c)
{ ((const NonbondedForce*)nbf)->getPeriodicBoxVectors(*(Vec3*)a, *(Vec3*)b, *(Vec3*)c); }
void openmm_nonbondedforce_getperiodicboxvectors_(const OpenMM_NonbondedForce* const& nbf,
OpenMM_Vec3 a, OpenMM_Vec3 b, OpenMM_Vec3 c)
{ OpenMM_NonbondedForce_getPeriodicBoxVectors(nbf,a,b,c);}
void OPENMM_NONBONDEDFORCE_GETPERIODICBOXVECTORS(const OpenMM_NonbondedForce* const& nbf,
OpenMM_Vec3 a, OpenMM_Vec3 b, OpenMM_Vec3 c)
{ OpenMM_NonbondedForce_getPeriodicBoxVectors(nbf,a,b,c);}
// addParticle
int OpenMM_NonbondedForce_addParticle(OpenMM_NonbondedForce* nbf,
double charge, double sigmaInNm, double vdwEnergyInKJ) double charge, double sigmaInNm, double vdwEnergyInKJ)
{ { return ((NonbondedForce*)nbf)->addParticle(charge, sigmaInNm, vdwEnergyInKJ); }
((NonbondedForce*)nbf)->addParticle(charge, sigmaInNm, vdwEnergyInKJ); void openmm_nonbondedforce_addparticle_(OpenMM_NonbondedForce* const& nbf,
} const double& charge, const double& sigmaInNm, const double& vdwEnergyInKJ)
void openmm_nonbondedforce_addparticle_(OpenMM_NonbondedForce*& nbf, { OpenMM_NonbondedForce_addParticle(nbf,charge, sigmaInNm, vdwEnergyInKJ);}
void OPENMM_NONBONDEDFORCE_ADDPARTICLE(OpenMM_NonbondedForce* const& nbf,
const double& charge, const double& sigmaInNm, const double& vdwEnergyInKJ) const double& charge, const double& sigmaInNm, const double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_addParticle(nbf,charge, sigmaInNm, vdwEnergyInKJ);} { OpenMM_NonbondedForce_addParticle(nbf,charge, sigmaInNm, vdwEnergyInKJ);}
// setParticleParameters
void OpenMM_NonbondedForce_setParticleParameters(OpenMM_NonbondedForce* nbf, int index,
double charge, double sigmaInNm, double vdwEnergyInKJ)
{ ((NonbondedForce*)nbf)->setParticleParameters(index, charge, sigmaInNm, vdwEnergyInKJ); }
void openmm_nonbondedforce_setparticleparameters_(OpenMM_NonbondedForce* const& nbf, const int& index,
const double& charge, const double& sigmaInNm, const double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_setParticleParameters(nbf, index, charge, sigmaInNm, vdwEnergyInKJ);}
void OPENMM_NONBONDEDFORCE_SETPARTICLEPARAMETERS(OpenMM_NonbondedForce* const& nbf, const int& index,
const double& charge, const double& sigmaInNm, const double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_setParticleParameters(nbf, index, charge, sigmaInNm, vdwEnergyInKJ);}
// getParticleParameters
void OpenMM_NonbondedForce_getParticleParameters(const OpenMM_NonbondedForce* nbf, int index,
double* charge, double* sigmaInNm, double* vdwEnergyInKJ)
{ ((const NonbondedForce*)nbf)->getParticleParameters(index, *charge, *sigmaInNm, *vdwEnergyInKJ); }
void openmm_nonbondedforce_getparticleparameters_(const OpenMM_NonbondedForce* const& nbf, const int& index,
double& charge, double& sigmaInNm, double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_getParticleParameters(nbf, index, &charge, &sigmaInNm, &vdwEnergyInKJ);}
void OPENMM_NONBONDEDFORCE_GETPARTICLEPARAMETERS(const OpenMM_NonbondedForce* const& nbf, const int& index,
double& charge, double& sigmaInNm, double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_getParticleParameters(nbf, index, &charge, &sigmaInNm, &vdwEnergyInKJ);}
// getNumParticles
int OpenMM_NonbondedForce_getNumParticles(const OpenMM_NonbondedForce* nbf)
{ return ((const NonbondedForce*)nbf)->getNumParticles(); }
int openmm_nonbondedforce_getnumparticles_(const OpenMM_NonbondedForce* const& nbf)
{ return OpenMM_NonbondedForce_getNumParticles(nbf); }
int OPENMM_NONBONDEDFORCE_GETNUMPARTICLES(const OpenMM_NonbondedForce* const& nbf)
{ return OpenMM_NonbondedForce_getNumParticles(nbf); }
// getNumExceptions
int OpenMM_NonbondedForce_getNumExceptions(const OpenMM_NonbondedForce* nbf)
{ return ((const NonbondedForce*)nbf)->getNumExceptions(); }
int openmm_nonbondedforce_getnumexceptions_(const OpenMM_NonbondedForce* const& nbf)
{ return OpenMM_NonbondedForce_getNumExceptions(nbf); }
int OPENMM_NONBONDEDFORCE_GETNUMEXCEPTIONS(const OpenMM_NonbondedForce* const& nbf)
{ return OpenMM_NonbondedForce_getNumExceptions(nbf); }
// addException
int OpenMM_NonbondedForce_addException(OpenMM_NonbondedForce* nbf, int p1, int p2,
double chargeProd, double sigmaInNm, double vdwEnergyInKJ)
{ return ((NonbondedForce*)nbf)->addException(p1, p2, chargeProd, sigmaInNm, vdwEnergyInKJ); }
void openmm_nonbondedforce_addexception_(OpenMM_NonbondedForce* const& nbf, const int& p1, const int& p2,
const double& chargeProd, const double& sigmaInNm, const double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_addException(nbf, p1, p2, chargeProd, sigmaInNm, vdwEnergyInKJ);}
void OPENMM_NONBONDEDFORCE_ADDEXCEPTION(OpenMM_NonbondedForce* const& nbf, const int& p1, const int& p2,
const double& chargeProd, const double& sigmaInNm, const double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_addException(nbf, p1, p2, chargeProd, sigmaInNm, vdwEnergyInKJ);}
// setExceptionParameters
void OpenMM_NonbondedForce_setExceptionParameters(OpenMM_NonbondedForce* nbf, int index, int p1, int p2,
double chargeProd, double sigmaInNm, double vdwEnergyInKJ)
{ return ((NonbondedForce*)nbf)->setExceptionParameters(index, p1, p2, chargeProd, sigmaInNm, vdwEnergyInKJ); }
void openmm_nonbondedforce_setexceptionparameters_(OpenMM_NonbondedForce* const& nbf, const int& index, const int& p1, const int& p2,
const double& chargeProd, const double& sigmaInNm, const double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_setExceptionParameters(nbf, index, p1, p2, chargeProd, sigmaInNm, vdwEnergyInKJ);}
void OPENMM_NONBONDEDFORCE_SETEXCEPTIONPARAMETERS(OpenMM_NonbondedForce* const& nbf, const int& index, const int& p1, const int& p2,
const double& chargeProd, const double& sigmaInNm, const double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_setExceptionParameters(nbf, index, p1, p2, chargeProd, sigmaInNm, vdwEnergyInKJ);}
// getExceptionParameters
void OpenMM_NonbondedForce_getExceptionParameters(const OpenMM_NonbondedForce* nbf, int index, int* p1, int* p2,
double* chargeProd, double* sigmaInNm, double* vdwEnergyInKJ)
{ return ((const NonbondedForce*)nbf)->getExceptionParameters(index, *p1, *p2, *chargeProd, *sigmaInNm, *vdwEnergyInKJ); }
void openmm_nonbondedforce_getexceptionparameters_(const OpenMM_NonbondedForce* const& nbf, const int& index, int& p1, int& p2,
double& chargeProd, double& sigmaInNm, double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_getExceptionParameters(nbf, index, &p1, &p2, &chargeProd, &sigmaInNm, &vdwEnergyInKJ);}
void OPENMM_NONBONDEDFORCE_GETEXCEPTIONPARAMETERS(const OpenMM_NonbondedForce* const& nbf, const int& index, int& p1, int& p2,
double& chargeProd, double& sigmaInNm, double& vdwEnergyInKJ)
{ OpenMM_NonbondedForce_getExceptionParameters(nbf, index, &p1, &p2, &chargeProd, &sigmaInNm, &vdwEnergyInKJ);}
// createExceptionsFromBonds
void OpenMM_NonbondedForces_createExceptionsFromBonds(OpenMM_NonbondedForce* nbf, const OpenMM_BondArray* ba,
double coulomb14Scale, double lj14Scale)
{ typedef std::vector< std::pair<int,int> > IntPairs;
const IntPairs& bonds = *(const IntPairs*)ba;
((NonbondedForce*)nbf)->createExceptionsFromBonds(bonds, coulomb14Scale, lj14Scale);
}
void openmm_nonbondedforces_createexceptionsfrombonds_(OpenMM_NonbondedForce* const& nbf, const OpenMM_BondArray* const& ba,
double const& coulomb14Scale, double const& lj14Scale)
{ OpenMM_NonbondedForces_createExceptionsFromBonds(nbf, ba, coulomb14Scale, lj14Scale); }
void OPENMM_NONBONDEDFORCES_CREATEEXCEPTIONSFROMBONDS(OpenMM_NonbondedForce* const& nbf, const OpenMM_BondArray* const& ba,
double const& coulomb14Scale, double const& lj14Scale)
{ OpenMM_NonbondedForces_createExceptionsFromBonds(nbf, ba, coulomb14Scale, lj14Scale); }
////////////////////////// //////////////////////////
// OpenMM::GBSAOBCForce // // OpenMM::GBSAOBCForce //
////////////////////////// //////////////////////////
// create
OpenMM_GBSAOBCForce* OpenMM_GBSAOBCForce_create() OpenMM_GBSAOBCForce* OpenMM_GBSAOBCForce_create()
{ return (OpenMM_GBSAOBCForce*)new GBSAOBCForce(); } { return (OpenMM_GBSAOBCForce*)new GBSAOBCForce(); }
void openmm_gbsaobcforce_create_(OpenMM_GBSAOBCForce*& frc) void openmm_gbsaobcforce_create_(OpenMM_GBSAOBCForce*& frc)
{ frc = OpenMM_GBSAOBCForce_create();} { frc = OpenMM_GBSAOBCForce_create(); }
// destroy
void OpenMM_GBSAOBCForce_destroy(OpenMM_GBSAOBCForce* doomed) void OpenMM_GBSAOBCForce_destroy(OpenMM_GBSAOBCForce* doomed)
{ delete (GBSAOBCForce*)doomed; } { delete (GBSAOBCForce*)doomed; }
void openmm_gbsaobcforce_destroy_(OpenMM_GBSAOBCForce*& doomed) void openmm_gbsaobcforce_destroy_(OpenMM_GBSAOBCForce*& doomed)
{ OpenMM_GBSAOBCForce_destroy(doomed); doomed = 0;} { OpenMM_GBSAOBCForce_destroy(doomed); doomed = 0; }
// Fortran only: recast GBSAOBCForce as a Force. // Fortran only: recast GBSAOBCForce as a Force.
void openmm_gbsaobcforce_asforce_(OpenMM_GBSAOBCForce* const& gbsa, void openmm_gbsaobcforce_asforce_(OpenMM_GBSAOBCForce* const& gbsa,
OpenMM_Force*& force) OpenMM_Force*& force)
{ force = (OpenMM_Force*)gbsa; } { force = (OpenMM_Force*)gbsa; }
// setSolventDielectric
void OpenMM_GBSAOBCForce_setSolventDielectric(OpenMM_GBSAOBCForce* gbsa, double d) void OpenMM_GBSAOBCForce_setSolventDielectric(OpenMM_GBSAOBCForce* gbsa, double d)
{ ((GBSAOBCForce*)gbsa)->setSolventDielectric(d); } { ((GBSAOBCForce*)gbsa)->setSolventDielectric(d); }
void openmm_gbsaobcforce_setsolventdielectric_(OpenMM_GBSAOBCForce*& gbsa, const double& d) void openmm_gbsaobcforce_setsolventdielectric_(OpenMM_GBSAOBCForce*& gbsa, const double& d)
{ OpenMM_GBSAOBCForce_setSolventDielectric(gbsa,d);} { OpenMM_GBSAOBCForce_setSolventDielectric(gbsa,d); }
// setSoluteDielectric
void OpenMM_GBSAOBCForce_setSoluteDielectric(OpenMM_GBSAOBCForce* gbsa, double d) void OpenMM_GBSAOBCForce_setSoluteDielectric(OpenMM_GBSAOBCForce* gbsa, double d)
{ ((GBSAOBCForce*)gbsa)->setSoluteDielectric(d); } { ((GBSAOBCForce*)gbsa)->setSoluteDielectric(d); }
void openmm_gbsaobcforce_setsolutedielectric_(OpenMM_GBSAOBCForce*& gbsa, const double& d) void openmm_gbsaobcforce_setsolutedielectric_(OpenMM_GBSAOBCForce*& gbsa, const double& d)
{ OpenMM_GBSAOBCForce_setSoluteDielectric(gbsa,d);} { OpenMM_GBSAOBCForce_setSoluteDielectric(gbsa,d); }
// addParticle
void OpenMM_GBSAOBCForce_addParticle(OpenMM_GBSAOBCForce* gbsa, void OpenMM_GBSAOBCForce_addParticle(OpenMM_GBSAOBCForce* gbsa,
double charge, double radiusInNm, double scalingFactor) double charge, double radiusInNm, double scalingFactor)
{ { ((GBSAOBCForce*)gbsa)->addParticle(charge, radiusInNm, scalingFactor); }
((GBSAOBCForce*)gbsa)->addParticle(charge, radiusInNm, scalingFactor);
}
void openmm_gbsaobcforce_addparticle_(OpenMM_GBSAOBCForce*& gbsa, void openmm_gbsaobcforce_addparticle_(OpenMM_GBSAOBCForce*& gbsa,
const double& charge, const double& radiusInNm, const double& scalingFactor) const double& charge, const double& radiusInNm, const double& scalingFactor)
{ OpenMM_GBSAOBCForce_addParticle(gbsa,charge, radiusInNm, scalingFactor);} { OpenMM_GBSAOBCForce_addParticle(gbsa,charge, radiusInNm, scalingFactor); }
///////////////////////////////
// OpenMM::HarmonicBondForce //
///////////////////////////////
// create
OpenMM_HarmonicBondForce* OpenMM_HarmonicBondForce_create()
{ return (OpenMM_HarmonicBondForce*)new HarmonicBondForce(); }
void openmm_harmonicbondforce_create_(OpenMM_HarmonicBondForce*& frc)
{ frc = OpenMM_HarmonicBondForce_create();}
void OPENMM_HARMONICBONDFORCE_CREATE(OpenMM_HarmonicBondForce*& frc)
{ frc = OpenMM_HarmonicBondForce_create();}
// destroy
void OpenMM_HarmonicBondForce_destroy(OpenMM_HarmonicBondForce* doomed)
{ delete (HarmonicBondForce*)doomed; }
void openmm_harmonicbondforce_destroy_(OpenMM_HarmonicBondForce*& doomed)
{ OpenMM_HarmonicBondForce_destroy(doomed); doomed = 0;}
void OPENMM_HARMONICBONDFORCE_DESTROY(OpenMM_HarmonicBondForce*& doomed)
{ OpenMM_HarmonicBondForce_destroy(doomed); doomed = 0;}
// getNumBonds
int OpenMM_HarmonicBondForce_getNumBonds(const OpenMM_HarmonicBondForce* hbf)
{ return ((const HarmonicBondForce*)hbf)->getNumBonds(); }
int openmm_harmonicbondforce_getnumbonds_(const OpenMM_HarmonicBondForce* const& hbf)
{ return OpenMM_HarmonicBondForce_getNumBonds(hbf); }
int OPENMM_HARMONICBONDFORCE_GETNUMBONDS(const OpenMM_HarmonicBondForce* const& hbf)
{ return OpenMM_HarmonicBondForce_getNumBonds(hbf); }
// addBond
int OpenMM_HarmonicBondForce_addBond(OpenMM_HarmonicBondForce* hbf, int p1, int p2, double len, double k)
{ return ((HarmonicBondForce*)hbf)->addBond(p1,p2,len,k); }
int openmm_harmonicbondforce_addbond_(OpenMM_HarmonicBondForce* const& hbf, int const& p1, int const& p2, double const& len, double const& k)
{ return OpenMM_HarmonicBondForce_addBond(hbf,p1,p2,len,k); }
int OPENMM_HARMONICBONDFORCE_ADDBOND(OpenMM_HarmonicBondForce* const& hbf, int const& p1, int const& p2, double const& len, double const& k)
{ return OpenMM_HarmonicBondForce_addBond(hbf,p1,p2,len,k); }
// setBondParameters
void OpenMM_HarmonicBondForce_setBondParameters(OpenMM_HarmonicBondForce* hbf, int ix, int p1, int p2, double len, double k)
{ ((HarmonicBondForce*)hbf)->setBondParameters(ix,p1,p2,len,k); }
void openmm_harmonicbondforce_setbondparameters_(OpenMM_HarmonicBondForce* const& hbf, int const& ix, int const& p1, int const& p2, double const& len, double const& k)
{ OpenMM_HarmonicBondForce_setBondParameters(hbf,ix,p1,p2,len,k); }
void OPENMM_HARMONICBONDFORCE_SETBONDPARAMETERS(OpenMM_HarmonicBondForce* const& hbf, int const& ix, int const& p1, int const& p2, double const& len, double const& k)
{ OpenMM_HarmonicBondForce_setBondParameters(hbf,ix,p1,p2,len,k); }
// getBondParameters
void OpenMM_HarmonicBondForce_getBondParameters(const OpenMM_HarmonicBondForce* hbf, int ix,
int* p1, int* p2, double* len, double* k)
{ ((const HarmonicBondForce*)hbf)->getBondParameters(ix,*p1,*p2,*len,*k); }
void openmm_harmonicbondforce_getbondparameters_(const OpenMM_HarmonicBondForce* const& hbf, int const& ix, int& p1, int& p2, double& len, double& k)
{ OpenMM_HarmonicBondForce_getBondParameters(hbf,ix,&p1,&p2,&len,&k); }
void OPENMM_HARMONICBONDFORCE_GETBONDPARAMETERS(const OpenMM_HarmonicBondForce* const& hbf, int const& ix, int& p1, int& p2, double& len, double& k)
{ OpenMM_HarmonicBondForce_getBondParameters(hbf,ix,&p1,&p2,&len,&k); }
////////////////////////////////
// OpenMM::HarmonicAngleForce //
////////////////////////////////
// create
OpenMM_HarmonicAngleForce* OpenMM_HarmonicAngleForce_create()
{ return (OpenMM_HarmonicAngleForce*)new HarmonicAngleForce(); }
void openmm_harmonicangleforce_create_(OpenMM_HarmonicAngleForce*& frc)
{ frc = OpenMM_HarmonicAngleForce_create();}
void OPENMM_HARMONICANGLEFORCE_CREATE(OpenMM_HarmonicAngleForce*& frc)
{ frc = OpenMM_HarmonicAngleForce_create();}
// destroy
void OpenMM_HarmonicAngleForce_destroy(OpenMM_HarmonicAngleForce* doomed)
{ delete (HarmonicAngleForce*)doomed; }
void openmm_harmonicangleforce_destroy_(OpenMM_HarmonicAngleForce*& doomed)
{ OpenMM_HarmonicAngleForce_destroy(doomed); doomed = 0;}
void OPENMM_HARMONICANGLEFORCE_DESTROY(OpenMM_HarmonicAngleForce*& doomed)
{ OpenMM_HarmonicAngleForce_destroy(doomed); doomed = 0;}
// getNumAngles
int OpenMM_HarmonicAngleForce_getNumAngles(const OpenMM_HarmonicAngleForce* haf)
{ return ((const HarmonicAngleForce*)haf)->getNumAngles(); }
int openmm_harmonicangleforce_getnumangles_(const OpenMM_HarmonicAngleForce* const& haf)
{ return OpenMM_HarmonicAngleForce_getNumAngles(haf); }
int OPENMM_HARMONICANGLEFORCE_GETNUMANGLES(const OpenMM_HarmonicAngleForce* const& haf)
{ return OpenMM_HarmonicAngleForce_getNumAngles(haf); }
// addAngle
int OpenMM_HarmonicAngleForce_addAngle(OpenMM_HarmonicAngleForce* haf, int p1, int p2, int p3, double angle, double k)
{ return ((HarmonicAngleForce*)haf)->addAngle(p1,p2,p3,angle,k); }
int openmm_harmonicangleforce_addangle_(OpenMM_HarmonicAngleForce* const& haf, int const& p1, int const& p2, int const& p3, double const& angle, double const& k)
{ return OpenMM_HarmonicAngleForce_addAngle(haf,p1,p2,p3,angle,k); }
int OPENMM_HARMONICANGLEFORCE_ADDANGLE(OpenMM_HarmonicAngleForce* const& haf, int const& p1, int const& p2, int const& p3, double const& angle, double const& k)
{ return OpenMM_HarmonicAngleForce_addAngle(haf,p1,p2,p3,angle,k); }
// setAngleParameters
void OpenMM_HarmonicAngleForce_setAngleParameters(OpenMM_HarmonicAngleForce* haf, int ix, int p1, int p2, int p3, double angle, double k)
{ ((HarmonicAngleForce*)haf)->setAngleParameters(ix,p1,p2,p3,angle,k); }
void openmm_harmonicangleforce_setangleparameters_(OpenMM_HarmonicAngleForce* const& haf, int const& ix, int const& p1, int const& p2, int const& p3, double const& angle, double const& k)
{ OpenMM_HarmonicAngleForce_setAngleParameters(haf,ix,p1,p2,p3,angle,k); }
void OPENMM_HARMONICANGLEFORCE_SETANGLEPARAMETERS(OpenMM_HarmonicAngleForce* const& haf, int const& ix, int const& p1, int const& p2, int const& p3, double const& angle, double const& k)
{ OpenMM_HarmonicAngleForce_setAngleParameters(haf,ix,p1,p2,p3,angle,k); }
// getAngleParameters
void OpenMM_HarmonicAngleForce_getAngleParameters(const OpenMM_HarmonicAngleForce* haf, int ix,
int* p1, int* p2, int* p3, double* angle, double* k)
{ ((const HarmonicAngleForce*)haf)->getAngleParameters(ix,*p1,*p2,*p3,*angle,*k); }
void openmm_harmonicangleforce_getangleparameters_(const OpenMM_HarmonicAngleForce* const& haf, int const& ix, int& p1, int& p2, int& p3, double& angle, double& k)
{ OpenMM_HarmonicAngleForce_getAngleParameters(haf,ix,&p1,&p2,&p3,&angle,&k); }
void OPENMM_HARMONICANGLEFORCE_GETANGLEPARAMETERS(const OpenMM_HarmonicAngleForce* const& haf, int const& ix, int& p1, int& p2, int& p3, double& angle, double& k)
{ OpenMM_HarmonicAngleForce_getAngleParameters(haf,ix,&p1,&p2,&p3,&angle,&k); }
//////////////////////////////////
// OpenMM::PeriodicTorsionForce //
//////////////////////////////////
// create
OpenMM_PeriodicTorsionForce* OpenMM_PeriodicTorsionForce_create()
{ return (OpenMM_PeriodicTorsionForce*)new PeriodicTorsionForce(); }
void openmm_periodictorsionforce_create_(OpenMM_PeriodicTorsionForce*& frc)
{ frc = OpenMM_PeriodicTorsionForce_create();}
void OPENMM_PERIODICTORSIONFORCE_CREATE(OpenMM_PeriodicTorsionForce*& frc)
{ frc = OpenMM_PeriodicTorsionForce_create();}
// destroy
void OpenMM_PeriodicTorsionForce_destroy(OpenMM_PeriodicTorsionForce* doomed)
{ delete (PeriodicTorsionForce*)doomed; }
void openmm_periodictorsionforce_destroy_(OpenMM_PeriodicTorsionForce*& doomed)
{ OpenMM_PeriodicTorsionForce_destroy(doomed); doomed = 0;}
void OPENMM_PERIODICTORSIONFORCE_DESTROY(OpenMM_PeriodicTorsionForce*& doomed)
{ OpenMM_PeriodicTorsionForce_destroy(doomed); doomed = 0;}
// getNumTorsions
int OpenMM_PeriodicTorsionForce_getNumTorsions(const OpenMM_PeriodicTorsionForce* haf)
{ return ((const PeriodicTorsionForce*)haf)->getNumTorsions(); }
int openmm_periodictorsionforce_getnumangles_(const OpenMM_PeriodicTorsionForce* const& haf)
{ return OpenMM_PeriodicTorsionForce_getNumTorsions(haf); }
int OPENMM_PERIODICTORSIONFORCE_GETNUMANGLES(const OpenMM_PeriodicTorsionForce* const& haf)
{ return OpenMM_PeriodicTorsionForce_getNumTorsions(haf); }
// addTorsion
int OpenMM_PeriodicTorsionForce_addTorsion(OpenMM_PeriodicTorsionForce* haf, int p1, int p2, int p3, int p4, int periodicity, double phase, double k)
{ return ((PeriodicTorsionForce*)haf)->addTorsion(p1,p2,p3,p4,periodicity,phase,k); }
int openmm_periodictorsionforce_addtorsion_(OpenMM_PeriodicTorsionForce* const& haf, int const& p1, int const& p2, int const& p3, int const& p4, int const& periodicity, double const& phase, double const& k)
{ return OpenMM_PeriodicTorsionForce_addTorsion(haf,p1,p2,p3,p4,periodicity,phase,k); }
int OPENMM_PERIODICTORSIONFORCE_ADDTORSION(OpenMM_PeriodicTorsionForce* const& haf, int const& p1, int const& p2, int const& p3, int const& p4, int const& periodicity, double const& phase, double const& k)
{ return OpenMM_PeriodicTorsionForce_addTorsion(haf,p1,p2,p3,p4,periodicity,phase,k); }
// setTorsionParameters
void OpenMM_PeriodicTorsionForce_setTorsionParameters(OpenMM_PeriodicTorsionForce* haf, int ix, int p1, int p2, int p3, int p4, int periodicity, double phase, double k)
{ ((PeriodicTorsionForce*)haf)->setTorsionParameters(ix,p1,p2,p3,p4,periodicity,phase,k); }
void openmm_periodictorsionforce_settorsionparameters_(OpenMM_PeriodicTorsionForce* const& haf, int const& ix, int const& p1, int const& p2, int const& p3, int const& p4, int const& periodicity, double const& phase, double const& k)
{ OpenMM_PeriodicTorsionForce_setTorsionParameters(haf,ix,p1,p2,p3,p4,periodicity,phase,k); }
void OPENMM_PERIODICTORSIONFORCE_SETTORSIONPARAMETERS(OpenMM_PeriodicTorsionForce* const& haf, int const& ix, int const& p1, int const& p2, int const& p3, int const& p4, int const& periodicity, double const& phase, double const& k)
{ OpenMM_PeriodicTorsionForce_setTorsionParameters(haf,ix,p1,p2,p3,p4,periodicity,phase,k); }
// getTorsionParameters
void OpenMM_PeriodicTorsionForce_getTorsionParameters(const OpenMM_PeriodicTorsionForce* haf, int ix,
int* p1, int* p2, int* p3, int* p4, int* periodicity, double* phase, double* k)
{ ((const PeriodicTorsionForce*)haf)->getTorsionParameters(ix,*p1,*p2,*p3,*p4,*periodicity,*phase,*k); }
void openmm_periodictorsionforce_gettorsionparameters_(const OpenMM_PeriodicTorsionForce* const& haf, int const& ix, int& p1, int& p2, int& p3, int& p4, int& periodicity, double& phase, double& k)
{ OpenMM_PeriodicTorsionForce_getTorsionParameters(haf,ix,&p1,&p2,&p3,&p4,&periodicity,&phase,&k); }
void OPENMM_PERIODICTORSIONFORCE_GETTORSIONPARAMETERS(const OpenMM_PeriodicTorsionForce* const& haf, int const& ix, int& p1, int& p2, int& p3, int& p4, int& periodicity, double& phase, double& k)
{ OpenMM_PeriodicTorsionForce_getTorsionParameters(haf,ix,&p1,&p2,&p3,&p4,&periodicity,&phase,&k); }
//////////////////////// ////////////////////////
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* This header should be included by a C main program that would like to * This header should be included by a C main program that would like to
* access the OpenMM API through the C wrappers. Please note that this is an * access the OpenMM API through the C wrappers. Please note that this is an
* experimentatl prototype, not an official part of OpenMM; it is just an * experimental prototype, not an official part of OpenMM; it is just an
* example of how the C++ API can be wrapped for access from C. * example of how the C++ API can be wrapped for access from C.
* *
* This set of wrappers is incomplete. If you add more, please send them * This set of wrappers is incomplete. If you add more, please send them
...@@ -26,11 +26,15 @@ ...@@ -26,11 +26,15 @@
*/ */
/* These first three types represent the three OpenMM runtime objects that /* These first three types represent the three OpenMM runtime objects that
* must persist from call to call during an OpenMM-powered simulation. */ * must persist from call to call during an OpenMM-powered simulation.
* OpenMM_Integrator is the generic type of all Integrator objects. */
typedef struct OpenMM_System_s OpenMM_System; typedef struct OpenMM_System_s OpenMM_System;
typedef struct OpenMM_Integrator_s OpenMM_Integrator; typedef struct OpenMM_Integrator_s OpenMM_Integrator;
typedef struct OpenMM_Context_s OpenMM_Context; typedef struct OpenMM_Context_s OpenMM_Context;
/* This is the generic type of all Force objects. */
typedef struct OpenMM_Force_s OpenMM_Force;
/* This struct collects all the runtime object pointers together to /* This struct collects all the runtime object pointers together to
* facilitate use of an opaque handle in high-level C or Fortran code * facilitate use of an opaque handle in high-level C or Fortran code
* that doesn't have (or want) access to OpenMM declarations. This * that doesn't have (or want) access to OpenMM declarations. This
...@@ -43,6 +47,7 @@ typedef struct OpenMM_RuntimeObjects_s { ...@@ -43,6 +47,7 @@ typedef struct OpenMM_RuntimeObjects_s {
typedef double OpenMM_Vec3[3]; typedef double OpenMM_Vec3[3];
typedef struct OpenMM_Vec3Array_s OpenMM_Vec3Array; typedef struct OpenMM_Vec3Array_s OpenMM_Vec3Array;
typedef struct OpenMM_BondArray_s OpenMM_BondArray;
typedef struct OpenMM_String_s OpenMM_String; typedef struct OpenMM_String_s OpenMM_String;
/* /*
...@@ -57,9 +62,11 @@ typedef struct OpenMM_LangevinIntegrator_s OpenMM_LangevinIntegrator; ...@@ -57,9 +62,11 @@ typedef struct OpenMM_LangevinIntegrator_s OpenMM_LangevinIntegrator;
* OpenMM_Force is the generic type for all Force objects. Create the * OpenMM_Force is the generic type for all Force objects. Create the
* concrete Force object and then cast it to the generic type. * concrete Force object and then cast it to the generic type.
*/ */
typedef struct OpenMM_Force_s OpenMM_Force;
typedef struct OpenMM_NonbondedForce_s OpenMM_NonbondedForce; typedef struct OpenMM_NonbondedForce_s OpenMM_NonbondedForce;
typedef struct OpenMM_GBSAOBCForce_s OpenMM_GBSAOBCForce; typedef struct OpenMM_GBSAOBCForce_s OpenMM_GBSAOBCForce;
typedef struct OpenMM_HarmonicBondForce_s OpenMM_HarmonicBondForce;
typedef struct OpenMM_HarmonicAngleForce_s OpenMM_HarmonicAngleForce;
typedef struct OpenMM_PeriodicTorsionForce_s OpenMM_PeriodicTorsionForce;
typedef enum { typedef enum {
OpenMM_NonbondedForce_NoCutoff = 0, OpenMM_NonbondedForce_NoCutoff = 0,
...@@ -137,6 +144,15 @@ extern void OpenMM_Vec3Array_set(OpenMM_Vec3Array*, int i, const ...@@ -137,6 +144,15 @@ extern void OpenMM_Vec3Array_set(OpenMM_Vec3Array*, int i, const
extern void OpenMM_Vec3Array_setScaled(OpenMM_Vec3Array*, int i, const double[3], double s); extern void OpenMM_Vec3Array_setScaled(OpenMM_Vec3Array*, int i, const double[3], double s);
extern void OpenMM_Vec3_scale(const double in[3], double s, double out[3]); extern void OpenMM_Vec3_scale(const double in[3], double s, double out[3]);
/* OpenMM_BondArray */
extern OpenMM_BondArray* OpenMM_BondArray_create(int n);
extern int OpenMM_BondArray_size(const OpenMM_BondArray*);
extern void OpenMM_BondArray_resize(OpenMM_BondArray*, int n);
extern void OpenMM_BondArray_destroy(OpenMM_BondArray*);
extern void OpenMM_BondArray_append(OpenMM_BondArray*, int p1, int p2);
extern void OpenMM_BondArray_get(const OpenMM_BondArray*, int i, int* p1, int* p2);
extern void OpenMM_BondArray_set(OpenMM_BondArray*, int i, int p1, int p2);
/* OpenMM_String */ /* OpenMM_String */
extern OpenMM_String* OpenMM_String_create(const char* init); extern OpenMM_String* OpenMM_String_create(const char* init);
extern void OpenMM_String_destroy(OpenMM_String*); extern void OpenMM_String_destroy(OpenMM_String*);
...@@ -161,13 +177,37 @@ extern OpenMM_NonbondedForce* OpenMM_NonbondedForce_create(); ...@@ -161,13 +177,37 @@ extern OpenMM_NonbondedForce* OpenMM_NonbondedForce_create();
extern void OpenMM_NonbondedForce_destroy (OpenMM_NonbondedForce*); extern void OpenMM_NonbondedForce_destroy (OpenMM_NonbondedForce*);
extern void OpenMM_NonbondedForce_setNonbondedMethod (OpenMM_NonbondedForce*, extern void OpenMM_NonbondedForce_setNonbondedMethod (OpenMM_NonbondedForce*,
OpenMM_NonbondedForce_NonbondedMethod); OpenMM_NonbondedForce_NonbondedMethod);
extern OpenMM_NonbondedForce_NonbondedMethod
OpenMM_NonbondedForce_getNonbondedMethod (const OpenMM_NonbondedForce*);
extern void OpenMM_NonbondedForce_setCutoffDistance (OpenMM_NonbondedForce*, double); extern void OpenMM_NonbondedForce_setCutoffDistance (OpenMM_NonbondedForce*, double);
extern double OpenMM_NonbondedForce_getCutoffDistance (const OpenMM_NonbondedForce*);
extern void OpenMM_NonbondedForce_setPeriodicBoxVectors(OpenMM_NonbondedForce*, extern void OpenMM_NonbondedForce_setPeriodicBoxVectors(OpenMM_NonbondedForce*,
const OpenMM_Vec3,const OpenMM_Vec3,const OpenMM_Vec3); const OpenMM_Vec3,const OpenMM_Vec3,const OpenMM_Vec3);
extern void OpenMM_NonbondedForce_addParticle(OpenMM_NonbondedForce*, extern void OpenMM_NonbondedForce_getPeriodicBoxVectors(const OpenMM_NonbondedForce*,
OpenMM_Vec3, OpenMM_Vec3, OpenMM_Vec3);
extern int OpenMM_NonbondedForce_addParticle(OpenMM_NonbondedForce*,
double charge, double charge,
double sigmaInNm, double sigmaInNm,
double vdwEnergyInKJ); double vdwEnergyInKJ);
extern void OpenMM_NonbondedForce_setParticleParameters(OpenMM_NonbondedForce*, int index,
double charge,
double sigmaInNm,
double vdwEnergyInKJ);
extern void OpenMM_NonbondedForce_getParticleParameters(const OpenMM_NonbondedForce*, int index,
double* charge,
double* sigmaInNm,
double* vdwEnergyInKJ);
extern int OpenMM_NonbondedForce_getNumParticles(const OpenMM_NonbondedForce*);
extern int OpenMM_NonbondedForce_getNumExceptions(const OpenMM_NonbondedForce*);
extern int OpenMM_NonbondedForce_addException(OpenMM_NonbondedForce*, int p1, int p2,
double chargeProd, double sigma, double epsilon);
extern void OpenMM_NonbondedForce_getExceptionParameters(const OpenMM_NonbondedForce*, int index, int* p1, int* p2,
double* chargeProd, double* sigma, double* epsilon);
extern void OpenMM_NonbondedForce_setExceptionParameters(OpenMM_NonbondedForce*, int index, int p1, int p2,
double chargeProd, double sigma, double epsilon);
extern void OpenMM_NonbondedForces_createExceptionsFromBonds(OpenMM_NonbondedForce*, const OpenMM_BondArray*,
double coulomb14Scale, double lj14Scale);
/* OpenMM::GBSAOBCForce */ /* OpenMM::GBSAOBCForce */
extern OpenMM_GBSAOBCForce* OpenMM_GBSAOBCForce_create(); extern OpenMM_GBSAOBCForce* OpenMM_GBSAOBCForce_create();
...@@ -179,6 +219,33 @@ extern void OpenMM_GBSAOBCForce_addParticle(OpenMM_GBSAOBCForce*, ...@@ -179,6 +219,33 @@ extern void OpenMM_GBSAOBCForce_addParticle(OpenMM_GBSAOBCForce*,
double radiusInNm, double radiusInNm,
double scalingFactor); double scalingFactor);
/* OpenMM::HarmonicBondForce */
extern OpenMM_HarmonicBondForce* OpenMM_HarmonicBondForce_create();
extern void OpenMM_HarmonicBondForce_destroy(OpenMM_HarmonicBondForce*);
extern int OpenMM_HarmonicBondForce_getNumBonds(const OpenMM_HarmonicBondForce*);
extern int OpenMM_HarmonicBondForce_addBond(OpenMM_HarmonicBondForce*, int p1, int p2, double len, double k);
extern void OpenMM_HarmonicBondForce_getBondParameters(const OpenMM_HarmonicBondForce*, int ix, int* p1, int* p2, double* len, double* k);
extern void OpenMM_HarmonicBondForce_setBondParameters(OpenMM_HarmonicBondForce*, int ix, int p1, int p2, double len, double k);
/* OpenMM::HarmonicAngleForce */
extern OpenMM_HarmonicAngleForce* OpenMM_HarmonicAngleForce_create();
extern void OpenMM_HarmonicAngleForce_destroy(OpenMM_HarmonicAngleForce*);
extern int OpenMM_HarmonicAngleForce_getNumAngles(const OpenMM_HarmonicAngleForce*);
extern int OpenMM_HarmonicAngleForce_addAngle(OpenMM_HarmonicAngleForce*, int p1, int p2, int p3, double angle, double k);
extern void OpenMM_HarmonicAngleForce_getAngleParameters(const OpenMM_HarmonicAngleForce*, int ix, int* p1, int* p2, int* p3, double* angle, double* k);
extern void OpenMM_HarmonicAngleForce_setAngleParameters(OpenMM_HarmonicAngleForce*, int ix, int p1, int p2, int p3, double angle, double k);
/* OpenMM::PeriodicTorsionForce */
extern OpenMM_PeriodicTorsionForce* OpenMM_PeriodicTorsionForce_create();
extern void OpenMM_PeriodicTorsionForce_destroy(OpenMM_PeriodicTorsionForce*);
extern int OpenMM_PeriodicTorsionForce_getNumTorsions(const OpenMM_PeriodicTorsionForce*);
extern int OpenMM_PeriodicTorsionForce_addTorsion(OpenMM_PeriodicTorsionForce*, int p1, int p2, int p3, int p4,
int periodicity, double phase, double k);
extern void OpenMM_PeriodicTorsionForce_getTorsionParameters(const OpenMM_PeriodicTorsionForce*, int ix, int* p1, int* p2, int* p3, int* p4,
int* periodicity, double* phase, double* k);
extern void OpenMM_PeriodicTorsionForce_setTorsionParameters(OpenMM_PeriodicTorsionForce*, int ix, int p1, int p2, int p3, int p4,
int periodicity, double phase, double k);
/* OpenMM::Integrator */ /* OpenMM::Integrator */
extern void OpenMM_Integrator_step(OpenMM_Integrator*, int numSteps); extern void OpenMM_Integrator_step(OpenMM_Integrator*, int numSteps);
extern void OpenMM_Integrator_destroy(OpenMM_Integrator*); extern void OpenMM_Integrator_destroy(OpenMM_Integrator*);
......
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