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

#include <ComputeFmmSerial.h>

Inheritance diagram for ComputeFmmSerial:
ComputeHomePatches Compute

Public Member Functions

 ComputeFmmSerial (ComputeID c)
 
virtual ~ComputeFmmSerial ()
 
void doWork ()
 
void saveResults (FmmSerialForceMsg *)
 
- 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 ComputeFmmSerial.h.

Constructor & Destructor Documentation

ComputeFmmSerial::ComputeFmmSerial ( ComputeID  c)

Definition at line 131 of file ComputeFmmSerial.C.

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

131  :
133 {
134  CProxy_ComputeFmmSerialMgr::ckLocalBranch(
135  CkpvAccess(BOCclass_group).computeFmmSerialMgr)->setCompute(this);
137 }
SubmitReduction * willSubmit(int setID, int size=-1)
Definition: ReductionMgr.C:365
static ReductionMgr * Object(void)
Definition: ReductionMgr.h:278
ComputeHomePatches(ComputeID c)
ComputeFmmSerial::~ComputeFmmSerial ( )
virtual

Definition at line 139 of file ComputeFmmSerial.C.

140 {
141 }

Member Function Documentation

void ComputeFmmSerial::doWork ( void  )
virtual

Reimplemented from Compute.

Definition at line 143 of file ComputeFmmSerial.C.

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

144 {
146 
147  // Skip computations if nothing to do.
148  if ( ! patchList[0].p->flags.doFullElectrostatics )
149  {
150  for (ap = ap.begin(); ap != ap.end(); ap++) {
151  CompAtom *x = (*ap).positionBox->open();
152  Results *r = (*ap).forceBox->open();
153  (*ap).positionBox->close(&x);
154  (*ap).forceBox->close(&r);
155  }
156  reduction->submit();
157  return;
158  }
159 
160  // allocate message
161  int numLocalAtoms = 0;
162  for (ap = ap.begin(); ap != ap.end(); ap++) {
163  numLocalAtoms += (*ap).p->getNumAtoms();
164  }
165 
166  FmmSerialCoordMsg *msg = new (numLocalAtoms, 0) FmmSerialCoordMsg;
167  msg->sourceNode = CkMyPe();
168  msg->numAtoms = numLocalAtoms;
169  msg->lattice = patchList[0].p->flags.lattice;
170  ComputeFmmSerialAtom *data_ptr = msg->coord;
171 
172  // get positions
173  for (ap = ap.begin(); ap != ap.end(); ap++) {
174  CompAtom *x = (*ap).positionBox->open();
175  CompAtomExt *xExt = (*ap).p->getCompAtomExtInfo();
176  if ( patchList[0].p->flags.doMolly ) {
177  (*ap).positionBox->close(&x);
178  x = (*ap).avgPositionBox->open();
179  }
180  int numAtoms = (*ap).p->getNumAtoms();
181 
182  for(int i=0; i < numAtoms; i++)
183  {
184  data_ptr->position = x[i].position;
185  data_ptr->charge = x[i].charge;
186  data_ptr->id = xExt[i].id;
187  ++data_ptr;
188  }
189 
190  if ( patchList[0].p->flags.doMolly ) { (*ap).avgPositionBox->close(&x); }
191  else { (*ap).positionBox->close(&x); }
192  }
193 
194  CProxy_ComputeFmmSerialMgr fmmProxy(
195  CkpvAccess(BOCclass_group).computeFmmSerialMgr);
196  fmmProxy[0].recvCoord(msg);
197 }
ComputeHomePatchList patchList
Position position
Definition: NamdTypes.h:53
Charge charge
Definition: NamdTypes.h:54
ComputeFmmSerialAtom * coord
void submit(void)
Definition: ReductionMgr.h:323
gridSize x
void ComputeFmmSerial::saveResults ( FmmSerialForceMsg msg)

Definition at line 360 of file ComputeFmmSerial.C.

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

Referenced by ComputeFmmSerialMgr::recvForce().

361 {
363 
364  FmmSerialForce *results_ptr = msg->force;
365 
366  // add in forces
367  for (ap = ap.begin(); ap != ap.end(); ap++) {
368  Results *r = (*ap).forceBox->open();
369  Force *f = r->f[Results::slow];
370  int numAtoms = (*ap).p->getNumAtoms();
371 
372  for(int i=0; i<numAtoms; ++i) {
373  f[i].x += results_ptr->x;
374  f[i].y += results_ptr->y;
375  f[i].z += results_ptr->z;
376  ++results_ptr;
377  }
378 
379  (*ap).forceBox->close(&r);
380  }
381 
382  reduction->item(REDUCTION_ELECT_ENERGY_SLOW) += msg->energy;
383  reduction->item(REDUCTION_VIRIAL_SLOW_XX) += msg->virial[0][0];
384  reduction->item(REDUCTION_VIRIAL_SLOW_XY) += msg->virial[0][1];
385  reduction->item(REDUCTION_VIRIAL_SLOW_XZ) += msg->virial[0][2];
386  reduction->item(REDUCTION_VIRIAL_SLOW_YX) += msg->virial[1][0];
387  reduction->item(REDUCTION_VIRIAL_SLOW_YY) += msg->virial[1][1];
388  reduction->item(REDUCTION_VIRIAL_SLOW_YZ) += msg->virial[1][2];
389  reduction->item(REDUCTION_VIRIAL_SLOW_ZX) += msg->virial[2][0];
390  reduction->item(REDUCTION_VIRIAL_SLOW_ZY) += msg->virial[2][1];
391  reduction->item(REDUCTION_VIRIAL_SLOW_ZZ) += msg->virial[2][2];
392  reduction->submit();
393 }
FmmSerialForce * force
Definition: Vector.h:64
ComputeHomePatchList patchList
BigReal & item(int i)
Definition: ReductionMgr.h:312
BigReal z
Definition: Vector.h:66
Force * f[maxNumForces]
Definition: PatchTypes.h:67
BigReal virial[3][3]
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: