4#define _USE_MATH_DEFINES
7#include "Headers/LocalRandomMatrix.hpp"
8#include "Headers/matrix_util.hpp"
9#include "Headers/spin_int.hpp"
10#include "Headers/mersenne_twister.hpp"
15static inline bool Initialize(
int const argc,
char const*
const* argv,
int const Nargs_common) {
return true; }
16static inline bool Finalize(
int argc,
char** argv) {
return true; }
22static inline void generateLocal_h(matrix<Complex_t>& mat,
Integer_t const d_lmat,
Integer_t const seed){
25 std::cout <<
"# init_genrand(" << seed <<
")\n";
29 mat.at(0,0) = -1.1217*ComplexOne<>;
30 mat.at(1,0) = 0.0*ComplexOne<>; mat.at(1,1) = -0.4034*ComplexOne<>;
31 mat.at(2,0) = 0.0*ComplexOne<>; mat.at(2,1) = 0.2730*ComplexOne<>; mat.at(2,2) = -0.4034*ComplexOne<>;
32 mat.at(3,0) = -0.1222*ComplexOne<>; mat.at(3,1) = 0.0*ComplexOne<>; mat.at(3,2) = 0.0*ComplexOne<>; mat.at(3,3) = -1.1217*ComplexOne<>;
33 for(
int i = 0;i < 4; ++i)
for(
int j = i+1;j < 4; ++j) mat.at(i,j) = conj(mat.at(j,i));
34 mat.print(d_lmat,d_lmat);
37static inline void generateLocal_op(matrix<Complex_t>& mat,
Integer_t const d_lmat,
Integer_t const seed){
38 if(seed >= 0) init_genrand(seed);
39 RandomMatrix_GUE(mat, d_lmat);
49 std::cout <<
"n=" <<
Sector.N() <<
"\n";
50 local.print(d_loch,d_loch);
52 std::cout <<
"\n" << std::endl;
59 return constructGlobal_h(global, local, numLoc,
Sector);
63 std::fill(matTot.begin(), matTot.end(), ComplexZero<>);
69 #pragma omp parallel for schedule(dynamic, 1) private(Id1, Id2, locId1, locId2, theta)
70 for(
int idx = 0;idx <
Sector.dim(); ++idx)
for(
int idy = 0;idy <= idx; ++idy) {
71 for(
int trans1 = 0;trans1 <
Sector.periodicity(idx); ++trans1) {
74 for(
int trans2 = 0;trans2 <
Sector.periodicity(idy); ++trans2) {
77 if(Id1/dmatLoc != Id2/dmatLoc)
continue;
79 matTot.at(idx,idy) += matLoc.at(locId1,locId2) *std::exp(I<>*theta);
82 matTot.at(idx,idy) /= sqrt( (
double)
Sector.periodicity(idx)*
Sector.periodicity(idy) );
83 matTot.at(idy,idx) = conj(matTot.at(idx,idy));
__global__ void MatrixElementsInSector(void)
Definition generateRM.cuh:61
std::vector< TransSector > Sector(n_max+1)
Translation invariant sector of a many-body Hilbert space.
Definition TransSector.hpp:19
GPUconfig GPUconf(dim3(nBlock, nBlock, 1), dim3(nThread, nThread, 1), 0, queue)
double Real_t
Definition mytypes.hpp:37
MKL_INT Integer_t
Definition mytypes.hpp:359