StatMech
Loading...
Searching...
No Matches
EigenExpValue_gpu.cu File Reference

Functions

int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)
11 {
12 if(argc != 2) {
13 std::cerr << "Usage: EigenExpValue 1.InFile" << std::endl;
14 std::exit(EX_USAGE);
15 }
16 std::string InFName(argv[1]);
17 std::ifstream Infs(InFName);
18 Infs.exceptions(std::ios::badbit | std::ios::eofbit | std::ios::failbit);
19 if( !Infs.is_open() ) {
20 std::cerr << "Can't open a file \"" << InFName << "\"" << std::endl;
21 std::exit(EX_NOINPUT);
22 }
23 try { skip_header(Infs); }
24 catch(std::exception& e) {
25 std::cerr << "Error(skip_header): " << e.what() << std::endl;
26 std::cerr << "File: \"" << InFName << "\" is empty." << std::endl;
27 std::exit(EX_NOINPUT);
28 }
29 Infs.exceptions(std::ifstream::badbit);
30
31 std::cout << "########## Input ##########" << std::endl;
32 bool dimFlag = false;
33 Integer_t dim = 0;
34 matrix<Complex_t<double>> Hamiltonian, Operator;
35 std::vector<double> ExpValue, Eigenvalue;
36 std::string str;
37 std::stringstream ss;
38 auto oldPos = Infs.tellg();
39 while( std::getline(Infs, str) ){
40 ss.str(str); ss.clear(std::stringstream::goodbit);
41 ss >> str;
42 if(str.find("dim") != std::string::npos) {
43 ss >> str;
44 dim = std::atoi(str.c_str());
45 dimFlag=true;
46 } else if(str.find("Hamiltonian") != std::string::npos) {
47 if(dimFlag == false) {
48 std::cerr << "Error: Invalid data format." << std::endl; std::exit(EX_DATAERR);
49 }
50 Infs.seekg(oldPos);
51 std::cout << "dim = " << dim << std::endl;
52 Hamiltonian.resize(dim,dim);
53 readMatrix(Infs, dim, Hamiltonian);
54 #ifndef NDEBUG
55 std::cout << "Hamiltonian:" << std::endl;
56 Hamiltonian.print(dim,dim);
57 #endif
58 } else if(str.find("Operator") != std::string::npos) {
59 if(dimFlag == false) {
60 std::cerr << "Error: Invalid data format." << std::endl; std::exit(EX_DATAERR);
61 }
62 Infs.seekg(oldPos);
63 Operator.resize(dim,dim);
64 readMatrix(Infs, dim, Operator);
65 #ifndef NDEBUG
66 std::cout << "Operator:" << std::endl;
67 Operator.print(dim,dim);
68 #endif
69 } else if(str.find("ExpValue") != std::string::npos) {
70 if(dimFlag == false) {
71 std::cerr << "Error: Invalid data format." << std::endl; std::exit(EX_DATAERR);
72 }
73 // Infs.seekg(oldPos);
74 } else if(str.find("Eigenvalue") != std::string::npos) {
75 if(dimFlag == false) {
76 std::cerr << "Error: Invalid data format." << std::endl; std::exit(EX_DATAERR);
77 }
78 // Infs.seekg(oldPos);
79 }
80 oldPos = Infs.tellg();
81 }
82
83 std::cout << "\n" << "########## Result ##########" << std::endl;
84 magma_init();
85 magma_int_t dev = 0;
86 magma_queue_t queue=NULL;
87 magma_queue_create( dev, &queue );
88 matrix_gpu<Complex_t<double>> dHamiltonian(dim,dim);
89 matrix_gpu<Complex_t<double>> dOperator(dim,dim);
90 magma_zsetmatrix(dim,dim, &*Hamiltonian.begin(), dim, dHamiltonian.ptr(), dim, queue);
91 magma_zsetmatrix(dim,dim, &*Operator.begin(), dim, dOperator.ptr(), dim, queue);
92
93 std::vector<double> ResEXPvalue(dim);
94 std::vector<double> ResEigenvalue(dim);
95 EigenExpValue(ResEXPvalue, ResEigenvalue, dim, dHamiltonian, dOperator, queue);
96 std::cout << "ResEXPvalue:" << std::endl; print(ResEXPvalue,dim);
97 std::cout << "ResEigenvalue:" << std::endl; print(ResEigenvalue,dim);
98
99 magma_finalize();
100 return 0;
101}
MKL_INT Integer_t
Definition mytypes.hpp:359
Integer_t EigenExpValue(std::vector< double > &EXPvalue, std::vector< double > &Eigenvalue, Integer_t const dim, matrix< Complex_t< double > > &Hamiltonian, const matrix< Complex_t< double > > &Operator, void *GPUconf)
Definition statmech.cpp:120