void initializePositionsFCC(Molecule** molecules) { int M=1; int n,x,y,z,k; n=0; while(4*M*M*M < N) ++M; double a = L/M; std::cout << "M: " << M << std::endl; std::cout << "a: " << a << std::endl; double xCell[4] = {0.25,0.75,0.75,0.25}; double yCell[4] = {0.25,0.75,0.25,0.75}; double zCell[4] = {0.25,0.25,0.75,0.75}; for(x=0;x<M;x++) for(y=0;y<M;y++) for(z=0;z<M;z++) for(k=0;k<4;k++) if(n<N) { molecules[n]->setPosition((x + xCell[k])*a,(y + yCell[k])*a,(z + zCell[k])*a); n++; } double* muTemp = dipole(molecules[1]); mu2 = dot(muTemp,muTemp); std::cout << "Mu**2 (1): " << mu2 << std::endl; muTemp = dipole(molecules[100]); mu2 = dot(muTemp,muTemp); std::cout << "Mu**2 (100): " << mu2 << std::endl; }
LocalCorePolPotential::Return_t LocalCorePolPotential::evaluate(ParticleSet& P) { if(FirstTime) { //index for attribute charge SpeciesSet& Species(IonConfig.getSpeciesSet()); int iz = Species.addAttribute("charge"); //calculate the Core-Core Dipole matrix for(int iat=0; iat<nCenters; iat++) { for(int nn=d_ii->M[iat]; nn<d_ii->M[iat+1]; nn++) { int jat(d_ii->J[nn]); RealType rinv3 = std::pow(d_ii->rinv(nn),3);//(1/R_{JI}^3) R_{JI} = R_J-R_I PosType dipole(rinv3*d_ii->dr(nn));//(\vec{R_{JI}}/R_{JI}^3) //Sign and the charge of the paired ion are taken into account here CoreCoreDipole[iat] -= dipole*Species(iz,IonConfig.GroupID[jat]); CoreCoreDipole[jat] += dipole*Species(iz,IonConfig.GroupID[iat]); } } RealType corecore(0.0); for(int iat=0; iat<nCenters; iat++) { //app_log() << "Checking CPP = " << Centers[iat] << endl; if(Centers[iat]) corecore+= Centers[iat]->C*dot(CoreCoreDipole[iat],CoreCoreDipole[iat]); } // LOGMSG("Core-Core Dipole = " << corecore); FirstTime=false; } //calculate the Electron-Core Dipole matrix //CoreElDipole=0.0; RealType e = 0.0; for(int iat=0; iat<nCenters; iat++) { if(Centers[iat]) { PosType cc(CoreCoreDipole[iat]); for(int nn=d_ie->M[iat]; nn<d_ie->M[iat+1]; nn++) { int eid(d_ie->J[nn]); RealType rinv3 = std::pow(d_ie->rinv(nn),3);//(1/r^3) PosType dipole = rinv3*d_ie->dr(nn);//(\vec{r}/r^3) //cc += dipole*fcpp(d_ie->r(nn)*r_binv); cc += dipole*((*Centers[iat])(d_ie->r(nn))); } e += Centers[iat]->C*dot(cc,cc); } } return Value=e; }