23 {
int localID,forceID;
32 for (localID=0; localID<
numAtoms; ++localID) {
34 if ((forceID=index[p[localID].
id]) != -1) {
35 Vector sf = scaling * cf[forceID];
36 forces[localID] += sf;
39 p[localID].position, p[localID].transform );
40 extVirial +=
outer(sf,vpos);
63 {
int localID,torqueID;
73 Vector consTorqueAxis, consTorquePivot;
77 for (localID=0; localID<
numAtoms; ++localID) {
79 if ((torqueID=index[p[localID].
id]) != -1) {
82 consTorqueAxis /= consTorqueAxis.
length();
83 atomRadius = p[localID].
position - consTorquePivot;
84 torque =
cross(consTorqueAxis, atomRadius) * consTorqueVal * consTorqueGlobVal;
85 forces[localID] += torque;
88 p[localID].position, p[localID].transform );
89 extVirial +=
outer(torque,vpos);
virtual void doForce(FullAtom *, Results *)
#define ADD_TENSOR_OBJECT(R, RL, D)
SimParameters * simParameters
static __thread float4 * forces
__device__ __forceinline__ float3 cross(const float3 v1, const float3 v2)
SubmitReduction * willSubmit(int setID, int size=-1)
ComputeConsTorque(ComputeID, PatchID)
static ReductionMgr * Object(void)
BigReal length(void) const
virtual void doForce(FullAtom *, Results *)
void get_constorque_params(BigReal &v, Vector &a, Vector &p, int atomnum) const
int32 * consTorqueIndexes
virtual ~ComputeConsForce()
ComputeConsForce(ComputeID, PatchID)
Tensor outer(const Vector &v1, const Vector &v2)
BigReal consTorqueGlobVal
Position reverse_transform(Position data, const Transform &t) const
#define ADD_VECTOR_OBJECT(R, RL, D)
virtual ~ComputeConsTorque()