StatMech
Loading...
Searching...
No Matches
EigenExpValue.cpp File Reference

Classes

class  IOManager
 

Functions

int main (int argc, char **argv)
 

Detailed Description

Author
Shoki Sugimoto (sugim.nosp@m.oto@.nosp@m.cat.p.nosp@m.hys..nosp@m.s.u-t.nosp@m.okyo.nosp@m..ac.j.nosp@m.o)
Version
2.0
Date
2022-10-03

Input: Ensemble.hpp

  • class HamiltonianEnsemble
    • sample(void) -> class ScalableOperator
      Returns an instance of class ScalableOperator
      Class ScalableOperator must provide the method "construct_globalOp(size_t L) -> Eigen::MatrixX"
    • discard(size_t n) -> void
      Discards n samples
    • [class method] dataname(size_t rep) -> std::string
      Returns the name of the directory for a given Hamitonian
    • [class method] usage(size_t nargs) -> std::string
    • [class method] nargs(void) -> size_t
    • [typedef] EigenSolver
  • class ObservableEnsemble
    • sample(void) -> class MatrixType
    • reset(void) -> void
      Reset the internal state of the random number generator
    • discard(size_t n) -> void
      Discards n samples
    • [class method] dataname(size_t rep) -> std::string
      Returns the name of the directory for a given Hamitonian
    • [class method] usage(size_t nargs) -> std::string
    • [class method] nargs(void) -> size_t
    • [typedef] EigenSolver

Output: A file that contains eigenstate expectation values of an observable sampled randomly from the random matrix ensemble defined in Ensemble.hpp

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)
66 {
67 constexpr size_t nargs = 8;
69 std::cerr << "Usage: 0.(This) 1.(LMax) 2.(LMin) 3.(hRepMin) 4.(hRepMax) 5.(opRepMin) "
70 "6.(opRepMax) 7.(OutDir)\n";
71 size_t arg_count = nargs;
72 std::cerr << " " << HamiltonianEnsemble::usage(arg_count) << "\n";
73 arg_count += HamiltonianEnsemble::nargs();
74 std::cerr << " " << ObservableEnsemble::usage(arg_count) << "\n";
75 std::cerr << "argc = " << argc << std::endl;
76 std::exit(EXIT_FAILURE);
77 }
78 size_t const LMax = std::atoi(argv[1]);
79 size_t const LMin = std::atoi(argv[2]);
80 size_t const hRepMin = std::atoi(argv[3]);
81 size_t const hRepMax = std::atoi(argv[4]);
82 size_t const opRepMin = std::atoi(argv[5]);
83 size_t const opRepMax = std::atoi(argv[6]);
84 IOManager data_writer(argv[7]);
85
86 size_t arg_count = nargs;
87 auto& hEnsemble = HamiltonianEnsemble::get_instance(argv + arg_count);
88 arg_count += HamiltonianEnsemble::nargs();
89 std::vector<ObservableEnsemble> obsEnsembles(LMax + 1);
90 for(size_t L = LMin; L <= LMax; ++L) {
91 obsEnsembles[L] = ObservableEnsemble(L, argv + arg_count);
92 }
93
94 hEnsemble.discard(hRepMin);
95 for(size_t hRep = hRepMin; hRep <= hRepMax; ++hRep) {
96 // Sample a Hamiltonian
97 auto loc_hamiltonian = hEnsemble.sample();
98
99 for(size_t L = LMin; L <= LMax; ++L) {
100 auto hamiltonian = loc_hamiltonian.construct_globalOp(L);
101 // Diagonalize a Hamiltonian to get eigenvalues and eigenvectors
102 HamiltonianEnsemble::EigenSolver eigSolver(std::move(hamiltonian));
103 data_writer.save_ResultsToFile(eigSolver.eigenvalues(), hRep, L);
104
105 auto& opEnsemble = obsEnsembles[L];
106 opEnsemble.reset();
107 opEnsemble.discard(opRepMin);
108 for(size_t opRep = opRepMin; opRep <= opRepMax; ++opRep) {
109 std::cout << "hRep = " << hRep << ", L = " << L << ", opRep = " << opRep
110 << std::endl;
111 // Sample an observable
112 auto observable = opEnsemble.sample();
113 auto eev = EigenExpValues(eigSolver.eigenvectors(), observable);
114
115 ObservableEnsemble::EigenSolver op_EigSolver(std::move(observable),
116 Eigen::EigenvaluesOnly);
117 data_writer.save_ResultsToFile(op_EigSolver.eigenvalues(), eev, hRep, L, opRep);
118 }
119 }
120 }
121 return EXIT_SUCCESS;
122}
auto EigenExpValues(ObjectOnGPU< Matrix1 > const &eigenvectors, ObjectOnGPU< Matrix2 > const &observable) -> Eigen::VectorX< typename Matrix1::RealScalar >
Definition EigenExpValues.cuh:9
static HamiltonianEnsemble & get_instance(char **CL_argv)
Definition Ensemble.cuh:115
static constexpr size_t nargs(void)
Definition Ensemble.cuh:97
static std::string usage(size_t nargs)
Definition Ensemble.cuh:93
Definition EigenExpValue.cpp:48
Definition MatrixUtils.hpp:20
Definition Ensemble.cuh:131
static constexpr size_t nargs(void)
Definition Ensemble.cuh:147
static std::string usage(size_t nargs)
Definition Ensemble.cuh:142