NAMD
CudaNonbondedTables.h
Go to the documentation of this file.
1 #ifndef CUDANONBONDEDTABLES_H
2 #define CUDANONBONDEDTABLES_H
3 
4 #ifdef NAMD_CUDA
5 #include <cuda_runtime.h>
6 #endif
7 #ifdef NAMD_HIP
8 #include <hip/hip_runtime.h>
9 #endif
10 
11 #include "HipDefines.h"
12 
13 
14 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
15 
17 private:
18  const int deviceID;
19 
20  float2 *vdwCoefTable;
21  int vdwCoefTableWidth;
22 #ifndef USE_TABLE_ARRAYS
23  cudaTextureObject_t vdwCoefTableTex;
24 #endif
25  int forceAndEnergyTableSize;
26 
27  // Non-bonded
28 #ifndef USE_TABLE_ARRAYS
29  cudaArray_t forceArray;
30  cudaTextureObject_t forceTableTex;
31 #endif
32  float4* forceTable;
33 
34 #ifndef USE_TABLE_ARRAYS
35  cudaArray_t energyArray;
36  cudaTextureObject_t energyTableTex;
37 #endif
38  float4* energyTable;
39 
40  // Modified exclusions
41 #ifndef USE_TABLE_ARRAYS
42  cudaArray_t modifiedExclusionForceArray;
43  cudaTextureObject_t modifiedExclusionForceTableTex;
44 #endif
45  float4* modifiedExclusionForceTable;
46 
47 #ifndef USE_TABLE_ARRAYS
48  cudaArray_t modifiedExclusionEnergyArray;
49  cudaTextureObject_t modifiedExclusionEnergyTableTex;
50 #endif
51  float4* modifiedExclusionEnergyTable;
52 
53  // Exclusions
54  float2 *exclusionVdwCoefTable;
55 #ifndef USE_TABLE_ARRAYS
56  cudaTextureObject_t exclusionVdwCoefTableTex;
57 #endif
58 
59  // cudaArray_t exclusionForceArray;
60  // cudaTextureObject_t exclusionForceTableTex;
61 
62  // cudaArray_t exclusionEnergyArray;
63  // cudaTextureObject_t exclusionEnergyTableTex;
64 
65  float4* exclusionTable;
66  float* r2_table;
67 #ifndef USE_TABLE_ARRAYS
68  cudaTextureObject_t exclusionTableTex;
69  cudaTextureObject_t r2_table_tex;
70 #endif
71 
72  // Drude FF: NBTHOLE terms tholeij t_{ij}
73  bool drudeNbthole;
74  int numPotentialNbtholeTerms;
75  float* drudeNbTholeTijTable;
76 #ifndef USE_TABLE_ARRAYS
77  cudaTextureObject_t drudeNbTholeTijTableTex;
78 #endif
79 
80  void buildVdwCoefTable(bool update=false);
81  void buildForceAndEnergyTables(int tableSize);
82 
83 public:
84  CudaNonbondedTables(const int deviceID);
86 
87  float2* getVdwCoefTable() {return vdwCoefTable;}
88  int getVdwCoefTableWidth() {return vdwCoefTableWidth;}
89  int getForceAndEnergyTableSize() const {return forceAndEnergyTableSize;}
90  int getNumPotentialNbtholeTerms() const {return numPotentialNbtholeTerms;}
91 #ifndef USE_TABLE_ARRAYS
92  cudaTextureObject_t getVdwCoefTableTex() {return vdwCoefTableTex;}
93  cudaTextureObject_t getForceTableTex() {return forceTableTex;}
94  cudaTextureObject_t getEnergyTableTex() {return energyTableTex;}
95  cudaTextureObject_t getDrudeNbTholeTijTableTex () {return drudeNbTholeTijTableTex;}
96 #endif
97  float4* getForceTable() {return forceTable;}
98  float4* getEnergyTable() {return energyTable;}
99  float* getDrudeNbTholeTijTable() {return drudeNbTholeTijTable;}
100 
101  void updateTables();
102 
103  float2* getExclusionVdwCoefTable() {return exclusionVdwCoefTable;}
104 #ifndef USE_TABLE_ARRAYS
105  cudaTextureObject_t getExclusionVdwCoefTableTex() {return exclusionVdwCoefTableTex;}
106  // cudaTextureObject_t getExclusionForceTableTex() {return exclusionForceTableTex;}
107  // cudaTextureObject_t getExclusionEnergyTableTex() {return exclusionEnergyTableTex;}
108 #endif
109  float4* getExclusionTable() {return exclusionTable;}
110  float* get_r2_table() {return r2_table;}
111 #ifndef USE_TABLE_ARRAYS
112  cudaTextureObject_t getExclusionTableTex() {return exclusionTableTex;}
113  cudaTextureObject_t get_r2_table_tex() {return r2_table_tex;}
114 #endif
115 
116 #ifndef USE_TABLE_ARRAYS
117  cudaTextureObject_t getModifiedExclusionForceTableTex() {return modifiedExclusionForceTableTex;}
118  cudaTextureObject_t getModifiedExclusionEnergyTableTex() {return modifiedExclusionEnergyTableTex;}
119 #endif
120  float4* getModifiedExclusionForceTable() {return modifiedExclusionForceTable;}
121  float4* getModifiedExclusionEnergyTable() {return modifiedExclusionEnergyTable;}
122 };
123 
124 #endif // NAMD_CUDA
125 #endif // CUDANONBONDEDTABLES_H
cudaTextureObject_t getEnergyTableTex()
cudaTextureObject_t getModifiedExclusionForceTableTex()
float4 * getModifiedExclusionEnergyTable()
cudaTextureObject_t getDrudeNbTholeTijTableTex()
float4 * getModifiedExclusionForceTable()
cudaTextureObject_t get_r2_table_tex()
cudaTextureObject_t getModifiedExclusionEnergyTableTex()
cudaTextureObject_t getExclusionVdwCoefTableTex()
int getNumPotentialNbtholeTerms() const
cudaTextureObject_t getExclusionTableTex()
cudaTextureObject_t getForceTableTex()
cudaTextureObject_t getVdwCoefTableTex()
float2 * getExclusionVdwCoefTable()
CudaNonbondedTables(const int deviceID)
int getForceAndEnergyTableSize() const