00001
00007 #ifndef COMPUTEPME_H
00008 #define COMPUTEPME_H
00009
00010 #include "Compute.h"
00011 #include "PmeBase.h"
00012 #include "NamdTypes.h"
00013 #include "PatchTypes.h"
00014 #include "Box.h"
00015 #include "OwnerBox.h"
00016
00017 class PmeRealSpace;
00018 class ComputeMgr;
00019 class SubmitReduction;
00020 class PmeGridMsg;
00021 class ComputePmeMgr;
00022 class Patch;
00023
00024 class ComputePme : public Compute {
00025 public:
00026 ComputePme(ComputeID c, PatchID pid);
00027 virtual ~ComputePme();
00028 void initialize();
00029 int noWork();
00030 void doWork();
00031 void ungridForces();
00032 void setMgr(ComputePmeMgr *mgr) { myMgr = mgr; }
00033
00034 private:
00035 PatchID patchID;
00036 Patch *patch;
00037 Box<Patch,CompAtom> *positionBox;
00038 Box<Patch,CompAtom> *avgPositionBox;
00039 Box<Patch,Results> *forceBox;
00040
00041 PmeGrid myGrid;
00042 int alchFepOn, alchThermIntOn, lesOn, lesFactor, pairOn, selfOn, numGrids;
00043 int alchDecouple;
00044 BigReal alchElecLambdaStart;
00045 BigReal elecLambdaUp;
00046 BigReal elecLambdaDown;
00047
00048 PmeRealSpace *myRealSpace[PME_MAX_EVALS];
00049 int numLocalAtoms;
00050 PmeParticle *localData;
00051 ResizeArray<PmeParticle> localData_alloc;
00052 unsigned char *localPartition;
00053 ResizeArray<unsigned char> localPartition_alloc;
00054 ResizeArray<Vector> localResults_alloc;
00055 int numGridAtoms[PME_MAX_EVALS];
00056 PmeParticle *localGridData[PME_MAX_EVALS];
00057 ComputePmeMgr *myMgr;
00058
00059 };
00060
00061 #endif
00062