diff --git a/heisen.h b/heisen.h index 67169dc..f8da1e9 100755 --- a/heisen.h +++ b/heisen.h @@ -328,26 +328,24 @@ class HeisenCalculation { // astream.close(); // } - HeisenCalculation(int sites) { - create_ring(sites); + HeisenCalculation(int sites, int sector) { + create_ring(sites, sector); } - void create_ring(int sites) { + void create_ring(int sites, int sector) { double J = 1.0; for (int i = 0; i < sites-1; i++) { lattice.push_back(Bond(i,i+1,J)); } lattice.push_back(Bond(sites-1,0,J)); - sectors.push_back(Sector(lattice,sites,1)); - -// double J = 1.0; -// for (int i = 0; i < sites-1; i++) { -// lattice.push_back(Bond(i,i+1,J)); -// } -// lattice.push_back(Bond(sites-1,0,J)); -// for (int i = 0; i < sites; i++) { -// sectors.push_back(Sector(lattice,sites,i)); -// } + if (sector <= 0) { + for (int i = 0; i < sites; i++) { + sectors.push_back(Sector(lattice,sites,i)); + } + } + else { + sectors.push_back(Sector(lattice,sites,sector)); + } } vector eigenvalues() { @@ -359,8 +357,11 @@ class HeisenCalculation { vector mat = s.make_matrix(); vector es(nst,0.0); vector ev(nst*nst,0.0); + const auto tstart = std::chrono::system_clock::now(); diag_matrix(mat,nst,es,ev); - print_matrix(mat,nst,nst); + const auto tstop = std::chrono::system_clock::now(); + const std::chrono::duration time_elapsed = tstop - tstart; + std::cout << "Diagonalization took " << time_elapsed.count() << " s" << std::endl; std::copy(es.begin(),es.end(),std::back_inserter(e)); } std::sort(e.begin(),e.end(),[](const double& a, const double& b) {return a < b;}); diff --git a/read.in b/read.in index b8626c4..4ac7d1b 100644 --- a/read.in +++ b/read.in @@ -1 +1,2 @@ -4 +14 +6 diff --git a/test_heisen.cc b/test_heisen.cc index a9c6020..c7ae51d 100644 --- a/test_heisen.cc +++ b/test_heisen.cc @@ -1,8 +1,21 @@ #include "heisen.h" int main(int argc, char** argv) { - HeisenCalculation calc(4); + ifstream f("read.in"); + int nsites = 4; + int sector = -1; + if (f.is_open()) { + f >> nsites; + f >> sector; + printf("read.in --> nsites = %d sector = %d\n", nsites, sector); + f.close(); + } + HeisenCalculation calc(nsites,sector); +// const auto tstart = std::chrono::system_clock::now(); vector e = calc.eigenvalues(); +// const auto tstop = std::chrono::system_clock::now(); +// const std::chrono::duration time_elapsed = tstop - tstart; print_vector(e); +// std::cout << "Calculation took " << time_elapsed.count() << " s" << std::endl; return 0; }