00001
00007 #ifndef COMPUTEPME_H
00008 #define COMPUTEPME_H
00009
00010 #include "ComputeHomePatches.h"
00011 #include "PmeBase.h"
00012 #include "NamdTypes.h"
00013
00014 class PmeRealSpace;
00015 class ComputeMgr;
00016 class SubmitReduction;
00017 class PmeGridMsg;
00018 class ComputePmeMgr;
00019
00020 class ComputePme : public ComputeHomePatches {
00021 public:
00022 ComputePme(ComputeID c);
00023 virtual ~ComputePme();
00024 void doWork();
00025 void sendData(int, int*, int*, int*);
00026 void sendPencils();
00027 void copyResults(PmeGridMsg *);
00028 void copyPencils(PmeGridMsg *);
00029 void ungridForces();
00030 void setMgr(ComputePmeMgr *mgr) { myMgr = mgr; }
00031 #if CMK_PERSISTENT_COMM
00032 void setup_recvgrid_persistent();
00033 #endif
00034 private:
00035 PmeGrid myGrid;
00036 int qsize, fsize, bsize;
00037 int alchFepOn, alchThermIntOn, lesOn, lesFactor, pairOn, selfOn, numGrids;
00038 int alchDecouple;
00039 BigReal alchElecLambdaStart;
00040 BigReal elecLambdaUp;
00041 BigReal elecLambdaDown;
00042
00043 double **q_arr;
00044 double **q_list;
00045 int q_count;
00046 char *f_arr;
00047 char *fz_arr;
00048 PmeReduction evir[PME_MAX_EVALS];
00049 SubmitReduction *reduction;
00050 SubmitReduction *amd_reduction;
00051 int strayChargeErrors;
00052 int resultsRemaining;
00053 PmeRealSpace *myRealSpace[PME_MAX_EVALS];
00054 int numLocalAtoms;
00055 PmeParticle *localData;
00056 unsigned char *localPartition;
00057 int numGridAtoms[PME_MAX_EVALS];
00058 PmeParticle *localGridData[PME_MAX_EVALS];
00059 ComputePmeMgr *myMgr;
00060
00061 #if CMK_PERSISTENT_COMM
00062 PersistentHandle *recvGrid_handle;
00063 #endif
00064
00065 };
00066
00067 #endif
00068