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");
    81         int soaPid = h_globalToLocalID[lid.
pid]; 
    82         int soaIndex = localRecords[soaPid].bufferOffset + lid.
index;
    83         int mapoffset= consAtomsIndexMap[gid];
    84         h_consForceSOA[mapoffset] = soaIndex;
    85         consForceLocalAtomsIndex.push_back(mapoffset);
    86         DebugM(2, 
"ComputeConsForceCUDA::updateConsForceAtoms gid " << gid << 
" lid " << lid.
pid << 
":" <<lid.
index <<
" mapoffset "<< mapoffset << 
" soaIndex " << soaIndex << 
" consForceLocalAtomsIndexSize "<<consForceLocalAtomsIndex.size() <<
"\n" << 
endi);
    87         copy_HtoD_sync<int>(h_consForceSOA.data(), d_consForceSOA, consForceLocalAtomsIndex.size());
    88         copy_HtoD_sync<int>(consForceLocalAtomsIndex.data(), d_consForceID, consForceLocalAtomsIndex.size());
    94 ComputeConsForceCUDA::~ComputeConsForceCUDA(){
    95   DebugM(4, 
"ComputeConsForceCUDA::~ComputeConsForceCuda "<< consForceLocalAtomsIndex.size() <<
"\n"<< 
endi);
    96   deallocate_device<unsigned int>(&d_tbcatomic);
    97   deallocate_device<int>(&d_consForceSOA);
    98   deallocate_device<int>(&d_consForceID);
    99   deallocate_device<double3>(&d_consForce);
   102 void ComputeConsForceCUDA::doForce( 
const Lattice lat,
   120   DebugM(4, 
"ComputeConsForceCUDA::doForce "<< consForceLocalAtomsIndex.size() << 
" virial " << doVirial <<
"\n"<< 
endi);
   128   std::vector <double3> printspace;
   129   printspace.resize(nConsForceAtoms);
   130   cudaCheck(cudaStreamSynchronize(stream));
   131   copy_DtoH_sync<double3>(d_consForce, printspace.data(), nConsForceAtoms);
   132   for(
int forceID=0; forceID<nConsForceAtoms; forceID++)
   134       DebugM(2, 
"ComputeConsForceCUDA::doForce b forceid "<< forceID << 
" consForce[forceID] "<< printspace[forceID]  << 
"\n"<< 
endi);
   137   if(consForceLocalAtomsIndex.size() > 0)
   139       computeConsForce( doVirial,
   140                         consForceLocalAtomsIndex.size(),
   159       DebugM(4, 
"ComputeConsForceCUDA::doForce a h_netForce "   160               << h_netForce->x << 
","  << h_netForce->y <<
   161              ","  << h_netForce->z <<
"\n" << 
endi);
   162       DebugM(4, 
"ComputeConsForceCUDA::doForce a h_virial " <<
   164              "," << h_virial->xz <<
   165              "," << h_virial->xz <<
   166              "," << h_virial->yx <<
   167              "," << h_virial->yy <<
   168              "," << h_virial->yz <<
   169              "," << h_virial->zx <<
   170              "," << h_virial->zy <<
   171              "," << 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)