diff --git a/src/Configuration.cpp b/src/Configuration.cpp index 6782d822e8cdfd9ba463af961bd6b112db090c41..0c4c0c9403b191c610d137e8db47fdaacd261379 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -1257,7 +1257,13 @@ int Configuration::readParameters(const char * config_file) { } else if (param == String("rotDamping")) { if (currRB < 0) exit(1); rigidBody[currRB].rotDamping = stringToVector3( value ); - } else if (param == String("attachedParticles")) { + } else if (param == String("constantTorque")) + rigidBody[currRB].constantTorque = stringToVector3( value ); + else if (param == String("constantForce")) + rigidBody[currRB].constantForce = stringToVector3( value ); + else if (param == String("vectorTorque")) + rigidBody[currRB].vectorTorque = stringToVector3( value ); + else if (param == String("attachedParticles")) { rigidBody[currRB].append_attached_particle_file(value); } else if (param == String("densityGrid")) { if (currRB < 0) exit(1); diff --git a/src/RigidBodyController.cu b/src/RigidBodyController.cu index 6643e5584ae5c69bffb09f787c12ec9bba60c3dd..a466904bb6ede6882ffe1b94455782bac06eef16 100644 --- a/src/RigidBodyController.cu +++ b/src/RigidBodyController.cu @@ -576,6 +576,8 @@ void RigidBodyController::updateForces(Vector3* pos_d, Vector3* force_d, int s, for (int j = 0; j < rigidBodyByType[i].size(); j++) { RigidBody& rb = rigidBodyByType[i][j]; rb.callGridParticleForceKernel( pos_d, force_d, s, energy, get_energy, scheme, sys, sys_d, particleForces_d, particleForce_offset, pfo_idx ); + rb.addTorque(rb.t -> constantTorque); + rb.addForce(rb.t -> constantForce); } } diff --git a/src/RigidBodyType.h b/src/RigidBodyType.h index 5cc1442052a102da7198e1e6eeda806c4cdaa8b7..0a86b81f75f6a72f8b710385dd47ef756b2ad5e0 100644 --- a/src/RigidBodyType.h +++ b/src/RigidBodyType.h @@ -24,6 +24,7 @@ class RigidBodyType { public: RigidBodyType(const String& name = "", const Configuration* conf = NULL ) : name(name), conf(conf), num(0), + constantTorque(Vector3(0.f)),constantForce(Vector3(0.f)), reservoir(NULL), mass(1.0f), inertia(), transDamping(), rotDamping(), initPos(), initRot(Matrix3(1.0f)), initMomentum(Vector3(0.f)), initAngularMomentum(Vector3(0.f)), numPotGrids(0), numDenGrids(0), numPmfs(0), numParticles(NULL) { } @@ -77,7 +78,9 @@ public: Vector3 rotDamping; Vector3 transForceCoeff; Vector3 rotTorqueCoeff; - + Vector3 constantTorque; + Vector3 constantForce; + Vector3 vectorTorque; Vector3 initPos; Matrix3 initRot; Vector3 initMomentum;