NAMD
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PmePencilXYZ Class Reference

#include <PmeSolver.h>

Inheritance diagram for PmePencilXYZ:

Public Member Functions

PmePencilXYZ_SDAG_CODE PmePencilXYZ ()
 
 PmePencilXYZ (CkMigrateMessage *m)
 
virtual ~PmePencilXYZ ()
 
void skip ()
 

Protected Member Functions

virtual void backwardDone ()
 
void submitReductions (unsigned int iGrid)
 

Protected Attributes

PmeGrid pmeGrid
 
bool doEnergy
 
bool doVirial
 
int simulationStep
 
std::array< FFTCompute *, NUM_GRID_MAXfftComputes
 
std::array< PmeKSpaceCompute *, NUM_GRID_MAXpmeKSpaceComputes
 
std::array< int, NUM_GRID_MAXenergyReady
 
Lattice lattice
 
int numStrayAtoms
 

Detailed Description

Definition at line 137 of file PmeSolver.h.

Constructor & Destructor Documentation

◆ PmePencilXYZ() [1/2]

PmePencilXYZ::PmePencilXYZ ( )

Definition at line 22 of file PmeSolver.C.

References doEnergy, doVirial, fftComputes, NUM_GRID_MAX, ReductionMgr::Object(), pmeKSpaceComputes, REDUCTIONS_BASIC, simulationStep, and ReductionMgr::willSubmit().

22  {
23  __sdag_init();
24  setMigratable(false);
25  for (unsigned int iGrid = 0; iGrid < NUM_GRID_MAX; ++iGrid) {
26  pmeKSpaceComputes[iGrid] = NULL;
27  fftComputes[iGrid] = NULL;
28  }
30 // multipleGridLock = CmiCreateLock();
31  doEnergy = false;
32  doVirial = false;
33  simulationStep = 0;
34 }
SubmitReduction * willSubmit(int setID, int size=-1)
Definition: ReductionMgr.C:368
static ReductionMgr * Object(void)
Definition: ReductionMgr.h:290
const unsigned int NUM_GRID_MAX
Definition: PmeSolverUtil.h:9
bool doVirial
Definition: PmeSolver.h:146
std::array< PmeKSpaceCompute *, NUM_GRID_MAX > pmeKSpaceComputes
Definition: PmeSolver.h:150
bool doEnergy
Definition: PmeSolver.h:146
int simulationStep
Definition: PmeSolver.h:148
std::array< FFTCompute *, NUM_GRID_MAX > fftComputes
Definition: PmeSolver.h:149

◆ PmePencilXYZ() [2/2]

PmePencilXYZ::PmePencilXYZ ( CkMigrateMessage *  m)

Definition at line 36 of file PmeSolver.C.

References NAMD_bug().

36  {
37  NAMD_bug("PmePencilXYZ cannot be migrated");
38  //__sdag_init();
39  // setMigratable(false);
40  // fftCompute = NULL;
41  // pmeKSpaceCompute = NULL;
42  // reduction = ReductionMgr::Object()->willSubmit(REDUCTIONS_BASIC);
43 }
void NAMD_bug(const char *err_msg)
Definition: common.C:195

◆ ~PmePencilXYZ()

PmePencilXYZ::~PmePencilXYZ ( )
virtual

Definition at line 45 of file PmeSolver.C.

References fftComputes, NUM_GRID_MAX, and pmeKSpaceComputes.

45  {
46  for (unsigned int iGrid = 0; iGrid < NUM_GRID_MAX; ++iGrid) {
47  if (pmeKSpaceComputes[iGrid] != NULL) delete pmeKSpaceComputes[iGrid];
48  if (fftComputes[iGrid] != NULL) delete fftComputes[iGrid];
49  }
50  delete reduction;
51 // CmiDestroyLock(multipleGridLock);
52 }
const unsigned int NUM_GRID_MAX
Definition: PmeSolverUtil.h:9
std::array< PmeKSpaceCompute *, NUM_GRID_MAX > pmeKSpaceComputes
Definition: PmeSolver.h:150
std::array< FFTCompute *, NUM_GRID_MAX > fftComputes
Definition: PmeSolver.h:149

