NAMD
Public Member Functions | List of all members
ComputeMsmSerial Class Reference

#include <ComputeMsmSerial.h>

Inheritance diagram for ComputeMsmSerial:
ComputeHomePatches Compute

Public Member Functions

 ComputeMsmSerial (ComputeID c)
 
virtual ~ComputeMsmSerial ()
 
void doWork ()
 
void saveResults (MsmSerialForceMsg *)
 
- Public Member Functions inherited from ComputeHomePatches
 ComputeHomePatches (ComputeID c)
 
virtual ~ComputeHomePatches ()
 
virtual void initialize ()
 
virtual void atomUpdate ()
 
FlagsgetFlags (void)
 
- Public Member Functions inherited from Compute
 Compute (ComputeID)
 
int type ()
 
virtual ~Compute ()
 
void setNumPatches (int n)
 
int getNumPatches ()
 
virtual void patchReady (PatchID, int doneMigration, int seq)
 
virtual int noWork ()
 
virtual void finishPatch (int)
 
int sequence (void)
 
int priority (void)
 
int getGBISPhase (void)
 
virtual void gbisP2PatchReady (PatchID, int seq)
 
virtual void gbisP3PatchReady (PatchID, int seq)
 

Additional Inherited Members

- Public Attributes inherited from Compute
const ComputeID cid
 
LDObjHandle ldObjHandle
 
LocalWorkMsg *const localWorkMsg
 
- Protected Member Functions inherited from Compute
void enqueueWork ()
 
- Protected Attributes inherited from ComputeHomePatches
int useAvgPositions
 
int hasPatchZero
 
ComputeHomePatchList patchList
 
PatchMappatchMap
 
- Protected Attributes inherited from Compute
int computeType
 
int basePriority
 
int gbisPhase
 
int gbisPhasePriority [3]
 

Detailed Description

Definition at line 17 of file ComputeMsmSerial.h.

Constructor & Destructor Documentation

ComputeMsmSerial::ComputeMsmSerial ( ComputeID  c)

Definition at line 101 of file ComputeMsmSerial.C.

References ReductionMgr::Object(), REDUCTIONS_BASIC, and ReductionMgr::willSubmit().

101  :
103 {
104  CProxy_ComputeMsmSerialMgr::ckLocalBranch(
105  CkpvAccess(BOCclass_group).computeMsmSerialMgr)->setCompute(this);
107 }
SubmitReduction * willSubmit(int setID, int size=-1)
Definition: ReductionMgr.C:365
static ReductionMgr * Object(void)
Definition: ReductionMgr.h:278
ComputeHomePatches(ComputeID c)
ComputeMsmSerial::~ComputeMsmSerial ( )
virtual

Definition at line 109 of file ComputeMsmSerial.C.

110 {
111 }

Member Function Documentation

void ComputeMsmSerial::doWork ( void  )
virtual

Reimplemented from Compute.

Definition at line 113 of file ComputeMsmSerial.C.

References ResizeArrayIter< Type >::begin(), ComputeMsmSerialAtom::charge, CompAtom::charge, MsmSerialCoordMsg::coord, ResizeArrayIter< Type >::end(), ComputeMsmSerialAtom::id, CompAtomExt::id, MsmSerialCoordMsg::lattice, MsmSerialCoordMsg::numAtoms, ComputeHomePatches::patchList, ComputeMsmSerialAtom::position, CompAtom::position, MsmSerialCoordMsg::sourceNode, SubmitReduction::submit(), and x.

