-
Notifications
You must be signed in to change notification settings - Fork 0
/
VMCmain.cpp
127 lines (89 loc) · 2.57 KB
/
VMCmain.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* File: QMCmain.cpp
* Author: jorgehog
*
* Created on 13. april 2012, 17:04
*/
#include "mpi.h"
#include "QMCheaders.h"
#include <sys/time.h>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int n_p, dim, n_c, numprocs, my_rank;
double alpha, beta, w, dt, h, cumul_e, cumul_e2, e, e2;
long random_seed;
//initializing MPI
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
random_seed = -1.234;//-time(NULL);
random_seed = -time(NULL) - my_rank;
n_p = 30;
dim = 2;
w = 1;
n_c = 1000;
string system = "QDots";
string sampling = "BF";
string kinetics_type = "Num";
bool use_jastrow = true;
bool use_coulomb = true;
initVMC(n_p, dim, w, dt, system, sampling, alpha, beta);
//cout << alpha << " " << beta << endl;
if ((use_jastrow == false) && (use_coulomb == false)) {
alpha = 1;
}
Kinetics* kinetics;
Orbitals* SP_basis;
Potential* onebody_pot;
System* SYSTEM;
Sampling* sample_method;
Jastrow* jastrow;
if (kinetics_type == "Num") {
h = 0.0001;
kinetics = new Numerical(n_p, dim, h);
} else if (kinetics_type == "CF") {
kinetics = new Closed_form(n_p, dim);
} else {
cout << "unknown kinetics" << endl;
exit(1);
}
if (sampling == "IS") {
sample_method = new Importance(n_p, dim, dt, random_seed);
} else if (sampling == "BF") {
sample_method = new Brute_Force(n_p, dim, dt, random_seed);
} else {
cout << "unknown sampling method" << endl;
exit(1);
}
if (use_jastrow) {
jastrow = new Pade_Jastrow(n_p, dim, beta);
} else {
jastrow = new No_Jastrow();
}
if (system == "QDots") {
SP_basis = new oscillator_basis(n_p, dim, alpha, w);
onebody_pot = new Harmonic_osc(n_p, dim, w, use_coulomb);
SYSTEM = new Fermions(n_p, dim, onebody_pot, SP_basis);
} else {
cout << "unknown system" << endl;
exit(1);
}
VMC* vmc = new VMC(n_p, dim, n_c, jastrow, sample_method, SYSTEM, kinetics);
vmc->run_method();
cumul_e = cumul_e2 = 0;
e = vmc->get_energy();
e2 = vmc->get_e2();
MPI_Reduce(&e, &cumul_e, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
MPI_Reduce(&e2, &cumul_e2, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
if (my_rank == 0) {
vmc->set_e(e);
vmc->set_e2(e2);
vmc->output();
}
// vmc->output();
MPI_Finalize();
return 0;
}