NAMD
ComputeConsForce.C
Go to the documentation of this file.
1 
2 #include "InfoStream.h"
3 #include "SimParameters.h"
4 #include "ComputeConsForce.h"
5 #include "Molecule.h"
6 #include "Node.h"
7 #include "HomePatch.h"
8 #define MIN_DEBUG_LEVEL 4
9 //#define DEBUGM
10 #include "Debug.h"
11 
13 // compute constant force
15  : ComputeHomePatch(c,pid)
16 {
18 }
19 
21 {
22  delete reduction;
23 }
24 
26 { int localID,forceID;
27  Molecule *molecule = Node::Object()->molecule;
29  int32 *index = molecule->consForceIndexes; // Indexes into the force array
30  Vector *cf = molecule->consForce; // Force array
31  Vector *forces = r->f[Results::normal];
32  Force extForce = 0.;
33  Tensor extVirial;
34 
35  for (localID=0; localID<numAtoms; ++localID) {
36  // When the index is -1, it means there's no constant force on this atom
37  if ((forceID=index[p[localID].id]) != -1) {
38  Vector sf = scaling * cf[forceID];
39  forces[localID] += sf;
40  extForce += sf;
42  p[localID].position, p[localID].transform );
43  extVirial += outer(sf,vpos);
44  }
45  }
46  DebugM(4, "ComputeConsForce::doForce a extForce " << extForce << " extVirial " << extVirial <<"\n" << endi);
47  ADD_VECTOR_OBJECT(reduction,REDUCTION_EXT_FORCE_NORMAL,extForce);
48  ADD_TENSOR_OBJECT(reduction,REDUCTION_VIRIAL_NORMAL,extVirial);
49  reduction->submit();
50 }
51 
53 // compute "constant" torque
55  : ComputeHomePatch(c,pid)
56 {
58 }
59 
61 {
62  delete reduction;
63 }
64 
66 { int localID,torqueID;
67  Molecule *molecule = Node::Object()->molecule;
69 
70  int32 *index = molecule->consTorqueIndexes; // Indexes into the torque array
71  Vector *forces = r->f[Results::normal];
72  Force extForce = 0.;
73  Tensor extVirial;
74  const BigReal consTorqueGlobVal = simParams->consTorqueGlobVal;
75  BigReal consTorqueVal;
76  Vector consTorqueAxis, consTorquePivot;
77  Vector atomRadius;
78  Vector torque;
79 
80  for (localID=0; localID<numAtoms; ++localID) {
81  // When the index is -1, it means there's no constant torque on this atom
82  if ((torqueID=index[p[localID].id]) != -1) {
83  // compute the torqueing force and add it to the net force
84  molecule->get_constorque_params(consTorqueVal, consTorqueAxis, consTorquePivot, p[localID].id);
85  consTorqueAxis /= consTorqueAxis.length();
86  atomRadius = p[localID].position - consTorquePivot;
87  torque = cross(consTorqueAxis, atomRadius) * consTorqueVal * consTorqueGlobVal;
88  forces[localID] += torque;
89  extForce += torque;
91  p[localID].position, p[localID].transform );
92  extVirial += outer(torque,vpos);
93  }
94  }
95  ADD_VECTOR_OBJECT(reduction,REDUCTION_EXT_FORCE_NORMAL,extForce);
96  ADD_TENSOR_OBJECT(reduction,REDUCTION_VIRIAL_NORMAL,extVirial);
97  reduction->submit();
98 }
static Node * Object()
Definition: Node.h:86
virtual void doForce(FullAtom *, Results *)
NAMD_HOST_DEVICE Position reverse_transform(Position data, const Transform &t) const
Definition: Lattice.h:143
void get_constorque_params(BigReal &v, Vector &a, Vector &p, int atomnum) const
Definition: Molecule.h:1423
int32 ComputeID
Definition: NamdTypes.h:278
Lattice & lattice
Definition: Patch.h:127
NAMD_HOST_DEVICE Tensor outer(const Vector &v1, const Vector &v2)
Definition: Tensor.h:241
Definition: Vector.h:72
#define ADD_TENSOR_OBJECT(R, RL, D)
Definition: ReductionMgr.h:44
SimParameters * simParameters
Definition: Node.h:181
int32_t int32
Definition: common.h:38
#define DebugM(x, y)
Definition: Debug.h:75
std::ostream & endi(std::ostream &s)
Definition: InfoStream.C:54
Position position
Definition: NamdTypes.h:77
SubmitReduction * willSubmit(int setID, int size=-1)
Definition: ReductionMgr.C:366
ComputeConsTorque(ComputeID, PatchID)
static ReductionMgr * Object(void)
Definition: ReductionMgr.h:279
Molecule stores the structural information for the system.
Definition: Molecule.h:175
virtual void doForce(FullAtom *, Results *)
int32 * consTorqueIndexes
Definition: Molecule.h:649
virtual ~ComputeConsForce()
NAMD_HOST_DEVICE BigReal length(void) const
Definition: Vector.h:202
Force * f[maxNumForces]
Definition: PatchTypes.h:146
ComputeConsForce(ComputeID, PatchID)
#define simParams
Definition: Output.C:129
int32 * consForceIndexes
Definition: Molecule.h:646
Definition: Tensor.h:15
#define ADD_VECTOR_OBJECT(R, RL, D)
Definition: ReductionMgr.h:28
Vector * consForce
Definition: Molecule.h:647
virtual ~ComputeConsTorque()
void submit(void)
Definition: ReductionMgr.h:324
int32 PatchID
Definition: NamdTypes.h:277
Molecule * molecule
Definition: Node.h:179
HomePatch * homePatch
double BigReal
Definition: common.h:123
BigReal consForceScaling