114 {
116 
117  // Skip computations if nothing to do.
118  if ( ! patchList[0].p->flags.doFullElectrostatics )
119  {
120  for (ap = ap.begin(); ap != ap.end(); ap++) {
121  CompAtom *x = (*ap).positionBox->open();
122  Results *r = (*ap).forceBox->open();
123  (*ap).positionBox->close(&x);
124  (*ap).forceBox->close(&r);
125  }
126  reduction->submit();
127  return;
128  }
129 
130  // allocate message
131  int numLocalAtoms = 0;
132  for (ap = ap.begin(); ap != ap.end(); ap++) {
133  numLocalAtoms += (*ap).p->getNumAtoms();
134  }
135 
136  MsmSerialCoordMsg *msg = new (numLocalAtoms, 0) MsmSerialCoordMsg;
137  msg->sourceNode = CkMyPe();
138  msg->numAtoms = numLocalAtoms;
139  msg->lattice = patchList[0].p->flags.lattice;
140  ComputeMsmSerialAtom *data_ptr = msg->coord;
141 
142  // get positions
143  for (ap = ap.begin(); ap != ap.end(); ap++) {
144  CompAtom *x = (*ap).positionBox->open();
145  CompAtomExt *xExt = (*ap).p->getCompAtomExtInfo();
146  if ( patchList[0].p->flags.doMolly ) {
147  (*ap).positionBox->close(&x);
148  x = (*ap).avgPositionBox->open();
149  }
150  int numAtoms = (*ap).p->getNumAtoms();
151 
152  for(int i=0; i < numAtoms; i++)
153  {
154  data_ptr->position = x[i].position;
155  data_ptr->charge = x[i].charge;
156  data_ptr->id = xExt[i].id;
157  ++data_ptr;
158  }
159 
160  if ( patchList[0].p->flags.doMolly ) { (*ap).avgPositionBox->close(&x); }
161  else { (*ap).positionBox->close(&x); }
162  }
163 
164  CProxy_ComputeMsmSerialMgr msmProxy(
165  CkpvAccess(BOCclass_group).computeMsmSerialMgr);
166  msmProxy[0].recvCoord(msg);
167 }
ComputeHomePatchList patchList
ComputeMsmSerialAtom * coord
Position position
Definition: NamdTypes.h:53
Charge charge
Definition: NamdTypes.h:54
void submit(void)
Definition: ReductionMgr.h:323
gridSize x
void ComputeMsmSerial::saveResults ( MsmSerialForceMsg msg)

Definition at line 467 of file ComputeMsmSerial.C.

References ResizeArrayIter< Type >::begin(), ResizeArrayIter< Type >::end(), MsmSerialForceMsg::energy, Results::f, MsmSerialForceMsg::force, SubmitReduction::item(), ComputeHomePatches::patchList, REDUCTION_ELECT_ENERGY_SLOW, Results::slow, SubmitReduction::submit(), MsmSerialForceMsg::virial, Vector::x, Vector::y, and Vector::z.

Referenced by ComputeMsmSerialMgr::recvForce().

468 {
470 
471  MsmSerialForce *results_ptr = msg->force;
472 
473  // add in forces
474  for (ap = ap.begin(); ap != ap.end(); ap++) {
475  Results *r = (*ap).forceBox->open();
476  Force *f = r->f[Results::slow];
477  int numAtoms = (*ap).p->getNumAtoms();
478 
479  for(int i=0; i<numAtoms; ++i) {
480  f[i].x += results_ptr->x;
481  f[i].y += results_ptr->y;
482  f[i].z += results_ptr->z;
483  ++results_ptr;
484  }
485 
486  (*ap).forceBox->close(&r);
487  }
488 
489  reduction->item(REDUCTION_ELECT_ENERGY_SLOW) += msg->energy;
490  reduction->item(REDUCTION_VIRIAL_SLOW_XX) += msg->virial[0][0];
491  reduction->item(REDUCTION_VIRIAL_SLOW_XY) += msg->virial[0][1];
492  reduction->item(REDUCTION_VIRIAL_SLOW_XZ) += msg->virial[0][2];
493  reduction->item(REDUCTION_VIRIAL_SLOW_YX) += msg->virial[1][0];
494  reduction->item(REDUCTION_VIRIAL_SLOW_YY) += msg->virial[1][1];
495  reduction->item(REDUCTION_VIRIAL_SLOW_YZ) += msg->virial[1][2];
496  reduction->item(REDUCTION_VIRIAL_SLOW_ZX) += msg->virial[2][0];
497  reduction->item(REDUCTION_VIRIAL_SLOW_ZY) += msg->virial[2][1];
498  reduction->item(REDUCTION_VIRIAL_SLOW_ZZ) += msg->virial[2][2];
499  reduction->submit();
500 }
BigReal virial[3][3]
Definition: Vector.h:64
ComputeHomePatchList patchList
BigReal & item(int i)
Definition: ReductionMgr.h:312
BigReal z
Definition: Vector.h:66
MsmSerialForce * force
Force * f[maxNumForces]
Definition: PatchTypes.h:67
BigReal x
Definition: Vector.h:66
BigReal y
Definition: Vector.h:66
void submit(void)
Definition: ReductionMgr.h:323

The documentation for this class was generated from the following files: