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

#include <ComputeGBISser.h>

Inheritance diagram for ComputeGBISser:
ComputeHomePatches Compute

Public Member Functions

 ComputeGBISser (ComputeID c)
 
virtual ~ComputeGBISser ()
 
void doWork ()
 
void saveResults (GBISForceMsg *)
 
- 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 25 of file ComputeGBISser.h.

Constructor & Destructor Documentation

ComputeGBISser::ComputeGBISser ( ComputeID  c)

Definition at line 232 of file ComputeGBISser.C.

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

232  :
234 {
235  CProxy_ComputeGBISserMgr::ckLocalBranch(
236  CkpvAccess(BOCclass_group).computeGBISserMgr)->setCompute(this);
237 
239 
240 }
SubmitReduction * willSubmit(int setID, int size=-1)
Definition: ReductionMgr.C:365
static ReductionMgr * Object(void)
Definition: ReductionMgr.h:278
ComputeHomePatches(ComputeID c)
ComputeGBISser::~ComputeGBISser ( )
virtual

Definition at line 242 of file ComputeGBISser.C.

243 {
244 }

Member Function Documentation

void ComputeGBISser::doWork ( void  )
virtual

Reimplemented from Compute.

Definition at line 905 of file ComputeGBISser.C.

References atoms, ResizeArrayIter< Type >::begin(), CompAtom::charge, ComputeGBISAtom::charge, GBISCoordMsg::coord, SimParameters::coulomb_radius_offset, GBISCoordMsg::doSlow, ResizeArrayIter< Type >::end(), CompAtomExt::id, ComputeGBISAtom::id, ComputeGBISAtom::mass, MassToRadius(), MassToScreen(), GBISCoordMsg::numAtoms, Node::Object(), ComputeHomePatches::patchList, CompAtom::position, ComputeGBISAtom::position, ComputeGBISAtom::rho, ComputeGBISAtom::rho0, ComputeGBISAtom::rhos, Compute::sequence(), GBISCoordMsg::sequence, Node::simParameters, GBISCoordMsg::sourceNode, SubmitReduction::submit(), CompAtom::vdwType, ComputeGBISAtom::vdwType, and x.

906 {
907  //printf("GBIS doWork()\n");
909 
910 #if 1
911  // Skip computations if nothing to do.
912  if ( ! patchList[0].p->flags.doNonbonded )
913  {
914  for (ap = ap.begin(); ap != ap.end(); ap++) {
915  CompAtom *x = (*ap).positionBox->open();
916  //CkPrintf("GBIS%i: ComputeGBIS(%i)::doWork() openedForceBox",CkMyPe(),cid);
917  Results *r = (*ap).forceBox->open();
918  (*ap).positionBox->close(&x);
919  //CkPrintf("GBIS%i: ComputeGBIS(%i)::doWork() closedForceBox",CkMyPe(),cid);
920  (*ap).forceBox->close(&r);
921  }
922  reduction->submit();
923  return;
924  }
925 #endif
926 
927 
928  // allocate message
929  int numLocalAtoms = 0;
930  for (ap = ap.begin(); ap != ap.end(); ap++) {
931  numLocalAtoms += (*ap).p->getNumAtoms();
932  }
933 
934  GBISCoordMsg *msg = new (numLocalAtoms, 0) GBISCoordMsg;
935  msg->sourceNode = CkMyPe();
936  msg->numAtoms = numLocalAtoms;
937  ComputeGBISAtom *data_ptr = msg->coord;
939  msg->doSlow = patchList[0].p->flags.doFullElectrostatics;
940  //CkPrintf("SERIAL SLOW %i\n",msg->doSlow);
941  msg->sequence = sequence();
942 
943  // get positions
944  for (ap = ap.begin(); ap != ap.end(); ap++) {
945  FullAtomList &atoms = (*ap).p->getAtomList();
946  CompAtom *x = (*ap).positionBox->open();
947  CompAtomExt *xExt = (*ap).p->getCompAtomExtInfo();
948  int numAtoms = (*ap).p->getNumAtoms();
949  for(int i=0; i<numAtoms; ++i)
950  {
951  data_ptr->position = x[i].position;
952  data_ptr->charge = x[i].charge;
953  data_ptr->mass = atoms[i].mass;
954  data_ptr->id = xExt[i].id;
955  data_ptr->rho = MassToRadius(data_ptr->mass);
956  SimParameters *simParams = Node::Object()->simParameters;
957  data_ptr->rho0 = data_ptr->rho - simParams->coulomb_radius_offset;
958  data_ptr->rhos = data_ptr->rho0 * MassToScreen(data_ptr->mass);
959  data_ptr->vdwType = x[i].vdwType;
960  ++data_ptr;
961  }
962 
963 #if 0
964  if ( patchList[0].p->flags.doMolly ) { (*ap).avgPositionBox->close(&x); }
965  else { (*ap).positionBox->close(&x); }
966 #endif
967  (*ap).positionBox->close(&x);
968  }
969 
970  CProxy_ComputeGBISserMgr gbisProxy(CkpvAccess(BOCclass_group).computeGBISserMgr);
971  gbisProxy[0].recvCoord(msg);
972 
973 }
static Node * Object()
Definition: Node.h:86
int sequence(void)
Definition: Compute.h:64
SimParameters * simParameters
Definition: Node.h:178
ComputeHomePatchList patchList
static __thread atom * atoms
Position position
Definition: NamdTypes.h:53
BigReal coulomb_radius_offset
Charge charge
Definition: NamdTypes.h:54
#define simParams
Definition: Output.C:127
short vdwType
Definition: NamdTypes.h:55
static float MassToRadius(Mass mi)
Definition: ComputeGBIS.inl:55
static float MassToScreen(Mass mi)
void submit(void)
Definition: ReductionMgr.h:323
ComputeGBISAtom * coord
gridSize x
void ComputeGBISser::saveResults ( GBISForceMsg msg)