Member Function Documentation

◆ backwardDone()

void PmePencilXYZ::backwardDone ( )
protectedvirtual

Definition at line 91 of file PmeSolver.C.

References NAMD_bug().

91  {
92  NAMD_bug("PmePencilXYZ::backwardDone(), base class method called");
93 }
void NAMD_bug(const char *err_msg)
Definition: common.C:195

◆ skip()

void PmePencilXYZ::skip ( void  )

Definition at line 246 of file PmeSolver.C.

References SubmitReduction::submit().

246  {
247  reduction->submit();
248 }
virtual void submit(void)=0

◆ submitReductions()

void PmePencilXYZ::submitReductions ( unsigned int  iGrid)
protected

Definition at line 95 of file PmeSolver.C.

References energyReady, SubmitReduction::item(), NAMD_bug(), NUM_GRID_MAX, numStrayAtoms, Node::Object(), pmeKSpaceComputes, REDUCTION_ELECT_ENERGY_SLOW, REDUCTION_ELECT_ENERGY_SLOW_F, REDUCTION_ELECT_ENERGY_SLOW_TI_1, REDUCTION_ELECT_ENERGY_SLOW_TI_2, REDUCTION_STRAY_CHARGE_ERRORS, Node::simParameters, simParams, simulationStep, and SubmitReduction::submit().

