-
Notifications
You must be signed in to change notification settings - Fork 0
/
Kinetics.h
132 lines (83 loc) · 4.04 KB
/
Kinetics.h
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
127
128
129
130
131
/*
* File: Kinetics.h
* Author: jorgehog
*
* Created on 13. april 2012, 17:45
*/
#ifndef KINETICS_H
#define KINETICS_H
class Kinetics {
protected:
int n_p;
int n2;
int dim;
QMC *qmc;
public:
Kinetics(int n_p, int dim);
virtual double get_KE(const Walker* walker) = 0;
virtual void get_QF(Walker* walker) = 0;
virtual void get_necessities_IS(Walker* walker) const = 0;
//BF necessities are independent of kinetics
virtual void update_walker_IS(Walker* walker_pre, const Walker* walker_post, int particle) const = 0;
//NOTHING TO UPDATE FOR BF
virtual double get_spatial_ratio_IS(const Walker* walker_post, const Walker* walker_pre, int particle) const = 0;
//BF ratio is indep. of kinetics
virtual void calculate_energy_necessities(Walker* walker) const = 0;
virtual void update_necessities_IS(const Walker* walker_pre, Walker* walker_post, int particle) const = 0;
//NO BF NECESSITIES
virtual void copy_walker_IS(const Walker* parent, Walker* child) const = 0;
virtual void copy_walker_BF(const Walker* parent, Walker* child) const = 0;
virtual void reset_walker_IS(const Walker* walker_pre, Walker* walker_post, int particle) const = 0;
//NOTHING TO RESET FOR BF
void set_qmc_ptr(QMC* qmc) {
this->qmc = qmc;
}
};
class NoKinetics : public Kinetics {
public:
virtual double get_KE(const Walker* walker) {
return 0;
}
virtual void get_QF(Walker* walker){};
virtual void get_necessities_IS(Walker* walker) const {};
virtual void update_walker_IS(Walker* walker_pre, const Walker* walker_post, int particle) const {};
virtual double get_spatial_ratio_IS(const Walker* walker_post, const Walker* walker_pre, int particle) const {};
virtual void calculate_energy_necessities(Walker* walker) const {};
virtual void update_necessities_IS(const Walker* walker_pre, Walker* walker_post, int particle) const {};
virtual void copy_walker_IS(const Walker* parent, Walker* child) const {};
virtual void copy_walker_BF(const Walker* parent, Walker* child) const {};
virtual void reset_walker_IS(const Walker* walker_pre, Walker* walker_post, int particle) const {};
};
class Numerical : public Kinetics {
protected:
double h, h2;
Walker* wfplus;
Walker* wfminus;
public:
Numerical(int n_p, int dim, double h = 0.0001);
virtual double get_KE(const Walker* walker);
virtual void get_QF(Walker* walker);
virtual void get_necessities_IS(Walker* walker) const;
virtual void update_walker_IS(Walker* walker_pre, const Walker* walker_post, int particle) const;
virtual double get_spatial_ratio_IS(const Walker* walker_post, const Walker* walker_pre, int particle) const;
virtual void calculate_energy_necessities(Walker* walker) const;
virtual void update_necessities_IS(const Walker* walker_pre, Walker* walker_post, int particle) const;
virtual void copy_walker_IS(const Walker* parent, Walker* child) const;
virtual void copy_walker_BF(const Walker* parent, Walker* child) const;
virtual void reset_walker_IS(const Walker* walker_pre, Walker* walker_post, int particle) const;
};
class Closed_form : public Kinetics {
public:
Closed_form(int n_p, int dim);
virtual double get_KE(const Walker* walker);
virtual void get_QF(Walker* walker);
virtual void get_necessities_IS(Walker* walker) const;
virtual void update_walker_IS(Walker* walker_pre, const Walker* walker_post, int particle) const;
virtual void calculate_energy_necessities(Walker* walker) const;
virtual double get_spatial_ratio_IS(const Walker* walker_post, const Walker* walker_pre, int particle) const;
virtual void update_necessities_IS(const Walker* walker_pre, Walker* walker_post, int particle) const;
virtual void copy_walker_IS(const Walker* parent, Walker* child) const;
virtual void copy_walker_BF(const Walker* parent, Walker* child) const;
virtual void reset_walker_IS(const Walker* walker_pre, Walker* walker_post, int particle) const;
};
#endif /* KINETICS_H */