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 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
+ ![demo](wtf1.gif)
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
+ ![demo](wtf1.gif)
239
+
240
+
241
+ ## License
242
+
243
+ ```
244
+ XXX
245
+ ```
246
+
247
+
248
+
249
+
250
+
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "kmclab"
7
- version = "0.1.4"
7
+ version = "0.1.5"
8
8
  description = "Hex and square lattice KMC classes."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -0,0 +1,5 @@
1
+ from .hexa import hexa_kmc
2
+ from .square import square_kmc
3
+
4
+ __all__ = ["hexa_kmc", "square_kmc"]
5
+ __version__ = "0.1.0"