95  {
96 // fprintf(stderr, "PmePencilXYZ::submitReductions\n");
97  if (pmeKSpaceComputes[iGrid] == NULL)
98  NAMD_bug("PmePencilXYZ::submitReductions, pmeKSpaceCompute not initialized");
100  double virial[9];
101  double energy = pmeKSpaceComputes[iGrid]->getEnergy();
102  pmeKSpaceComputes[iGrid]->getVirial(virial);
103  if (simParams->alchOn) {
104  if (simParams->alchFepOn) {
105  double energy_F = energy;
106  double scale1 = 1.0; // energy scaling factor for λ_1
107  double scale2 = 1.0; // energy scaling factor for λ_2
108  switch (iGrid) {
109  case 0: {
110  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
111  const BigReal alchLambda2 = simParams->getCurrentLambda2(simulationStep);
112  const BigReal elecLambdaUp = simParams->getElecLambda(alchLambda);
113  const BigReal elecLambda2Up = simParams->getElecLambda(alchLambda2);
114  scale1 = elecLambdaUp;
115  scale2 = elecLambda2Up;
116  break;
117  }
118  case 1: {
119  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
120  const BigReal alchLambda2 = simParams->getCurrentLambda2(simulationStep);
121  const BigReal elecLambdaDown = simParams->getElecLambda(1 - alchLambda);
122  const BigReal elecLambda2Down = simParams->getElecLambda(1 - alchLambda2);
123  scale1 = elecLambdaDown;
124  scale2 = elecLambda2Down;
125  break;
126  }
127  case 2: {
128  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
129  const BigReal alchLambda2 = simParams->getCurrentLambda2(simulationStep);
130  const BigReal elecLambdaUp = simParams->getElecLambda(alchLambda);
131  const BigReal elecLambda2Up = simParams->getElecLambda(alchLambda2);
132  scale1 = 1.0 - elecLambdaUp;
133  scale2 = 1.0 - elecLambda2Up;
134  break;
135  }
136  case 3: {
137  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
138  const BigReal alchLambda2 = simParams->getCurrentLambda2(simulationStep);
139  const BigReal elecLambdaDown = simParams->getElecLambda(1 - alchLambda);
140  const BigReal elecLambda2Down = simParams->getElecLambda(1 - alchLambda2);
141  scale1 = 1.0 - elecLambdaDown;
142  scale2 = 1.0 - elecLambda2Down;
143  break;
144  }
145  case 4: {
146  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
147  const BigReal alchLambda2 = simParams->getCurrentLambda2(simulationStep);
148  const BigReal elecLambdaUp = simParams->getElecLambda(alchLambda);
149  const BigReal elecLambda2Up = simParams->getElecLambda(alchLambda2);
150  const BigReal elecLambdaDown = simParams->getElecLambda(1 - alchLambda);
151  const BigReal elecLambda2Down = simParams->getElecLambda(1 - alchLambda2);
152  scale1 = -1.0 * (elecLambdaUp + elecLambdaDown - 1.0);
153  scale2 = -1.0 * (elecLambda2Up + elecLambda2Down - 1.0);
154  break;
155  }
156  }
157  energy *= scale1;
158  energy_F *= scale2;
159 // fprintf(stdout, "KSpace Grid %u ; E1 = %lf ; E2 = %lf ; scale1 = %lf ; scale2 = %lf\n", iGrid, energy, energy_F, scale1, scale2);
160  for (size_t i = 0; i < 9; ++i) {
161  virial[i] *= scale1;
162  }
163  reduction->item(REDUCTION_ELECT_ENERGY_SLOW_F) += energy_F;
164  }
165  if (simParams->alchThermIntOn) {
166  double energy_TI_1 = 0.0;
167  double energy_TI_2 = 0.0;
168  double scale1 = 1.0;
169  switch (iGrid) {
170  case 0: {
171  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
172  const BigReal elecLambdaUp = simParams->getElecLambda(alchLambda);
173  scale1 = elecLambdaUp;
174  energy_TI_1 = energy;
175  break;
176  }
177  case 1: {
178  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
179  const BigReal elecLambdaDown = simParams->getElecLambda(1 - alchLambda);
180  scale1 = elecLambdaDown;
181  energy_TI_2 = energy;
182  break;
183  }
184  case 2: {
185  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
186  const BigReal elecLambdaUp = simParams->getElecLambda(alchLambda);
187  scale1 = 1.0 - elecLambdaUp;
188  energy_TI_1 = -1.0 * energy;
189  break;
190  }
191  case 3: {
192  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
193  const BigReal elecLambdaDown = simParams->getElecLambda(1 - alchLambda);
194  scale1 = 1.0 - elecLambdaDown;
195  energy_TI_2 = -1.0 * energy;
196  break;
197  }
198  case 4: {
199  const BigReal alchLambda = simParams->getCurrentLambda(simulationStep);
200  const BigReal elecLambdaUp = simParams->getElecLambda(alchLambda);
201  const BigReal elecLambdaDown = simParams->getElecLambda(1 - alchLambda);
202  scale1 = -1.0 * (elecLambdaUp + elecLambdaDown - 1.0);
203  energy_TI_1 = -1.0 * energy;
204  energy_TI_2 = -1.0 * energy;
205  break;
206  }
207  }
208  for (size_t i = 0; i < 9; ++i) {
209  virial[i] *= scale1;
210  }
211  energy *= scale1;
212 // fprintf(stdout, "Grid %u : energy_TI_1 = %lf ; energy_TI_2 = %lf\n", iGrid, energy_TI_1, energy_TI_2);
213  reduction->item(REDUCTION_ELECT_ENERGY_SLOW_TI_1) += energy_TI_1;
214  reduction->item(REDUCTION_ELECT_ENERGY_SLOW_TI_2) += energy_TI_2;
215  }
216  }
217  reduction->item(REDUCTION_ELECT_ENERGY_SLOW) += energy;
218  reduction->item(REDUCTION_VIRIAL_SLOW_XX) += virial[0];
219  reduction->item(REDUCTION_VIRIAL_SLOW_XY) += virial[1];
220  reduction->item(REDUCTION_VIRIAL_SLOW_XZ) += virial[2];
221  reduction->item(REDUCTION_VIRIAL_SLOW_YX) += virial[3];
222  reduction->item(REDUCTION_VIRIAL_SLOW_YY) += virial[4];
223  reduction->item(REDUCTION_VIRIAL_SLOW_YZ) += virial[5];
224  reduction->item(REDUCTION_VIRIAL_SLOW_ZX) += virial[6];
225  reduction->item(REDUCTION_VIRIAL_SLOW_ZY) += virial[7];
226  reduction->item(REDUCTION_VIRIAL_SLOW_ZZ) += virial[8];
228  energyReady[iGrid] = 1;
229 // CmiLock(multipleGridLock);
230  bool ready_to_submit = true;
231  for (size_t i = 0; i < NUM_GRID_MAX; ++i) {
232  if (energyReady[i] == -1) continue;
233  if (energyReady[i] == 0) ready_to_submit = false;
234  }
235  if (ready_to_submit) {
236 // fprintf(stdout, "all energy ready\n");
237  reduction->submit();
238  for (size_t i = 0; i < NUM_GRID_MAX; ++i) {
239  if (energyReady[i] == -1) continue;
240  if (energyReady[i] == 1) energyReady[i] = 0;
241  }
242  }
243 // CmiUnlock(multipleGridLock);
244 }
static Node * Object()
Definition: Node.h:86
virtual void submit(void)=0
SimParameters * simParameters
Definition: Node.h:181
BigReal & item(int i)
Definition: ReductionMgr.h:336
int numStrayAtoms
Definition: PmeSolver.h:156
const unsigned int NUM_GRID_MAX
Definition: PmeSolverUtil.h:9
std::array< int, NUM_GRID_MAX > energyReady
Definition: PmeSolver.h:153
std::array< PmeKSpaceCompute *, NUM_GRID_MAX > pmeKSpaceComputes
Definition: PmeSolver.h:150
void NAMD_bug(const char *err_msg)
Definition: common.C:195
int simulationStep
Definition: PmeSolver.h:148
#define simParams
Definition: Output.C:131
double BigReal
Definition: common.h:123

