NAMD
Classes | Enumerations | Functions | Variables
PmeSolverUtil.h File Reference
#include "PmeBase.h"
#include "NamdTypes.h"
#include "Lattice.h"

Go to the source code of this file.

Classes

struct  PatchInfo
 
class  FFTCompute
 
class  PmeKSpaceCompute
 
class  PmeRealSpaceCompute
 
class  PmeTranspose
 

Enumerations

enum  { Perm_X_Y_Z, Perm_cX_Y_Z, Perm_Y_Z_cX, Perm_Z_cX_Y }
 

Functions

static int getPencilIndexY (const PmeGrid &pmeGrid, const int y)
 
static int getPencilIndexZ (const PmeGrid &pmeGrid, const int z)
 
static void getPencilDim (const PmeGrid &pmeGrid, const int permutation, const int jblock, const int kblock, int &i0, int &i1, int &j0, int &j1, int &k0, int &k1)
 
static void getBlockDim (const PmeGrid &pmeGrid, const int permutation, const int iblock, const int jblock, const int kblock, int &i0, int &i1, int &j0, int &j1, int &k0, int &k1)
 

Variables

const unsigned int NUM_GRID_MAX = 5
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
Perm_X_Y_Z 
Perm_cX_Y_Z 
Perm_Y_Z_cX 
Perm_Z_cX_Y 

Definition at line 20 of file PmeSolverUtil.h.

Function Documentation

◆ getBlockDim()

static void getBlockDim ( const PmeGrid pmeGrid,
const int  permutation,
const int  iblock,
const int  jblock,
const int  kblock,
int &  i0,
int &  i1,
int &  j0,
int &  j1,
int &  k0,
int &  k1 
)
static

Definition at line 89 of file PmeSolverUtil.h.

References getPencilDim(), NAMD_bug(), Perm_cX_Y_Z, Perm_X_Y_Z, Perm_Y_Z_cX, Perm_Z_cX_Y, PmeGrid::xBlocks, PmeGrid::yBlocks, and PmeGrid::zBlocks.

Referenced by CudaPmeTranspose::copyDataDeviceToDevice(), CudaPmeTranspose::copyDataHostToDevice(), CudaPmeTranspose::getBuffer(), PmePencilXY::initBlockSizes(), PmePencilX::initBlockSizes(), PmePencilY::initBlockSizes(), PmePencilZ::initBlockSizes(), and PmeTranspose::PmeTranspose().

91  {
92 
93  getPencilDim(pmeGrid, permutation, jblock, kblock, i0, i1, j0, j1, k0, k1);
94 
95  int iblocks;
96 
97  switch(permutation) {
98  case Perm_X_Y_Z:
99  iblocks = pmeGrid.xBlocks;
100  break;
101  case Perm_cX_Y_Z:
102  iblocks = pmeGrid.xBlocks;
103  break;
104  case Perm_Y_Z_cX:
105  iblocks = pmeGrid.yBlocks;
106  break;
107  case Perm_Z_cX_Y:
108  iblocks = pmeGrid.zBlocks;
109  break;
110  default:
111  NAMD_bug("getBlockDim, invalid permutation");
112  break;
113  }
114 
115  if (iblock < 0 || iblock >= iblocks)
116  NAMD_bug("getBlockDim, invalid block index");
117 
118  int isize = i1-i0+1;
119 
120  i0 = isize*iblock/iblocks;
121  i1 = isize*(iblock+1)/iblocks - 1;
122 }
int zBlocks
Definition: PmeBase.h:25
static void getPencilDim(const PmeGrid &pmeGrid, const int permutation, const int jblock, const int kblock, int &i0, int &i1, int &j0, int &j1, int &k0, int &k1)
Definition: PmeSolverUtil.h:32
int yBlocks
Definition: PmeBase.h:25
void NAMD_bug(const char *err_msg)
Definition: common.C:195
int xBlocks
Definition: PmeBase.h:25

◆ getPencilDim()

static void getPencilDim ( const PmeGrid pmeGrid,
const int  permutation,
const int  jblock,
const int  kblock,
int &  i0,
int &  i1,
int &  j0,
int &  j1,
int &  k0,
int &  k1 
)
static