Definition at line 869 of file ComputeGBISser.C.

References ResizeArrayIter< Type >::begin(), ResizeArrayIter< Type >::end(), Results::f, GBISForceMsg::force, ExtForce::force, GBISForceMsg::gbInterEnergy, GBISForceMsg::gbSelfEnergy, SubmitReduction::item(), Results::nbond, ComputeHomePatches::patchList, REDUCTION_ELECT_ENERGY, Results::slow, GBISForceMsg::slowForce, and SubmitReduction::submit().

Referenced by ComputeGBISserMgr::recvForce().

869  {
870  //printf("GBIS saveResults()\n");
872 
873  ExtForce *results_ptr = msg->force;
874  ExtForce *results_ptr_slow = msg->slowForce;
875 
876  // add in forces
877  for (ap = ap.begin(); ap != ap.end(); ap++) {
878  //CkPrintf("GBIS%i: ComputeGBIS(%i)::saveResults() openedForceBox",CkMyPe(),cid);
879  Results *r = (*ap).forceBox->open();
880  Force *f = r->f[Results::nbond];
881  Force *sf = r->f[Results::slow];
882  int numAtoms = (*ap).p->getNumAtoms();
883 
884  for(int i=0; i<numAtoms; ++i) {
885  f[i] += results_ptr->force;
886  sf[i] += results_ptr_slow->force;
887  //CkPrintf("GBIS%i: slow[%i] = % e\n",CkMyPe(),i,sf[i].x);
888  ++results_ptr;
889  ++results_ptr_slow;
890  }
891  //CkPrintf("GBIS%i: ComputeGBIS(%i)::saveResults() closedForceBox",CkMyPe(),cid);
892  (*ap).forceBox->close(&r);
893  }
894 
895  //reduction->item(REDUCTION_ELECT_ENERGY) += msg->coulEnergy;
896  reduction->item(REDUCTION_ELECT_ENERGY) += msg->gbInterEnergy;
897  reduction->item(REDUCTION_ELECT_ENERGY) += msg->gbSelfEnergy;
898  //CkPrintf("energies= % e, % e, % e\n",msg->coulEnergy, msg->gbInterEnergy, msg->gbSelfEnergy);
899  reduction->submit();
900 }
Definition: Vector.h:64
ComputeHomePatchList patchList
BigReal & item(int i)
Definition: ReductionMgr.h:312
BigReal gbSelfEnergy
Force * f[maxNumForces]
Definition: PatchTypes.h:67
Force force
Definition: NamdTypes.h:202
ExtForce * slowForce
BigReal gbInterEnergy
void submit(void)
Definition: ReductionMgr.h:323
ExtForce * force

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