Member Data Documentation

◆ doEnergy

bool PmePencilXYZ::doEnergy
protected

Definition at line 146 of file PmeSolver.h.

Referenced by PmePencilXYZ().

◆ doVirial

bool PmePencilXYZ::doVirial
protected

Definition at line 146 of file PmeSolver.h.

Referenced by PmePencilXYZ().

◆ energyReady

std::array<int, NUM_GRID_MAX> PmePencilXYZ::energyReady
protected

Definition at line 153 of file PmeSolver.h.

Referenced by submitReductions().

◆ fftComputes

std::array<FFTCompute*, NUM_GRID_MAX> PmePencilXYZ::fftComputes
protected

Definition at line 149 of file PmeSolver.h.

Referenced by PmePencilXYZ(), and ~PmePencilXYZ().

◆ lattice

Lattice PmePencilXYZ::lattice
protected

Definition at line 155 of file PmeSolver.h.

◆ numStrayAtoms

int PmePencilXYZ::numStrayAtoms
protected

Definition at line 156 of file PmeSolver.h.

Referenced by submitReductions().

◆ pmeGrid

PmeGrid PmePencilXYZ::pmeGrid
protected

Definition at line 145 of file PmeSolver.h.

◆ pmeKSpaceComputes

std::array<PmeKSpaceCompute*, NUM_GRID_MAX> PmePencilXYZ::pmeKSpaceComputes
protected

Definition at line 150 of file PmeSolver.h.

Referenced by PmePencilXYZ(), submitReductions(), and ~PmePencilXYZ().

◆ simulationStep

int PmePencilXYZ::simulationStep
protected

Definition at line 148 of file PmeSolver.h.

Referenced by PmePencilXYZ(), and submitReductions().


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