-
Notifications
You must be signed in to change notification settings - Fork 0
/
lobsterWF2xsf.cpp
104 lines (88 loc) · 2.94 KB
/
lobsterWF2xsf.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
* Copyright (C) 2020, Ryky Nelson
*/
#include <iostream>
#include <fstream>
#include <Eigen/Dense>
#include <math.h>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
using namespace Eigen;
int main(int argc, char* argv[]){
if (argc <= 1){
cout << "ERROR: please provide Wavefunction file!" << '\n';
return 0;
}
ifstream wffile( argv[1] );
if(!wffile) {
cerr << "Unable to open " << argv[1] << endl;
return 0;
}
string line; Vector3i nGrids;
getline(wffile,line);
{
string stmp;
stringstream ss(line);
ss >> stmp >> stmp >> stmp >> stmp >> stmp >> stmp >> stmp
>> nGrids(0) >> nGrids(1) >> nGrids(2);
}
int numOfLines = nGrids.prod();
ArrayX3d grids(numOfLines,3);
ArrayXd WFR(numOfLines), WFI(numOfLines);
for (int il = 0; il < nGrids(0); ++il) {
for (int jl = 0; jl < nGrids(1); ++jl) {
for (int kl = 0; kl < nGrids(2); ++kl) {
double garbage;
getline(wffile,line);
stringstream ss(line);
int idx = kl + ( jl*nGrids(2) ) + ( il*nGrids(2)*nGrids(1) );
ss >> grids(idx,0) >> grids(idx,1) >> grids(idx,2) >> garbage
>> WFR(idx) >> WFI(idx);
}
}
}
cout.precision(4);
cout.setf(ios::fixed, ios::floatfield);
cout << "BEGIN_BLOCK_DATAGRID_3D\n"
<< " my_3D_datagrid\n"
//print the real components
<< " BEGIN_DATAGRID_3D_this_is_3Dgrid#1\n"
<< " " << nGrids.transpose() << endl
<< " " << grids.row(0) << endl
<< " " << grids(numOfLines-1,0)-grids(0,0) << ' ' << 0. << ' ' << 0. << endl
<< " " << 0. << ' ' << grids(numOfLines-1,1)-grids(0,1) << ' ' << 0. << endl
<< " " << 0. << ' ' << 0. << ' ' << grids(numOfLines-1,2)-grids(0,2) << endl;
for (int iz = 0; iz < nGrids(2); ++iz) {
for (int iy = 0; iy < nGrids(1); ++iy) {
for (int ix = 0; ix < nGrids(0); ++ix) {
int idx = iz + ( iy*nGrids(2) ) + ( ix*nGrids(2)*nGrids(1) );
cout << " " << WFR(idx) << ' ';
}
cout << endl;
}
if (iz == nGrids(2)-1) cout << " END_DATAGRID_3D\n";
else cout << endl;
}
//print the imaginary components
cout << " BEGIN_DATAGRID_3D_this_is_3Dgrid#2\n"
<< " " << nGrids.transpose() << endl
<< " " << grids.row(0) << endl
<< " " << grids(numOfLines-1,0)-grids(0,0) << ' ' << 0. << ' ' << 0. << endl
<< " " << 0. << ' ' << grids(numOfLines-1,1)-grids(0,1) << ' ' << 0. << endl
<< " " << 0. << ' ' << 0. << ' ' << grids(numOfLines-1,2)-grids(0,2) << endl;
for (int iz = 0; iz < nGrids(2); ++iz) {
for (int iy = 0; iy < nGrids(1); ++iy) {
for (int ix = 0; ix < nGrids(0); ++ix) {
int idx = iz + ( iy*nGrids(2) ) + ( ix*nGrids(2)*nGrids(1) );
cout << " " << WFI(idx) << ' ';
}
cout << endl;
}
if (iz == nGrids(2)-1) cout << " END_DATAGRID_3D\n";
else cout << endl;
}
cout << "END_BLOCK_DATAGRID_3D\n";
return 0;
}