Definition at line 32 of file PmeSolverUtil.h.

References PmeGrid::K1, PmeGrid::K2, PmeGrid::K3, NAMD_bug(), Perm_cX_Y_Z, Perm_X_Y_Z, Perm_Y_Z_cX, Perm_Z_cX_Y, PmeGrid::xBlocks, PmeGrid::yBlocks, and PmeGrid::zBlocks.

Referenced by getBlockDim(), ComputePmeCUDAMgr::getHomePencil(), FFTCompute::init(), PmeKSpaceCompute::PmeKSpaceCompute(), PmeRealSpaceCompute::PmeRealSpaceCompute(), and PmeTranspose::PmeTranspose().

34  {
35 
36  int isize, jsize, ksize;
37  int jblocks, kblocks;
38 
39  switch(permutation) {
40  case Perm_X_Y_Z:
41  isize = pmeGrid.K1;
42  jsize = pmeGrid.K2;
43  ksize = pmeGrid.K3;
44  jblocks = pmeGrid.yBlocks;
45  kblocks = pmeGrid.zBlocks;
46  break;
47  case Perm_cX_Y_Z:
48  isize = pmeGrid.K1/2+1;
49  jsize = pmeGrid.K2;
50  ksize = pmeGrid.K3;
51  jblocks = pmeGrid.yBlocks;
52  kblocks = pmeGrid.zBlocks;
53  break;
54  case Perm_Y_Z_cX:
55  isize = pmeGrid.K2;
56  jsize = pmeGrid.K3;
57  ksize = pmeGrid.K1/2+1;
58  jblocks = pmeGrid.zBlocks;
59  kblocks = pmeGrid.xBlocks;
60  break;
61  case Perm_Z_cX_Y:
62  isize = pmeGrid.K3;
63  jsize = pmeGrid.K1/2+1;
64  ksize = pmeGrid.K2;
65  jblocks = pmeGrid.xBlocks;
66  kblocks = pmeGrid.yBlocks;
67  break;
68  default:
69  NAMD_bug("getPencilDim, invalid permutation");
70  break;
71  }
72 
73  if (jblock < 0 || jblock >= jblocks || kblock < 0 || kblock >= kblocks)
74  NAMD_bug("getPencilDim, invalid block indices");
75 
76  i0 = 0;
77  i1 = isize - 1;
78 
79  j0 = jsize*jblock/jblocks;
80  j1 = jsize*(jblock+1)/jblocks - 1;
81 
82  k0 = ksize*kblock/kblocks;
83  k1 = ksize*(kblock+1)/kblocks - 1;
84 }
int zBlocks
Definition: PmeBase.h:25
int K2
Definition: PmeBase.h:21
int K1
Definition: PmeBase.h:21
int yBlocks
Definition: PmeBase.h:25
void NAMD_bug(const char *err_msg)
Definition: common.C:195
int K3
Definition: PmeBase.h:21
int xBlocks
Definition: PmeBase.h:25

◆ getPencilIndexY()

static int getPencilIndexY ( const PmeGrid pmeGrid,
const int  y 
)
inlinestatic

Definition at line 23 of file PmeSolverUtil.h.

References PmeGrid::K2, and PmeGrid::yBlocks.

Referenced by PmeAtomFiler::fileAtoms().

23  {
24  return (y*pmeGrid.yBlocks + pmeGrid.yBlocks - 1)/pmeGrid.K2;
25 }
int K2
Definition: PmeBase.h:21
int yBlocks
Definition: PmeBase.h:25

◆ getPencilIndexZ()

static int getPencilIndexZ ( const PmeGrid pmeGrid,
const int  z 
)
inlinestatic

Definition at line 28 of file PmeSolverUtil.h.

References PmeGrid::K3, and PmeGrid::zBlocks.

Referenced by PmeAtomFiler::fileAtoms().

28  {
29  return (z*pmeGrid.zBlocks + pmeGrid.zBlocks - 1)/pmeGrid.K3;
30 }
int zBlocks
Definition: PmeBase.h:25
int K3
Definition: PmeBase.h:21

Variable Documentation

◆ NUM_GRID_MAX

const unsigned int NUM_GRID_MAX = 5