void ComputeNonbondedPair::initialize() { ComputePatchPair::initialize(); for (int i=0; i<2; i++) { avgPositionBox[i] = patch[i]->registerAvgPositionPickup(this); // BEGIN LA velocityBox[i] = patch[i]->registerVelocityPickup(this); // END LA psiSumBox[i] = patch[i]->registerPsiSumDeposit(this); intRadBox[i] = patch[i]->registerIntRadPickup(this); bornRadBox[i] = patch[i]->registerBornRadPickup(this); dEdaSumBox[i] = patch[i]->registerDEdaSumDeposit(this); dHdrPrefixBox[i] = patch[i]->registerDHdrPrefixPickup(this); } #ifdef NAMD_CUDA register_cuda_compute_pair(cid, patchID, trans); #endif }
void ComputeMgr::createCompute(ComputeID i, ComputeMap *map) { Compute *c; PatchID pid2[2]; PatchIDList pids; int trans2[2]; SimParameters *simParams = Node::Object()->simParameters; PatchID pid8[8]; int trans8[8]; switch ( map->type(i) ) { case computeNonbondedSelfType: #ifdef NAMD_CUDA register_cuda_compute_self(i,map->computeData[i].pids[0].pid); #elif defined(NAMD_MIC) #if MIC_SPLIT_WITH_HOST != 0 if (map->directToDevice(i) == 0) { c = new ComputeNonbondedSelf(i,map->computeData[i].pids[0].pid, computeNonbondedWorkArrays, map->partition(i),map->partition(i)+1, map->numPartitions(i)); // unknown delete map->registerCompute(i,c); c->initialize(); } else { #endif register_mic_compute_self(i,map->computeData[i].pids[0].pid,map->partition(i),map->numPartitions(i)); #if MIC_SPLIT_WITH_HOST != 0 } #endif #else c = new ComputeNonbondedSelf(i,map->computeData[i].pids[0].pid, computeNonbondedWorkArrays, map->partition(i),map->partition(i)+1, map->numPartitions(i)); // unknown delete map->registerCompute(i,c); c->initialize(); #endif break; case computeLCPOType: for (int j = 0; j < 8; j++) { pid8[j] = map->computeData[i].pids[j].pid; trans8[j] = map->computeData[i].pids[j].trans; } c = new ComputeLCPO(i,pid8,trans8, computeNonbondedWorkArrays, map->partition(i),map->partition(i)+1, map->numPartitions(i), 8); map->registerCompute(i,c); c->initialize(); break; case computeNonbondedPairType: pid2[0] = map->computeData[i].pids[0].pid; trans2[0] = map->computeData[i].pids[0].trans; pid2[1] = map->computeData[i].pids[1].pid; trans2[1] = map->computeData[i].pids[1].trans; #ifdef NAMD_CUDA register_cuda_compute_pair(i,pid2,trans2); #elif defined(NAMD_MIC) #if MIC_SPLIT_WITH_HOST != 0 if (map->directToDevice(i) == 0) { c = new ComputeNonbondedPair(i,pid2,trans2, computeNonbondedWorkArrays, map->partition(i),map->partition(i)+1, map->numPartitions(i)); // unknown delete map->registerCompute(i,c); c->initialize(); } else { #endif register_mic_compute_pair(i,pid2,trans2,map->partition(i),map->numPartitions(i)); #if MIC_SPLIT_WITH_HOST != 0 } #endif #else c = new ComputeNonbondedPair(i,pid2,trans2, computeNonbondedWorkArrays, map->partition(i),map->partition(i)+1, map->numPartitions(i)); // unknown delete map->registerCompute(i,c); c->initialize(); #endif break; #ifdef NAMD_CUDA case computeNonbondedCUDAType: c = computeNonbondedCUDAObject = new ComputeNonbondedCUDA(i,this); // unknown delete map->registerCompute(i,c); c->initialize(); break; #endif #ifdef NAMD_MIC case computeNonbondedMICType: c = computeNonbondedMICObject = new ComputeNonbondedMIC(i,this); // unknown delete map->registerCompute(i,c); c->initialize(); break; #endif case computeExclsType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeExcls(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeBondsType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeBonds(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeAnglesType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeAngles(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeDihedralsType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeDihedrals(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeImpropersType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeImpropers(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeTholeType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeThole(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeAnisoType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeAniso(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeCrosstermsType: PatchMap::Object()->basePatchIDList(CkMyPe(),pids); c = new ComputeCrossterms(i,pids); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeSelfExclsType: c = new ComputeSelfExcls(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeSelfBondsType: c = new ComputeSelfBonds(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeSelfAnglesType: c = new ComputeSelfAngles(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeSelfDihedralsType: c = new ComputeSelfDihedrals(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeSelfImpropersType: c = new ComputeSelfImpropers(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeSelfTholeType: c = new ComputeSelfThole(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeSelfAnisoType: c = new ComputeSelfAniso(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeSelfCrosstermsType: c = new ComputeSelfCrossterms(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; #ifdef DPMTA case computeDPMTAType: c = new ComputeDPMTA(i); // unknown delete map->registerCompute(i,c); c->initialize(); break; #endif #ifdef DPME case computeDPMEType: c = computeDPMEObject = new ComputeDPME(i,this); // unknown delete map->registerCompute(i,c); c->initialize(); break; #endif case optPmeType: c = new OptPmeCompute(i); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computePmeType: c = new ComputePme(i,map->computeData[i].pids[0].pid); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeEwaldType: c = computeEwaldObject = new ComputeEwald(i,this); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeFullDirectType: c = new ComputeFullDirect(i); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeGlobalType: c = computeGlobalObject = new ComputeGlobal(i,this); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeStirType: c = new ComputeStir(i,map->computeData[i].pids[0].pid); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeExtType: c = new ComputeExt(i); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeGBISserType: //gbis serial c = new ComputeGBISser(i); map->registerCompute(i,c); c->initialize(); break; case computeFmmType: // FMM serial c = new ComputeFmmSerial(i); map->registerCompute(i,c); c->initialize(); break; case computeMsmSerialType: // MSM serial c = new ComputeMsmSerial(i); map->registerCompute(i,c); c->initialize(); break; #ifdef CHARM_HAS_MSA case computeMsmMsaType: // MSM parallel long-range part using MSA c = new ComputeMsmMsa(i); map->registerCompute(i,c); c->initialize(); break; #endif case computeMsmType: // MSM parallel c = new ComputeMsm(i); map->registerCompute(i,c); c->initialize(); break; case computeEFieldType: c = new ComputeEField(i,map->computeData[i].pids[0].pid); // unknown delete map->registerCompute(i,c); c->initialize(); break; /* BEGIN gf */ case computeGridForceType: c = new ComputeGridForce(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; /* END gf */ case computeSphericalBCType: c = new ComputeSphericalBC(i,map->computeData[i].pids[0].pid); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeCylindricalBCType: c = new ComputeCylindricalBC(i,map->computeData[i].pids[0].pid); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeTclBCType: c = new ComputeTclBC(i); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeRestraintsType: c = new ComputeRestraints(i,map->computeData[i].pids[0].pid); // unknown delete map->registerCompute(i,c); c->initialize(); break; case computeConsForceType: c = new ComputeConsForce(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; case computeConsTorqueType: c = new ComputeConsTorque(i,map->computeData[i].pids[0].pid); map->registerCompute(i,c); c->initialize(); break; default: NAMD_bug("Unknown compute type in ComputeMgr::createCompute()."); break; } }