-
Notifications
You must be signed in to change notification settings - Fork 1
/
kmc_kmcsimulation.h
75 lines (63 loc) · 2.05 KB
/
kmc_kmcsimulation.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
/* KMC Simulation for FCC lattice with diffusion
by species swap and/or vacancy exchange
Author: Tegar Wicaksono (tegar@alumni.ubc.ca)
Written: March 2017
Check repository below for the most updated version:
https://github.com/tegarwicaksono/kmc-solute-diffusion-fcc
*/
#ifndef KMC_KMCSIMULATION_H_INCLUDED
#define KMC_KMCSIMULATION_H_INCLUDED
#include "kmc_simulationbox.h"
#include "kmc_rate.h"
#include "kmc_chosenevent.h"
#include "kmc_snapshot.h"
#include "kmc_restart.h"
#include "kmc_logfile.h"
#include <vector>
#include <utility>
using namespace std;
class KMCSimulation {
public:
double curr_time_clock;
double prev_time_clock;
double total_rate = 0.0;
double chosen_cumulative_rate;
double chosen_time_increment;
vector<Rate> rates;
SimulationBox* kmc_box;
ChosenEvent chosen_event;
Snapshot dump;
Restart restart;
Logfile logfile;
KMCSimulation();
KMCSimulation(const KMCSimulation& other);
KMCSimulation& operator= (KMCSimulation other);
KMCSimulation(KMCSimulation&& other);
virtual ~KMCSimulation() = default;
friend void swap(KMCSimulation &a, KMCSimulation &b);
void print_rates();
void assign_simulation_box(SimulationBox* const &sb);
void prepare_for_snapshot();
void prepare_for_restart();
void calculate_total_rate();
Rate find_rate(const double &rate);
double draw_random_number();
void choose_event();
void execute_event();
void update_simulation();
void increment_time();
void run_one_kmc_step();
void check_to_produce_restart(const unsigned long long int &step);
void check_to_produce_snapshot(const unsigned long long int &step);
void check_to_produce_logfile(const unsigned long long int &step);
void initialize_logfile();
void run_kmc_simulation(SimulationBox* const &sb);
void print_interaction_energy();
void print_total_rate();
void print_chosen_event();
void print_execute_event();
void print_current_time();
void print_simulation_step_status(const unsigned long long int &step);
void print_simulation_initial_status();
};
#endif // KMC_KMCSIMULATION_H_INCLUDED