/*! */ void Wannier_method::run(Program_options & options, ostream & output) { int ngroups=orbital_groups.GetDim(0); int ntotorbs=0; for(int i=0; i< ngroups; i++) { ntotorbs+=orbital_groups(i).GetDim(0); } Array1 <int> allorbs(ntotorbs); int count=0; for(int i=0; i< ngroups; i++) { for(int j=0; j< orbital_groups(i).GetDim(0); j++) { allorbs(count++)=orbital_groups(i)(j); } } /* Array2 <doublevar> rtmp(allorbs.GetDim(0),allorbs.GetDim(0)); rtmp=0.0; for(int i=0; i< allorbs.GetDim(0); i++) { rtmp(i,i)=1.0; } ofstream test("test.orb"); mymomat->writeorb(test, rtmp,allorbs); test.close(); return; */ Array3 <dcomplex> eikr; Array2 <doublevar> phi2phi2; cout << "calc overlap " << endl; Array1 <Array2 <doublevar> > R(ngroups); for(int i=0; i< ngroups; i++) { calculate_overlap(orbital_groups(i),eikr,phi2phi2); optimize_rotation(eikr,R(i)); } //int nmo_tot=mymomat->getNmo(); //Array2 <doublevar> Rtot(nmo_tot,nmo_tot); //Rtot=0.0; //for(int i=0; i< nmo_tot; i++) Rtot(i,i)=1.0; Array2 <doublevar> Rtot(ntotorbs,ntotorbs); Rtot=0.0; count=0; for(int i=0; i< ngroups; i++) { int norb=orbital_groups(i).GetDim(0); for(int j=0; j < norb; j++) { for(int k=0; k< norb; k++) { Rtot(count+j,count+k)=R(i)(j,k); } } count+=norb; } ofstream testorb(out_orbs.c_str()); mymomat->writeorb(testorb, Rtot,allorbs); testorb.close(); }
void Node::optimize_rotations_all_frames() { for (unsigned int i = 0; i < quat_arr.size(); i++) { optimize_rotation(i); } }