6 #define MIN_DEBUG_LEVEL 4 10 #ifdef NODEGROUP_FORCE_REGISTER 15 ComputeConsForceCUDA::ComputeConsForceCUDA(
16 std::vector<HomePatch*> &patchList,
17 std::vector<AtomMap*> &atomMapList,
29 for(
int gid = 0; gid < numAtoms; gid++){
30 if ((forceID=index[gid])!=-1)
32 consAtomsIndexMap[gid]=h_consForce.size();
33 h_consForce.push_back(cf[forceID]);
34 h_consForceID.push_back(gid);
35 DebugM(4,
"ComputeConsForceCUDA::ComputeConsForcedCUDA gid " << gid <<
" forceid "<< forceID <<
" cf[forceID] "<< cf[forceID] <<
" nConsForceAtoms " << h_consForce.size() <<
"\n"<<
endi);
38 nConsForceAtoms= h_consForce.size();
40 h_consForceSOA.resize(nConsForceAtoms);
41 allocate_device<unsigned int>(&d_tbcatomic, 1);
42 allocate_device<int>(&d_consForceSOA, nConsForceAtoms);
43 allocate_device<int>(&d_consForceID, nConsForceAtoms);
44 allocate_device<double3>(&d_consForce, nConsForceAtoms);
45 copy_HtoD_sync<int>(h_consForceID.data(), d_consForceID, nConsForceAtoms);
46 copy_HtoD_sync<double3>(h_consForce.data(), d_consForce, nConsForceAtoms);
47 cudaCheck(cudaMemset(d_tbcatomic, 0,
sizeof(
unsigned int)));
51 void ComputeConsForceCUDA::updateConsForceAtoms(
52 std::vector<AtomMap*> &atomMapsList,
53 std::vector<CudaLocalRecord> &localRecords,
54 const int* h_globalToLocalID)
56 DebugM(4,
"ComputeConsForceCUDA::updateConsForcedAtoms "<< nConsForceAtoms <<
"\n"<<
endi);
57 consForceLocalAtomsIndex.clear();
60 for(
int i = 0; i < nConsForceAtoms; i++){
62 gid = h_consForceID[i];
65 for(
int j = 0 ; j < atomMapsList.size(); j++){
66 lid = atomMapsList[j]->localID(gid);
67 if( lid.
pid != -1)
break;
75 NAMD_bug(
" LocalAtomID not found in patchMap");
82 int soaPid = h_globalToLocalID[lid.
pid];
83 int soaIndex = localRecords[soaPid].bufferOffset + lid.
index;
84 int mapoffset= consAtomsIndexMap[gid];
85 h_consForceSOA[mapoffset] = soaIndex;
86 consForceLocalAtomsIndex.push_back(mapoffset);
87 DebugM(2,
"ComputeConsForceCUDA::updateConsForceAtoms gid " << gid <<
" lid " << lid.
pid <<
":" <<lid.
index <<
" mapoffset "<< mapoffset <<
" soaIndex " << soaIndex <<
" consForceLocalAtomsIndexSize "<<consForceLocalAtomsIndex.size() <<
"\n" <<
endi);
88 copy_HtoD_sync<int>(h_consForceSOA.data(), d_consForceSOA, consForceLocalAtomsIndex.size());
89 copy_HtoD_sync<int>(consForceLocalAtomsIndex.data(), d_consForceID, consForceLocalAtomsIndex.size());
95 ComputeConsForceCUDA::~ComputeConsForceCUDA(){
96 DebugM(4,
"ComputeConsForceCUDA::~ComputeConsForceCuda "<< consForceLocalAtomsIndex.size() <<
"\n"<<
endi);
97 deallocate_device<unsigned int>(&d_tbcatomic);
98 deallocate_device<int>(&d_consForceSOA);
99 deallocate_device<int>(&d_consForceID);
100 deallocate_device<double3>(&d_consForce);
103 void ComputeConsForceCUDA::doForce(
const Lattice lat,
121 DebugM(4,
"ComputeConsForceCUDA::doForce "<< consForceLocalAtomsIndex.size() <<
" virial " << doVirial <<
"\n"<<
endi);
129 std::vector <double3> printspace;
130 printspace.resize(nConsForceAtoms);
131 cudaCheck(cudaStreamSynchronize(stream));
132 copy_DtoH_sync<double3>(d_consForce, printspace.data(), nConsForceAtoms);
133 for(
int forceID=0; forceID<nConsForceAtoms; forceID++)
135 DebugM(2,
"ComputeConsForceCUDA::doForce b forceid "<< forceID <<
" consForce[forceID] "<< printspace[forceID] <<
"\n"<<
endi);
138 if(consForceLocalAtomsIndex.size() > 0)
140 computeConsForce( doVirial,
141 consForceLocalAtomsIndex.size(),
160 DebugM(4,
"ComputeConsForceCUDA::doForce a h_netForce " 161 << h_netForce->x <<
"," << h_netForce->y <<
162 "," << h_netForce->z <<
"\n" <<
endi);
163 DebugM(4,
"ComputeConsForceCUDA::doForce a h_virial " <<
165 "," << h_virial->xz <<
166 "," << h_virial->xz <<
167 "," << h_virial->yx <<
168 "," << h_virial->yy <<
169 "," << h_virial->yz <<
170 "," << h_virial->zx <<
171 "," << h_virial->zy <<
172 "," << h_virial->zz <<
"\n" <<
endi);
SimParameters * simParameters
std::ostream & endi(std::ostream &s)
Molecule stores the structural information for the system.
void NAMD_bug(const char *err_msg)