void Basis::setup(const GridInfo& gInfo, const IonInfo& iInfo, double Ecut, const vector3<> k) { //Find the indices within Ecut: vector3<int> iGbox; for(int i=0; i<3; i++) iGbox[i] = 1 + int(sqrt(2*Ecut) * gInfo.R.column(i).length() / (2*M_PI)); std::vector< vector3<int> > iGvec; std::vector<int> indexVec; vector3<int> iG; for(iG[0]=-iGbox[0]; iG[0]<=iGbox[0]; iG[0]++) for(iG[1]=-iGbox[1]; iG[1]<=iGbox[1]; iG[1]++) for(iG[2]=-iGbox[2]; iG[2]<=iGbox[2]; iG[2]++) if(0.5*dot(iG+k, gInfo.GGT*(iG+k)) <= Ecut) { iGvec.push_back(iG); indexVec.push_back(gInfo.fullGindex(iG)); } setup(gInfo, iInfo, indexVec, iGvec); logPrintf("nbasis = %lu for k = ", nbasis); k.print(globalLog, " %6.3f "); }