4#define _USE_MATH_DEFINES
7#include "Headers/LocalRandomMatrix.hpp"
8#include "Headers/translation.hpp"
9#include "Headers/mersenne_twister.hpp"
16#define RANDTYPE argv[6] << argv[7] << "_"
22static inline bool Initialize(
int const argc,
char const*
const* argv,
int const Nargs_common) {
25static inline bool Finalize(
int argc,
char** argv) {
32 std::cout <<
"# init_genrand(" << seed <<
")\n";
47 std::cerr <<
"Error: Currently, only two-body operators on spin-1/2 chain is implemented." << std::endl;
50 RandomMatrix_GUE(mat, d_lmat);
52 mat.at(0,1) = (mat.at(0,1)+mat.at(0,2))/2.0;
53 mat.at(0,2) = mat.at(0,1);
55 mat.at(1,1) = (mat.at(1,1)+mat.at(2,2))/2.0;
56 mat.at(1,2) = (mat.at(1,2)+mat.at(2,1))/2.0;
57 mat.at(1,3) = (mat.at(1,3)+mat.at(2,3))/2.0;
58 mat.at(2,2) = mat.at(1,1);
59 mat.at(2,3) = mat.at(1,3);
62 for(
int i = 0;i < 4; ++i)
for(
int j = 0;j < i; ++j) {
63 mat.at(i,j) = conj(mat.at(j,i));
69 generateLocal_h(mat, d_lmat, seed);
74 double const n =
Sector.N()/2.0;
77 std::fill(global.begin(), global.end(), DoubleComplexZero);
83 global.at(i+2,i) = sqrt((s-m)*(s-m-1)*(s+m+1)*(s+m+2)) *local.at(0,3);
84 global.at(i,i+2) = conj(global.at(i+2,i));
87 global.at(i+1,i) = 2*sqrt((s-m)*(s+m+1)) *( (n+m)*local.at(0,1) +(n-m-1)*local.at(1,3) );
88 global.at(i,i+1) = conj(global.at(i+1,i));
90 global.at(i,i) = 2.0*(s*(s+1) -m*m -n) *local.at(1,2) +2.0*(n*n-m*m)*local.at(1,1);
91 global.at(i,i) += (n+m)*(n+m-1) *local.at(0,0) +(n-m)*(n-m-1) *local.at(3,3);
96 std::cout <<
"imax=" << imax <<
"\n";
98 global.print(imax+1,imax+1);
99 std::cout <<
"\n" << std::endl;
107 return constructGlobal_h(global, local, s,
Sector);
std::vector< Real_t * > prefactor
Definition generateRM.hpp:16
constexpr int Nargs_sp
Definition generateRM.hpp:19
std::string const USAGE_sp
Definition generateRM.hpp:17
std::vector< TransSector > Sector(n_max+1)
Definition mytypes.hpp:147
Translation invariant sector of a many-body Hilbert space.
Definition TransSector.hpp:19
MKL_INT Integer_t
Definition mytypes.hpp:359