kmclab 0.1.4__tar.gz → 0.1.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kmclab-0.1.5/PKG-INFO +262 -0
- kmclab-0.1.5/README.md +250 -0
- {kmclab-0.1.4 → kmclab-0.1.5}/pyproject.toml +1 -1
- kmclab-0.1.5/src/kmclab/__init__.py +5 -0
- kmclab-0.1.4/src/kmclab/hex.py → kmclab-0.1.5/src/kmclab/hexa.py +166 -159
- {kmclab-0.1.4 → kmclab-0.1.5}/src/kmclab/square.py +129 -116
- kmclab-0.1.5/src/kmclab.egg-info/PKG-INFO +262 -0
- {kmclab-0.1.4 → kmclab-0.1.5}/src/kmclab.egg-info/SOURCES.txt +1 -1
- kmclab-0.1.4/PKG-INFO +0 -63
- kmclab-0.1.4/README.md +0 -51
- kmclab-0.1.4/src/kmclab/__init__.py +0 -5
- kmclab-0.1.4/src/kmclab.egg-info/PKG-INFO +0 -63
- {kmclab-0.1.4 → kmclab-0.1.5}/setup.cfg +0 -0
- {kmclab-0.1.4 → kmclab-0.1.5}/src/kmclab.egg-info/dependency_links.txt +0 -0
- {kmclab-0.1.4 → kmclab-0.1.5}/src/kmclab.egg-info/requires.txt +0 -0
- {kmclab-0.1.4 → kmclab-0.1.5}/src/kmclab.egg-info/top_level.txt +0 -0
kmclab-0.1.5/PKG-INFO
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kmclab
|
|
3
|
+
Version: 0.1.5
|
|
4
|
+
Summary: Hex and square lattice KMC classes.
|
|
5
|
+
Author: Shirin Asadi
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.9
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: numpy>=1.21
|
|
10
|
+
Requires-Dist: matplotlib>=3.5
|
|
11
|
+
Requires-Dist: scipy>=1.8
|
|
12
|
+
|
|
13
|
+
# kmclab
|
|
14
|
+
|
|
15
|
+
A lightweight Python package for lattice-based kinetic Monte Carlo (KMC) utilities.
|
|
16
|
+
Currently includes simple hexagonal and square lattice KMC classes.
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
Install using pip
|
|
21
|
+
```
|
|
22
|
+
pip install kmclab
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
To upgrade to the latest version
|
|
26
|
+
```
|
|
27
|
+
pip install -U kmclab
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Or you may clone the repository and install in editable mode:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
git clone https://github.com/shirinasadix/kmclab.git
|
|
34
|
+
cd kmclab
|
|
35
|
+
pip install -e .
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Usage
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
from kmclab import hex_kmc
|
|
42
|
+
|
|
43
|
+
GoombKMC = hex_kmc(n_atoms = 5, n_defects = 5, n_adsorbates = 2, lattice_size = 10, n_steps = 50)
|
|
44
|
+
|
|
45
|
+
GoombKMC.run()
|
|
46
|
+
|
|
47
|
+
GoombKMC.anim1panels(filename = 'wtf1')
|
|
48
|
+
|
|
49
|
+
GoombKMC.anim2panels(filename = 'ov10hy0')
|
|
50
|
+
|
|
51
|
+
GoombKMC.msdplot(filename = 'MSD_Trajectory')
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Package Structure
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
kmclab/
|
|
58
|
+
├── src/
|
|
59
|
+
│ └── kmclab/
|
|
60
|
+
│ ├── hexa.py
|
|
61
|
+
│ ├── square.py
|
|
62
|
+
│ └── __init__.py
|
|
63
|
+
├── tests/
|
|
64
|
+
├── pyproject.toml
|
|
65
|
+
└── README.md
|
|
66
|
+
```
|
|
67
|
+
## Examples
|
|
68
|
+
|
|
69
|
+
### Square Lattice - Single Run
|
|
70
|
+
|
|
71
|
+
Here is the step by step guide:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
from square import square_kmc
|
|
75
|
+
```
|
|
76
|
+
Now to define system parameters:
|
|
77
|
+
```
|
|
78
|
+
square_params = {
|
|
79
|
+
|
|
80
|
+
# System composition
|
|
81
|
+
'n_atoms': 5, # Number of mobile adatoms
|
|
82
|
+
'n_defects': 5, # Number of surface defects
|
|
83
|
+
'n_adsorbates': 5, # Number of surface adsorbates
|
|
84
|
+
|
|
85
|
+
# Lattice and simulation control
|
|
86
|
+
'lattice_size': 10, # Linear size of the lattice
|
|
87
|
+
'T': 300, # Temperature (K)
|
|
88
|
+
'seed': 1, # Random number seed
|
|
89
|
+
|
|
90
|
+
'len_vertical' : 0.297e-3, # Vertical lattice hop distances (µm)
|
|
91
|
+
'len_horizontal' : 0.660e-3, # Horizontal lattice hop distances (µm)
|
|
92
|
+
'adsorbates_freq' : 3, # Adsorbate redistribution frequency (required only if n_adsorbates > 0) (-1 disables)
|
|
93
|
+
|
|
94
|
+
# Defect behavior
|
|
95
|
+
'defect_type': 1, # 1 = trapping defects, 2 = blocking defects (required only if n_defects > 0 )
|
|
96
|
+
|
|
97
|
+
# Kinetic prefactor
|
|
98
|
+
'k_0': 1,
|
|
99
|
+
|
|
100
|
+
# Diffusion energy barriers on stoichiometric sites along defferent directions (eV)
|
|
101
|
+
'energy_barrier_north' : 0.26,
|
|
102
|
+
'energy_barrier_south' : 0.26,
|
|
103
|
+
'energy_barrier_east' : 0.91,
|
|
104
|
+
'energy_barrier_west' : 0.91,
|
|
105
|
+
'energy_barrier_northeast' : 0.91,
|
|
106
|
+
'energy_barrier_northwest' : 0.91,
|
|
107
|
+
'energy_barrier_southeast' : 0.91,
|
|
108
|
+
'energy_barrier_southwest' : 0.91,
|
|
109
|
+
|
|
110
|
+
# Trapping defect energy barriers (required only if n_defects > 0 and defect_type == 1)
|
|
111
|
+
'energy_barrier_trapping_defect_north' : 0.99,
|
|
112
|
+
'energy_barrier_trapping_defect_south' : 0.99,
|
|
113
|
+
'energy_barrier_trapping_defect_northeast' : 0.99,
|
|
114
|
+
'energy_barrier_trapping_defect_northwest' : 0.99,
|
|
115
|
+
'energy_barrier_trapping_defect_southeast' : 0.99,
|
|
116
|
+
'energy_barrier_trapping_defect_southwest' : 0.99,
|
|
117
|
+
|
|
118
|
+
# Blocking defect energy barriers (required only if n_defects > 0 and defect_type == 2)
|
|
119
|
+
'energy_barrier_blocking_defect_north' : 0.99,
|
|
120
|
+
'energy_barrier_blocking_defect_south' : 0.99,
|
|
121
|
+
'energy_barrier_blocking_defect_east' : 0.99,
|
|
122
|
+
'energy_barrier_blocking_defect_west' :0.99,
|
|
123
|
+
'energy_barrier_blocking_defect_northeast' : 0.99,
|
|
124
|
+
'energy_barrier_blocking_defect_northwest' : 0.99,
|
|
125
|
+
'energy_barrier_blocking_defect_southeast' : 0.99,
|
|
126
|
+
'energy_barrier_blocking_defect_southwest' : 0.99,
|
|
127
|
+
|
|
128
|
+
# Adsorbate-related diffusion barriers (required only if n_adsorbates > 0)
|
|
129
|
+
'energy_barrier_adsorbate_north' : 0.72,
|
|
130
|
+
'energy_barrier_adsorbate_south' : 0.72,
|
|
131
|
+
'energy_barrier_adsorbate_east' : 0.72,
|
|
132
|
+
'energy_barrier_adsorbate_west' : 0.72,
|
|
133
|
+
'energy_barrier_adsorbate_northeast' : 0.72,
|
|
134
|
+
'energy_barrier_adsorbate_northwest' : 0.72,
|
|
135
|
+
'energy_barrier_adsorbate_southeast' : 0.72,
|
|
136
|
+
'energy_barrier_adsorbate_southwest' : 0.72}
|
|
137
|
+
```
|
|
138
|
+
Now to run the actual KMC:
|
|
139
|
+
```
|
|
140
|
+
KMC = square_kmc(**square_params)
|
|
141
|
+
|
|
142
|
+
KMC.run(n_steps = 30) # Total KMC steps (must be > 10)
|
|
143
|
+
```
|
|
144
|
+
Now to see the results you have multiple options:
|
|
145
|
+
```
|
|
146
|
+
KMC.anim1panel()
|
|
147
|
+
|
|
148
|
+
KMC.anim2panel()
|
|
149
|
+
|
|
150
|
+
KMC.msdplot()
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Hexagonal Lattice - Multi Run (Histograms)
|
|
154
|
+
|
|
155
|
+
Here is the step by step guide:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
from hexa import hexa_kmc
|
|
159
|
+
import numpy as np
|
|
160
|
+
from pathlib import Path
|
|
161
|
+
import shutil
|
|
162
|
+
|
|
163
|
+
rs_p = Path("random_seeds")
|
|
164
|
+
|
|
165
|
+
if rs_p.exists():
|
|
166
|
+
shutil.rmtree(rs_p)
|
|
167
|
+
|
|
168
|
+
(rs_p / "time").mkdir(parents=True)
|
|
169
|
+
(rs_p / "msd").mkdir(parents=True)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
n_seeds = 5 # Number of trials
|
|
173
|
+
|
|
174
|
+
hexa_params = {
|
|
175
|
+
# System composition
|
|
176
|
+
'n_atoms': 5, # Number of mobile adatoms
|
|
177
|
+
'n_defects': 5, # Number of surface defects
|
|
178
|
+
'n_adsorbates': 5, # Number of surface adsorbates
|
|
179
|
+
|
|
180
|
+
# Lattice and simulation control
|
|
181
|
+
'lattice_size': 10, # Linear size of the lattice
|
|
182
|
+
'T': 300, # Temperature (K)
|
|
183
|
+
'seed': 1, # Random number seed
|
|
184
|
+
|
|
185
|
+
'len_vertical' : 0.38e-3, # Vertical lattice hop distances (µm)
|
|
186
|
+
'len_horizontal' : 0.51e-3, # Horizontal lattice hop distances (µm)
|
|
187
|
+
'adsorbates_freq' : 3, # Adsorbate redistribution frequency (required only if n_adsorbates > 0) (-1 disables)
|
|
188
|
+
|
|
189
|
+
# Defect behavior
|
|
190
|
+
'defect_type': 1, # 1 = trapping defects, 2 = blocking defects (required only if n_defects > 0 )
|
|
191
|
+
|
|
192
|
+
# Kinetic prefactor
|
|
193
|
+
'k_0': 1,
|
|
194
|
+
|
|
195
|
+
# Diffusion energy barriers on stoichiometric sites along defferent directions (eV)
|
|
196
|
+
'energy_barrier_north': 0.46,
|
|
197
|
+
'energy_barrier_south': 0.46,
|
|
198
|
+
'energy_barrier_northeast': 0.65,
|
|
199
|
+
'energy_barrier_northwest': 0.65,
|
|
200
|
+
'energy_barrier_southeast': 0.65,
|
|
201
|
+
'energy_barrier_southwest': 0.65,
|
|
202
|
+
|
|
203
|
+
# Trapping defect energy barriers (required only if n_defects > 0 and defect_type == 1)
|
|
204
|
+
'energy_barrier_trapping_defect_north': 1.2,
|
|
205
|
+
'energy_barrier_trapping_defect_south': 1.2,
|
|
206
|
+
'energy_barrier_trapping_defect_east': 1.1,
|
|
207
|
+
'energy_barrier_trapping_defect_west': 1.1,
|
|
208
|
+
'energy_barrier_trapping_defect_northeast': 1.1,
|
|
209
|
+
'energy_barrier_trapping_defect_northwest': 1.1,
|
|
210
|
+
'energy_barrier_trapping_defect_southeast': 1.1,
|
|
211
|
+
'energy_barrier_trapping_defect_southwest': 1.1,
|
|
212
|
+
|
|
213
|
+
# Blocking defect energy barriers (required only if n_defects > 0 and defect_type == 2)
|
|
214
|
+
'energy_barrier_blocking_defect_north': 1.2,
|
|
215
|
+
'energy_barrier_blocking_defect_south': 1.2,
|
|
216
|
+
'energy_barrier_blocking_defect_northeast': 1.2,
|
|
217
|
+
'energy_barrier_blocking_defect_northwest': 1.2,
|
|
218
|
+
'energy_barrier_blocking_defect_southeast': 1.2,
|
|
219
|
+
'energy_barrier_blocking_defect_southwest': 1.2,
|
|
220
|
+
|
|
221
|
+
# Adsorbate-related diffusion barriers (required only if n_adsorbates > 0)
|
|
222
|
+
'energy_barrier_adsorbate_north': 0.72,
|
|
223
|
+
'energy_barrier_adsorbate_south': 0.72,
|
|
224
|
+
'energy_barrier_adsorbate_northeast': 0.72,
|
|
225
|
+
'energy_barrier_adsorbate_northwest': 0.72,
|
|
226
|
+
'energy_barrier_adsorbate_southeast': 0.72,
|
|
227
|
+
'energy_barrier_adsorbate_southwest': 0.72
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
for i in range(n_seeds):
|
|
232
|
+
|
|
233
|
+
hexa_params['seed'] = i,
|
|
234
|
+
print(f'current random_seed = {i}')
|
|
235
|
+
|
|
236
|
+
KMC = hexa_kmc(**hexa_params)
|
|
237
|
+
|
|
238
|
+
time, msd = KMC.run(n_steps = 2500)
|
|
239
|
+
|
|
240
|
+
msd_path = f'random_seeds/msd/rs_{i}'
|
|
241
|
+
time_path = f'random_seeds/time/rs_{i}'
|
|
242
|
+
np.save(msd_path, msd)
|
|
243
|
+
np.save(time_path, time)
|
|
244
|
+
|
|
245
|
+
KMC.msd_histogram(n_seeds = n_seeds)
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Demo
|
|
249
|
+
|
|
250
|
+

|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
## License
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
XXX
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
kmclab-0.1.5/README.md
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# kmclab
|
|
2
|
+
|
|
3
|
+
A lightweight Python package for lattice-based kinetic Monte Carlo (KMC) utilities.
|
|
4
|
+
Currently includes simple hexagonal and square lattice KMC classes.
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
Install using pip
|
|
9
|
+
```
|
|
10
|
+
pip install kmclab
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
To upgrade to the latest version
|
|
14
|
+
```
|
|
15
|
+
pip install -U kmclab
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Or you may clone the repository and install in editable mode:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
git clone https://github.com/shirinasadix/kmclab.git
|
|
22
|
+
cd kmclab
|
|
23
|
+
pip install -e .
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
from kmclab import hex_kmc
|
|
30
|
+
|
|
31
|
+
GoombKMC = hex_kmc(n_atoms = 5, n_defects = 5, n_adsorbates = 2, lattice_size = 10, n_steps = 50)
|
|
32
|
+
|
|
33
|
+
GoombKMC.run()
|
|
34
|
+
|
|
35
|
+
GoombKMC.anim1panels(filename = 'wtf1')
|
|
36
|
+
|
|
37
|
+
GoombKMC.anim2panels(filename = 'ov10hy0')
|
|
38
|
+
|
|
39
|
+
GoombKMC.msdplot(filename = 'MSD_Trajectory')
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Package Structure
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
kmclab/
|
|
46
|
+
├── src/
|
|
47
|
+
│ └── kmclab/
|
|
48
|
+
│ ├── hexa.py
|
|
49
|
+
│ ├── square.py
|
|
50
|
+
│ └── __init__.py
|
|
51
|
+
├── tests/
|
|
52
|
+
├── pyproject.toml
|
|
53
|
+
└── README.md
|
|
54
|
+
```
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
### Square Lattice - Single Run
|
|
58
|
+
|
|
59
|
+
Here is the step by step guide:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
from square import square_kmc
|
|
63
|
+
```
|
|
64
|
+
Now to define system parameters:
|
|
65
|
+
```
|
|
66
|
+
square_params = {
|
|
67
|
+
|
|
68
|
+
# System composition
|
|
69
|
+
'n_atoms': 5, # Number of mobile adatoms
|
|
70
|
+
'n_defects': 5, # Number of surface defects
|
|
71
|
+
'n_adsorbates': 5, # Number of surface adsorbates
|
|
72
|
+
|
|
73
|
+
# Lattice and simulation control
|
|
74
|
+
'lattice_size': 10, # Linear size of the lattice
|
|
75
|
+
'T': 300, # Temperature (K)
|
|
76
|
+
'seed': 1, # Random number seed
|
|
77
|
+
|
|
78
|
+
'len_vertical' : 0.297e-3, # Vertical lattice hop distances (µm)
|
|
79
|
+
'len_horizontal' : 0.660e-3, # Horizontal lattice hop distances (µm)
|
|
80
|
+
'adsorbates_freq' : 3, # Adsorbate redistribution frequency (required only if n_adsorbates > 0) (-1 disables)
|
|
81
|
+
|
|
82
|
+
# Defect behavior
|
|
83
|
+
'defect_type': 1, # 1 = trapping defects, 2 = blocking defects (required only if n_defects > 0 )
|
|
84
|
+
|
|
85
|
+
# Kinetic prefactor
|
|
86
|
+
'k_0': 1,
|
|
87
|
+
|
|
88
|
+
# Diffusion energy barriers on stoichiometric sites along defferent directions (eV)
|
|
89
|
+
'energy_barrier_north' : 0.26,
|
|
90
|
+
'energy_barrier_south' : 0.26,
|
|
91
|
+
'energy_barrier_east' : 0.91,
|
|
92
|
+
'energy_barrier_west' : 0.91,
|
|
93
|
+
'energy_barrier_northeast' : 0.91,
|
|
94
|
+
'energy_barrier_northwest' : 0.91,
|
|
95
|
+
'energy_barrier_southeast' : 0.91,
|
|
96
|
+
'energy_barrier_southwest' : 0.91,
|
|
97
|
+
|
|
98
|
+
# Trapping defect energy barriers (required only if n_defects > 0 and defect_type == 1)
|
|
99
|
+
'energy_barrier_trapping_defect_north' : 0.99,
|
|
100
|
+
'energy_barrier_trapping_defect_south' : 0.99,
|
|
101
|
+
'energy_barrier_trapping_defect_northeast' : 0.99,
|
|
102
|
+
'energy_barrier_trapping_defect_northwest' : 0.99,
|
|
103
|
+
'energy_barrier_trapping_defect_southeast' : 0.99,
|
|
104
|
+
'energy_barrier_trapping_defect_southwest' : 0.99,
|
|
105
|
+
|
|
106
|
+
# Blocking defect energy barriers (required only if n_defects > 0 and defect_type == 2)
|
|
107
|
+
'energy_barrier_blocking_defect_north' : 0.99,
|
|
108
|
+
'energy_barrier_blocking_defect_south' : 0.99,
|
|
109
|
+
'energy_barrier_blocking_defect_east' : 0.99,
|
|
110
|
+
'energy_barrier_blocking_defect_west' :0.99,
|
|
111
|
+
'energy_barrier_blocking_defect_northeast' : 0.99,
|
|
112
|
+
'energy_barrier_blocking_defect_northwest' : 0.99,
|
|
113
|
+
'energy_barrier_blocking_defect_southeast' : 0.99,
|
|
114
|
+
'energy_barrier_blocking_defect_southwest' : 0.99,
|
|
115
|
+
|
|
116
|
+
# Adsorbate-related diffusion barriers (required only if n_adsorbates > 0)
|
|
117
|
+
'energy_barrier_adsorbate_north' : 0.72,
|
|
118
|
+
'energy_barrier_adsorbate_south' : 0.72,
|
|
119
|
+
'energy_barrier_adsorbate_east' : 0.72,
|
|
120
|
+
'energy_barrier_adsorbate_west' : 0.72,
|
|
121
|
+
'energy_barrier_adsorbate_northeast' : 0.72,
|
|
122
|
+
'energy_barrier_adsorbate_northwest' : 0.72,
|
|
123
|
+
'energy_barrier_adsorbate_southeast' : 0.72,
|
|
124
|
+
'energy_barrier_adsorbate_southwest' : 0.72}
|
|
125
|
+
```
|
|
126
|
+
Now to run the actual KMC:
|
|
127
|
+
```
|
|
128
|
+
KMC = square_kmc(**square_params)
|
|
129
|
+
|
|
130
|
+
KMC.run(n_steps = 30) # Total KMC steps (must be > 10)
|
|
131
|
+
```
|
|
132
|
+
Now to see the results you have multiple options:
|
|
133
|
+
```
|
|
134
|
+
KMC.anim1panel()
|
|
135
|
+
|
|
136
|
+
KMC.anim2panel()
|
|
137
|
+
|
|
138
|
+
KMC.msdplot()
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Hexagonal Lattice - Multi Run (Histograms)
|
|
142
|
+
|
|
143
|
+
Here is the step by step guide:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
from hexa import hexa_kmc
|
|
147
|
+
import numpy as np
|
|
148
|
+
from pathlib import Path
|
|
149
|
+
import shutil
|
|
150
|
+
|
|
151
|
+
rs_p = Path("random_seeds")
|
|
152
|
+
|
|
153
|
+
if rs_p.exists():
|
|
154
|
+
shutil.rmtree(rs_p)
|
|
155
|
+
|
|
156
|
+
(rs_p / "time").mkdir(parents=True)
|
|
157
|
+
(rs_p / "msd").mkdir(parents=True)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
n_seeds = 5 # Number of trials
|
|
161
|
+
|
|
162
|
+
hexa_params = {
|
|
163
|
+
# System composition
|
|
164
|
+
'n_atoms': 5, # Number of mobile adatoms
|
|
165
|
+
'n_defects': 5, # Number of surface defects
|
|
166
|
+
'n_adsorbates': 5, # Number of surface adsorbates
|
|
167
|
+
|
|
168
|
+
# Lattice and simulation control
|
|
169
|
+
'lattice_size': 10, # Linear size of the lattice
|
|
170
|
+
'T': 300, # Temperature (K)
|
|
171
|
+
'seed': 1, # Random number seed
|
|
172
|
+
|
|
173
|
+
'len_vertical' : 0.38e-3, # Vertical lattice hop distances (µm)
|
|
174
|
+
'len_horizontal' : 0.51e-3, # Horizontal lattice hop distances (µm)
|
|
175
|
+
'adsorbates_freq' : 3, # Adsorbate redistribution frequency (required only if n_adsorbates > 0) (-1 disables)
|
|
176
|
+
|
|
177
|
+
# Defect behavior
|
|
178
|
+
'defect_type': 1, # 1 = trapping defects, 2 = blocking defects (required only if n_defects > 0 )
|
|
179
|
+
|
|
180
|
+
# Kinetic prefactor
|
|
181
|
+
'k_0': 1,
|
|
182
|
+
|
|
183
|
+
# Diffusion energy barriers on stoichiometric sites along defferent directions (eV)
|
|
184
|
+
'energy_barrier_north': 0.46,
|
|
185
|
+
'energy_barrier_south': 0.46,
|
|
186
|
+
'energy_barrier_northeast': 0.65,
|
|
187
|
+
'energy_barrier_northwest': 0.65,
|
|
188
|
+
'energy_barrier_southeast': 0.65,
|
|
189
|
+
'energy_barrier_southwest': 0.65,
|
|
190
|
+
|
|
191
|
+
# Trapping defect energy barriers (required only if n_defects > 0 and defect_type == 1)
|
|
192
|
+
'energy_barrier_trapping_defect_north': 1.2,
|
|
193
|
+
'energy_barrier_trapping_defect_south': 1.2,
|
|
194
|
+
'energy_barrier_trapping_defect_east': 1.1,
|
|
195
|
+
'energy_barrier_trapping_defect_west': 1.1,
|
|
196
|
+
'energy_barrier_trapping_defect_northeast': 1.1,
|
|
197
|
+
'energy_barrier_trapping_defect_northwest': 1.1,
|
|
198
|
+
'energy_barrier_trapping_defect_southeast': 1.1,
|
|
199
|
+
'energy_barrier_trapping_defect_southwest': 1.1,
|
|
200
|
+
|
|
201
|
+
# Blocking defect energy barriers (required only if n_defects > 0 and defect_type == 2)
|
|
202
|
+
'energy_barrier_blocking_defect_north': 1.2,
|
|
203
|
+
'energy_barrier_blocking_defect_south': 1.2,
|
|
204
|
+
'energy_barrier_blocking_defect_northeast': 1.2,
|
|
205
|
+
'energy_barrier_blocking_defect_northwest': 1.2,
|
|
206
|
+
'energy_barrier_blocking_defect_southeast': 1.2,
|
|
207
|
+
'energy_barrier_blocking_defect_southwest': 1.2,
|
|
208
|
+
|
|
209
|
+
# Adsorbate-related diffusion barriers (required only if n_adsorbates > 0)
|
|
210
|
+
'energy_barrier_adsorbate_north': 0.72,
|
|
211
|
+
'energy_barrier_adsorbate_south': 0.72,
|
|
212
|
+
'energy_barrier_adsorbate_northeast': 0.72,
|
|
213
|
+
'energy_barrier_adsorbate_northwest': 0.72,
|
|
214
|
+
'energy_barrier_adsorbate_southeast': 0.72,
|
|
215
|
+
'energy_barrier_adsorbate_southwest': 0.72
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
for i in range(n_seeds):
|
|
220
|
+
|
|
221
|
+
hexa_params['seed'] = i,
|
|
222
|
+
print(f'current random_seed = {i}')
|
|
223
|
+
|
|
224
|
+
KMC = hexa_kmc(**hexa_params)
|
|
225
|
+
|
|
226
|
+
time, msd = KMC.run(n_steps = 2500)
|
|
227
|
+
|
|
228
|
+
msd_path = f'random_seeds/msd/rs_{i}'
|
|
229
|
+
time_path = f'random_seeds/time/rs_{i}'
|
|
230
|
+
np.save(msd_path, msd)
|
|
231
|
+
np.save(time_path, time)
|
|
232
|
+
|
|
233
|
+
KMC.msd_histogram(n_seeds = n_seeds)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Demo
|
|
237
|
+
|
|
238
|
+

|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
## License
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
XXX
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|