SAMBA-ilum 1.0.0.411__tar.gz → 1.0.0.413__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.
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/PKG-INFO +1 -1
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/SAMBA_ilum.egg-info/PKG-INFO +1 -1
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/SAMBA_ilum.egg-info/SOURCES.txt +1 -8
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/__main__.py +1 -1
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/data-base_json.py +7 -5
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/xy-scan_analysis.py +21 -14
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/setup.py +1 -1
- samba_ilum-1.0.0.411/samba_ilum/src/OLD/a-scan.py +0 -194
- samba_ilum-1.0.0.411/samba_ilum/src/OLD/a-scan_analysis.py +0 -115
- samba_ilum-1.0.0.411/samba_ilum/src/OLD/job.py +0 -298
- samba_ilum-1.0.0.411/samba_ilum/src/OLD/z-scan.py +0 -172
- samba_ilum-1.0.0.411/samba_ilum/src/OLD/z-scan_analysis.py +0 -108
- samba_ilum-1.0.0.411/samba_ilum/src/data-base_json [backup].py +0 -840
- samba_ilum-1.0.0.411/samba_ilum/src/xy-scan_analysis_old.py +0 -317
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/LICENSE.txt +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/README.md +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/SAMBA_ilum.egg-info/dependency_links.txt +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/SAMBA_ilum.egg-info/entry_points.txt +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/SAMBA_ilum.egg-info/requires.txt +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/SAMBA_ilum.egg-info/top_level.txt +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/__init__.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/HeteroStructure_Generator.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_a-scan +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_bader +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_bader.SO +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_bands +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_bands.SO +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_dos +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_dos.SO +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_relax +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_scf +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_scf.SO +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_xy-scan +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_xyz-scan +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/INCAR_z-scan +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/SAMBA_HeteroStructure.input +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/SAMBA_WorkFlow.input +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.bands +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.chgcar +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.dos +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.location +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.locpot +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.orbitals +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.spin +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/INPUTS/vdw_kernel.bindat +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/_info_pseudo.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/a-scan.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/a-scan_analysis.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/bader +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/bader_poscar.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/bader_update.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/charge_transfer.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/chgsum.pl +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/contcar_update.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/data-base_union.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/energy_scan.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/job.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/kpoints.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/lattice_plot3d.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/make_files.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/output.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/potcar.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/vdW_DF.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/xy-scan.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/xyz-scan.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/xyz-scan_analysis.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/z-scan.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/samba_ilum/src/z-scan_analysis.py +0 -0
- {samba_ilum-1.0.0.411 → samba_ilum-1.0.0.413}/setup.cfg +0 -0
|
@@ -20,7 +20,6 @@ samba_ilum/src/bader_update.py
|
|
|
20
20
|
samba_ilum/src/charge_transfer.py
|
|
21
21
|
samba_ilum/src/chgsum.pl
|
|
22
22
|
samba_ilum/src/contcar_update.py
|
|
23
|
-
samba_ilum/src/data-base_json [backup].py
|
|
24
23
|
samba_ilum/src/data-base_json.py
|
|
25
24
|
samba_ilum/src/data-base_union.py
|
|
26
25
|
samba_ilum/src/energy_scan.py
|
|
@@ -33,7 +32,6 @@ samba_ilum/src/potcar.py
|
|
|
33
32
|
samba_ilum/src/vdW_DF.py
|
|
34
33
|
samba_ilum/src/xy-scan.py
|
|
35
34
|
samba_ilum/src/xy-scan_analysis.py
|
|
36
|
-
samba_ilum/src/xy-scan_analysis_old.py
|
|
37
35
|
samba_ilum/src/xyz-scan.py
|
|
38
36
|
samba_ilum/src/xyz-scan_analysis.py
|
|
39
37
|
samba_ilum/src/z-scan.py
|
|
@@ -60,9 +58,4 @@ samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.dos
|
|
|
60
58
|
samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.location
|
|
61
59
|
samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.locpot
|
|
62
60
|
samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.orbitals
|
|
63
|
-
samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.spin
|
|
64
|
-
samba_ilum/src/OLD/a-scan.py
|
|
65
|
-
samba_ilum/src/OLD/a-scan_analysis.py
|
|
66
|
-
samba_ilum/src/OLD/job.py
|
|
67
|
-
samba_ilum/src/OLD/z-scan.py
|
|
68
|
-
samba_ilum/src/OLD/z-scan_analysis.py
|
|
61
|
+
samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.spin
|
|
@@ -425,8 +425,8 @@ for n in range(2):
|
|
|
425
425
|
direct_coord_ions = '--'; k_path = '--'
|
|
426
426
|
|
|
427
427
|
|
|
428
|
-
|
|
429
|
-
e_vbm = '--'; e_cbm = '--'; e_fermi = '--'; e_vacuum = '--'; work_function = '--'; total_energy = '--'; e_per_ion = '--'
|
|
428
|
+
#------------------------------------------------------------------------------------------------------------------------------------------------
|
|
429
|
+
e_vbm = '--'; e_cbm = '--'; e_fermi = '--'; e_vacuum = '--'; work_function = '--'; total_energy = '--'; e_per_ion = '--'; e_per_area = '--'
|
|
430
430
|
tk_vbm = '--'; tk_cbm = '--'; k_vbm = '--'; k_cbm = '--'
|
|
431
431
|
nk = '--'; nb = '--'; ne = '--'; ne_valence = '--'; vbm = '--'; cbm = '--'; charge_transfer = [];
|
|
432
432
|
gap = '--'; type_gap = '--'; k_vbm = []; k_cbm = []; lorbit = '--'; ispin = '--'
|
|
@@ -503,7 +503,7 @@ for n in range(2):
|
|
|
503
503
|
#----------------------------------------
|
|
504
504
|
elif (VTemp[0] == 'free'):
|
|
505
505
|
total_energy = float(VTemp[4])
|
|
506
|
-
e_per_ion = total_energy/ni
|
|
506
|
+
# e_per_ion = total_energy/ni
|
|
507
507
|
#----------------------------------------
|
|
508
508
|
elif (VTemp[0] == 'Volume_cell'): Volume_cell = float(VTemp[2])
|
|
509
509
|
#----------------------------------------
|
|
@@ -765,7 +765,8 @@ for n in range(2):
|
|
|
765
765
|
"e_vacuum": e_vacuum,
|
|
766
766
|
# "work_function": work_function,
|
|
767
767
|
"total_energy": total_energy,
|
|
768
|
-
"e_per_ion":
|
|
768
|
+
"e_per_ion": total_energy/ni,
|
|
769
|
+
"e_per_area": total_energy/Area_cell,
|
|
769
770
|
"e_binding": e_binding if n_materials > 1 else None,
|
|
770
771
|
"e_slide": e_slide if n_materials > 1 else None,
|
|
771
772
|
"charge_transfer": charge_transfer if n_materials > 1 else None,
|
|
@@ -792,7 +793,8 @@ for n in range(2):
|
|
|
792
793
|
"e_vacuum_SO": e_vacuum,
|
|
793
794
|
# "work_function_SO": work_function,
|
|
794
795
|
"total_energy_SO": total_energy,
|
|
795
|
-
"
|
|
796
|
+
"e_per_ion": total_energy/ni,
|
|
797
|
+
"e_per_area": total_energy/Area_cell,
|
|
796
798
|
"charge_transfer": charge_transfer if n_materials > 1 else None,
|
|
797
799
|
}
|
|
798
800
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
#-----------------
|
|
9
10
|
import numpy as np
|
|
10
11
|
import shutil
|
|
11
12
|
import os
|
|
@@ -23,6 +24,7 @@ import matplotlib.ticker as ticker
|
|
|
23
24
|
from mpl_toolkits.mplot3d.axes3d import Axes3D
|
|
24
25
|
from matplotlib.ticker import LinearLocator, FormatStrFormatter
|
|
25
26
|
import matplotlib.colors as mcolors
|
|
27
|
+
#----------------------------------
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
n_d = 301 # O dados do xy-scan serão interpolados para um grid de (n_d x n_d) pontos
|
|
@@ -99,9 +101,9 @@ for i in range(len(date_shift)):
|
|
|
99
101
|
for k in range(len(shift)):
|
|
100
102
|
t_shift_A1 = shift_A1 -a1_min +shift[j]
|
|
101
103
|
t_shift_A2 = shift_A2 -a2_min +shift[k]
|
|
102
|
-
if (t_shift_A1 >= 0.
|
|
103
|
-
if (t_shift_A2 >= 0.
|
|
104
|
-
file.write(f'{
|
|
104
|
+
if (t_shift_A1 >= -0.2 and t_shift_A1 <= 1.2):
|
|
105
|
+
if (t_shift_A2 >= -0.2 and t_shift_A2 <= 1.2):
|
|
106
|
+
file.write(f'{t_shift_A1}_{t_shift_A2} {(date_E[i]*1000)/Area} \n')
|
|
105
107
|
#-----------
|
|
106
108
|
file.close()
|
|
107
109
|
#-----------
|
|
@@ -115,8 +117,7 @@ file0.shape
|
|
|
115
117
|
#----------------------
|
|
116
118
|
date_shift = file0[:,0]
|
|
117
119
|
date_E = np.array(file0[:,1],dtype=float)
|
|
118
|
-
|
|
119
|
-
#---------------------
|
|
120
|
+
#----------------------------------------
|
|
120
121
|
|
|
121
122
|
|
|
122
123
|
#-------------------------------------
|
|
@@ -125,7 +126,7 @@ file = open('xy-scan_direct.dat', "w")
|
|
|
125
126
|
for i in range(len(date_shift)):
|
|
126
127
|
VTemp = str(date_shift[i])
|
|
127
128
|
VTemp = VTemp.replace('_', ' ')
|
|
128
|
-
file.write(f'{VTemp} {(
|
|
129
|
+
file.write(f'{VTemp} {(date_E[i]*1000)/Area} \n')
|
|
129
130
|
#-----------
|
|
130
131
|
file.close()
|
|
131
132
|
#-----------
|
|
@@ -139,7 +140,7 @@ for i in range(len(date_shift)):
|
|
|
139
140
|
VTemp = VTemp.replace('_', ' ').split()
|
|
140
141
|
Coord_X = ((float(VTemp[0])*A1x) + (float(VTemp[1])*A2x))
|
|
141
142
|
Coord_Y = ((float(VTemp[0])*A1y) + (float(VTemp[1])*A2y))
|
|
142
|
-
file.write(f'{Coord_X} {Coord_Y} {(
|
|
143
|
+
file.write(f'{Coord_X} {Coord_Y} {(date_E[i]*1000)/Area} \n')
|
|
143
144
|
#-----------
|
|
144
145
|
file.close()
|
|
145
146
|
#-----------
|
|
@@ -151,7 +152,7 @@ file.close()
|
|
|
151
152
|
label1 = '\u0394' + 'X' + ' (' + '\u212B' + ')'
|
|
152
153
|
label2 = '\u0394' + 'Y' + ' (' + '\u212B' + ')'
|
|
153
154
|
label3 = 'E-Emin' + ' (meV/' + '\u212B' + '\u00B2' + ')'
|
|
154
|
-
|
|
155
|
+
#-------------------------------------------------------
|
|
155
156
|
file2 = np.loadtxt('xy-scan_cartesian.dat')
|
|
156
157
|
file2.shape
|
|
157
158
|
#------------------
|
|
@@ -165,6 +166,7 @@ y = np.linspace(min(eixo2c), max(eixo2c), n_d)
|
|
|
165
166
|
x_grid, y_grid = np.meshgrid(x, y)
|
|
166
167
|
# Grid data:
|
|
167
168
|
e2_grid = griddata((eixo1c, eixo2c), eixo3c, (x_grid, y_grid), method = 'cubic', fill_value=np.nan)
|
|
169
|
+
#--------------------------------------------------------------------------------------------------
|
|
168
170
|
|
|
169
171
|
|
|
170
172
|
#============================================================
|
|
@@ -178,11 +180,12 @@ E_min = e2_grid[min_idx] # Encontrando o
|
|
|
178
180
|
# print(min_idx, delta_X, delta_Y, E_min)
|
|
179
181
|
#----------------------------------------
|
|
180
182
|
fig = go.Figure()
|
|
181
|
-
fig.add_trace(go.Surface(x = x_grid, y = y_grid, z = e2_grid, name = 'xy-scan', opacity = 0.8, showscale = False, colorscale='jet'))
|
|
183
|
+
fig.add_trace(go.Surface(x = x_grid, y = y_grid, z = (e2_grid -E_min), name = 'xy-scan', opacity = 0.8, showscale = False, colorscale='jet'))
|
|
182
184
|
fig.update_layout(title = 'xy-scan', scene = dict(xaxis_title = label1, yaxis_title = label2, zaxis_title = label3, aspectmode = 'cube'), margin = dict(r = 20, b = 10, l = 10, t = 10))
|
|
183
185
|
fig.update_layout(xaxis_range=[min(eixo1c), max(eixo1c)])
|
|
184
186
|
fig.update_layout(yaxis_range=[min(eixo2c), max(eixo2c)])
|
|
185
187
|
fig.write_html('xy-scan_3D_cartesian.html')
|
|
188
|
+
#------------------------------------------
|
|
186
189
|
|
|
187
190
|
|
|
188
191
|
#===========================================================================
|
|
@@ -204,9 +207,10 @@ for m in range(3):
|
|
|
204
207
|
# f[m] = round(f[m], 6)
|
|
205
208
|
if (f[m] > 0.9999 or f[m] < 0.0001):
|
|
206
209
|
f[m] = 0.0
|
|
207
|
-
|
|
210
|
+
#---------------------
|
|
208
211
|
delta_A1 = float(f[0])
|
|
209
212
|
delta_A2 = float(f[1])
|
|
213
|
+
#---------------------
|
|
210
214
|
|
|
211
215
|
|
|
212
216
|
#=======================================================
|
|
@@ -220,9 +224,11 @@ mod_y = abs(max(eixo2c) -min(eixo2c))
|
|
|
220
224
|
cmap_gray = (mpl.colors.ListedColormap(['darkgray', 'darkgray']))
|
|
221
225
|
#-----------------------
|
|
222
226
|
fig, ax = plt.subplots()
|
|
223
|
-
cp = plt.contourf(x_grid, y_grid, e2_grid, levels = n_contour, cmap = 'jet', alpha = 1.0, antialiased = True)
|
|
227
|
+
cp = plt.contourf(x_grid, y_grid, (e2_grid -E_min), levels = n_contour, cmap = 'jet', alpha = 1.0, antialiased = True)
|
|
224
228
|
plt.quiver(0, 0, A1x, A1y, angles='xy', scale_units='xy', scale=1, color='black', label='A$_1$')
|
|
225
229
|
plt.quiver(0, 0, A2x, A2y, angles='xy', scale_units='xy', scale=1, color='black', label='A$_2$')
|
|
230
|
+
plt.plot([A1x, (A1x+A2x)], [A1y, (A1y+A2y)], color = 'black', linewidth = 1.0, zorder=3)
|
|
231
|
+
plt.plot([A2x, (A1x+A2x)], [A2y, (A1y+A2y)], color = 'black', linewidth = 1.0, zorder=3)
|
|
226
232
|
plt.text((A1x/2), (A1y/2), "A$_1$", fontsize=10, color="black")
|
|
227
233
|
plt.text((A2x/2), (A2y/2), "A$_2$", fontsize=10, color="black")
|
|
228
234
|
# plt.scatter(delta_X, delta_Y, c='black', marker='o', s=2)
|
|
@@ -235,17 +241,18 @@ plt.ylabel('$\Delta$Y' + '$\ ({\AA})$')
|
|
|
235
241
|
cbar.set_label('$E-E_{min}\ $(meV/${\AA^2})$')
|
|
236
242
|
#---------------------------------------------
|
|
237
243
|
ax.set_box_aspect(mod_y/mod_x)
|
|
238
|
-
|
|
244
|
+
#-----------------------------------------------------------------------------------
|
|
239
245
|
plt.savefig('xy-scan_cartesian.png', dpi = 600, bbox_inches='tight', pad_inches = 0)
|
|
240
246
|
# plt.savefig('xy-scan_cartesian.pdf', dpi = 600, bbox_inches='tight', pad_inches = 0)
|
|
241
247
|
# plt.savefig('xy-scan_cartesian.eps', dpi = 600, bbox_inches='tight', pad_inches = 0)
|
|
242
248
|
# plt.savefig('xy-scan_cartesian.svg', dpi = 600, bbox_inches='tight', pad_inches = 0)
|
|
249
|
+
#-------------------------------------------------------------------------------------
|
|
243
250
|
|
|
244
251
|
|
|
245
|
-
|
|
252
|
+
#------------------------------------------------
|
|
246
253
|
shutil.copyfile(str(delta) + '/POSCAR', 'POSCAR')
|
|
247
254
|
shutil.copyfile(str(delta) + '/CONTCAR', 'CONTCAR')
|
|
248
|
-
|
|
255
|
+
#--------------------------------------------------
|
|
249
256
|
|
|
250
257
|
|
|
251
258
|
#=====================================================
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
# SAMBA_ilum Copyright (C) 2024 - Closed source
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import numpy as np
|
|
5
|
-
import shutil
|
|
6
|
-
import os
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
passo = replace_passo # Variação no módulo do vetores de rede em Angs.
|
|
10
|
-
range = replace_range # Range de variação (em Angs.) com relação ao parâmetro de rede [param -range, param +range]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"""
|
|
14
|
-
#----------------------------------------------------------------
|
|
15
|
-
# Testando a compatibilidade do arquivo POSCAR ------------------
|
|
16
|
-
#----------------------------------------------------------------
|
|
17
|
-
poscar = open('POSCAR', "r")
|
|
18
|
-
VTemp = poscar.readline().split()
|
|
19
|
-
poscar.close()
|
|
20
|
-
#-------------
|
|
21
|
-
crit = 0
|
|
22
|
-
for k in range(len(VTemp)):
|
|
23
|
-
try:
|
|
24
|
-
inteiro = int(VTemp[k])
|
|
25
|
-
if (k > 0 and k < 3): crit += 1
|
|
26
|
-
except ValueError:
|
|
27
|
-
if (k == 0): crit += 1
|
|
28
|
-
#------------------------------
|
|
29
|
-
if (len(VTemp) < 3 or crit < 3):
|
|
30
|
-
print(f' ')
|
|
31
|
-
print(f'========================================')
|
|
32
|
-
print(f'Verifique o arquivo POSCAR utilizado! ')
|
|
33
|
-
print(f'INCOMPATIBILIDADE com o código detectada')
|
|
34
|
-
print(f'========================================')
|
|
35
|
-
print(f' ')
|
|
36
|
-
#==========
|
|
37
|
-
sys.exit()
|
|
38
|
-
#=========
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
#==========================================================================
|
|
43
|
-
# Obtendo os vetores de rede da Heteroestrutura ===========================
|
|
44
|
-
#==========================================================================
|
|
45
|
-
contcar = open('CONTCAR', "r")
|
|
46
|
-
#-----------------------------
|
|
47
|
-
VTemp = contcar.readline()
|
|
48
|
-
VTemp = contcar.readline(); param = float(VTemp)
|
|
49
|
-
VTemp = contcar.readline().split(); A1x = float(VTemp[0])*param; A1y = float(VTemp[1])*param; A1z = float(VTemp[2])*param
|
|
50
|
-
VTemp = contcar.readline().split(); A2x = float(VTemp[0])*param; A2y = float(VTemp[1])*param; A2z = float(VTemp[2])*param
|
|
51
|
-
VTemp = contcar.readline().split(); A3x = float(VTemp[0])*param; A3y = float(VTemp[1])*param; A3z = float(VTemp[2])*param
|
|
52
|
-
VTemp = contcar.readline()
|
|
53
|
-
VTemp = contcar.readline().split(); nions = 0
|
|
54
|
-
for i in np.arange(len(VTemp)):
|
|
55
|
-
nions += int(VTemp[i])
|
|
56
|
-
#--------------
|
|
57
|
-
contcar.close()
|
|
58
|
-
#--------------
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
#==========================================================================
|
|
62
|
-
# Obtendo o fator percentual de multiplicação dos vetores de Rede =========
|
|
63
|
-
#==========================================================================
|
|
64
|
-
A1 = np.array([float(A1x), float(A1y), float(A1z)])*param; module_a1 = float(np.linalg.norm(A1))
|
|
65
|
-
A2 = np.array([float(A2x), float(A2y), float(A2z)])*param; module_a2 = float(np.linalg.norm(A2))
|
|
66
|
-
A3 = np.array([float(A3x), float(A3y), float(A3z)])*param; module_a3 = float(np.linalg.norm(A3))
|
|
67
|
-
#------------------------------------------------------------------------------------------------
|
|
68
|
-
if (module_a1 <= module_a2):
|
|
69
|
-
fator = ((module_a1 +passo)/module_a1) -1
|
|
70
|
-
vector = 'A1'
|
|
71
|
-
if (module_a2 < module_a1):
|
|
72
|
-
fator = ((module_a2 +passo)/module_a2) -1
|
|
73
|
-
vector = 'A2'
|
|
74
|
-
# if ((type_lattice = 3) and (module_a3 < module_a1) or (module_a3 < module_a2)):
|
|
75
|
-
# fator = ((module_a3 +passo)/module_a3) -1
|
|
76
|
-
# vector = 'A3'
|
|
77
|
-
#------------------------------------------------------------
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
n_passos = (range/passo)
|
|
81
|
-
#------------------------------------------------------------
|
|
82
|
-
if ((n_passos -int(n_passos)) == 0): n_passos = int(n_passos)
|
|
83
|
-
if ((n_passos -int(n_passos)) != 0): n_passos = int(n_passos) +1
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
n_passos = int(range/passo)
|
|
87
|
-
number = 0
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
#============================================================
|
|
91
|
-
# Gerando os arquivos POSCAR para cada valor de a (param) ===
|
|
92
|
-
#============================================================
|
|
93
|
-
|
|
94
|
-
for i in np.arange(1,(n_passos)+1):
|
|
95
|
-
#----------
|
|
96
|
-
number += 1
|
|
97
|
-
i = n_passos +1 -i
|
|
98
|
-
fator_new = float(1 -(i*fator))
|
|
99
|
-
#---------------------------------------------
|
|
100
|
-
dir_temp = str(fator_new); os.mkdir(dir_temp)
|
|
101
|
-
if os.path.isfile('vdw_kernel.bindat'): shutil.copyfile('vdw_kernel.bindat', dir_temp + '/vdw_kernel.bindat')
|
|
102
|
-
shutil.copyfile('contcar_update.py', dir_temp + '/contcar_update.py')
|
|
103
|
-
shutil.copyfile('energy_scan.py', dir_temp + '/energy_scan.py')
|
|
104
|
-
shutil.copyfile('KPOINTS', dir_temp + '/KPOINTS')
|
|
105
|
-
shutil.copyfile('POTCAR', dir_temp + '/POTCAR')
|
|
106
|
-
shutil.copyfile('INCAR', dir_temp + '/INCAR')
|
|
107
|
-
#--------------------------------------------
|
|
108
|
-
contcar = open('CONTCAR', "r")
|
|
109
|
-
poscar_new = open(dir_temp + '/POSCAR', "w")
|
|
110
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
111
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
112
|
-
#--------------------------------------------------------
|
|
113
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
114
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
115
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
116
|
-
#-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
117
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
118
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
119
|
-
VTemp = contcar.readline(); poscar_new.write(f'Direct \n')
|
|
120
|
-
#---------------------------------------------------------
|
|
121
|
-
for j in np.arange(nions):
|
|
122
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
123
|
-
#--------------
|
|
124
|
-
contcar.close()
|
|
125
|
-
poscar_new.close()
|
|
126
|
-
#-----------------
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
for i in np.arange(1,2):
|
|
130
|
-
#----------
|
|
131
|
-
number += 1
|
|
132
|
-
fator_new = 1.0
|
|
133
|
-
#---------------------------------------------
|
|
134
|
-
dir_temp = str(fator_new); os.mkdir(dir_temp)
|
|
135
|
-
if os.path.isfile('vdw_kernel.bindat'): shutil.copyfile('vdw_kernel.bindat', dir_temp + '/vdw_kernel.bindat')
|
|
136
|
-
shutil.copyfile('contcar_update.py', dir_temp + '/contcar_update.py')
|
|
137
|
-
shutil.copyfile('energy_scan.py', dir_temp + '/energy_scan.py')
|
|
138
|
-
shutil.copyfile('KPOINTS', dir_temp + '/KPOINTS')
|
|
139
|
-
shutil.copyfile('POTCAR', dir_temp + '/POTCAR')
|
|
140
|
-
shutil.copyfile('INCAR', dir_temp + '/INCAR')
|
|
141
|
-
#--------------------------------------------
|
|
142
|
-
contcar = open('CONTCAR', "r")
|
|
143
|
-
poscar_new = open(dir_temp + '/POSCAR', "w")
|
|
144
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
145
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
146
|
-
#--------------------------------------------------------
|
|
147
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
148
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
149
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
150
|
-
#-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
151
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
152
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
153
|
-
VTemp = contcar.readline(); poscar_new.write(f'Direct \n')
|
|
154
|
-
#----------------------------------------------------------
|
|
155
|
-
for j in np.arange(nions):
|
|
156
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
157
|
-
#--------------
|
|
158
|
-
contcar.close()
|
|
159
|
-
poscar_new.close()
|
|
160
|
-
#-----------------
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
for i in np.arange(1,(n_passos)+1):
|
|
164
|
-
#----------
|
|
165
|
-
number += 1
|
|
166
|
-
fator_new = float(1 +(i*fator))
|
|
167
|
-
#---------------------------------------------
|
|
168
|
-
dir_temp = str(fator_new); os.mkdir(dir_temp)
|
|
169
|
-
if os.path.isfile('vdw_kernel.bindat'): shutil.copyfile('vdw_kernel.bindat', dir_temp + '/vdw_kernel.bindat')
|
|
170
|
-
shutil.copyfile('contcar_update.py', dir_temp + '/contcar_update.py')
|
|
171
|
-
shutil.copyfile('energy_scan.py', dir_temp + '/energy_scan.py')
|
|
172
|
-
shutil.copyfile('KPOINTS', dir_temp + '/KPOINTS')
|
|
173
|
-
shutil.copyfile('POTCAR', dir_temp + '/POTCAR')
|
|
174
|
-
shutil.copyfile('INCAR', dir_temp + '/INCAR')
|
|
175
|
-
#--------------------------------------------
|
|
176
|
-
contcar = open('CONTCAR', "r")
|
|
177
|
-
poscar_new = open(dir_temp + '/POSCAR', "w")
|
|
178
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
179
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
180
|
-
#--------------------------------------------------------
|
|
181
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
182
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
183
|
-
VTemp = contcar.readline().split(); poscar_new.write(f'{float(VTemp[0])*fator_new} {float(VTemp[1])*fator_new} {float(VTemp[2])*fator_new} \n')
|
|
184
|
-
#-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
185
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
186
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
187
|
-
VTemp = contcar.readline(); poscar_new.write(f'Direct \n')
|
|
188
|
-
#----------------------------------------------------------
|
|
189
|
-
for j in np.arange(nions):
|
|
190
|
-
VTemp = contcar.readline(); poscar_new.write(f'{VTemp}')
|
|
191
|
-
#--------------
|
|
192
|
-
contcar.close()
|
|
193
|
-
poscar_new.close()
|
|
194
|
-
#-----------------
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# SAMBA_ilum Copyright (C) 2024 - Closed source
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
from scipy.interpolate import interp1d
|
|
5
|
-
import matplotlib.pyplot as plt
|
|
6
|
-
import numpy as np
|
|
7
|
-
import shutil
|
|
8
|
-
import os
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
#==========================================================================
|
|
12
|
-
# Obtendo os vetores de rede da Heteroestrutura ===========================
|
|
13
|
-
#==========================================================================
|
|
14
|
-
poscar = open('POSCAR.0', "r")
|
|
15
|
-
#-----------------------------
|
|
16
|
-
VTemp = poscar.readline()
|
|
17
|
-
VTemp = poscar.readline(); param = float(VTemp)
|
|
18
|
-
VTemp = poscar.readline().split(); A1x = float(VTemp[0])*param; A1y = float(VTemp[1])*param; A1z = float(VTemp[2])*param
|
|
19
|
-
VTemp = poscar.readline().split(); A2x = float(VTemp[0])*param; A2y = float(VTemp[1])*param; A2z = float(VTemp[2])*param
|
|
20
|
-
VTemp = poscar.readline().split(); A3x = float(VTemp[0])*param; A3y = float(VTemp[1])*param; A3z = float(VTemp[2])*param
|
|
21
|
-
VTemp = poscar.readline()
|
|
22
|
-
VTemp = poscar.readline().split(); nions = 0
|
|
23
|
-
for i in np.arange(len(VTemp)):
|
|
24
|
-
nions += int(VTemp[i])
|
|
25
|
-
#-------------
|
|
26
|
-
poscar.close()
|
|
27
|
-
#-------------
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
#==========================================================================
|
|
31
|
-
# Obtendo o fator percentual de multiplicação dos vetores de Rede =========
|
|
32
|
-
#==========================================================================
|
|
33
|
-
A1 = np.array([float(A1x), float(A1y), float(A1z)])*param; module_a1 = float(np.linalg.norm(A1))
|
|
34
|
-
A2 = np.array([float(A2x), float(A2y), float(A2z)])*param; module_a2 = float(np.linalg.norm(A2))
|
|
35
|
-
A3 = np.array([float(A3x), float(A3y), float(A3z)])*param; module_a3 = float(np.linalg.norm(A3))
|
|
36
|
-
#------------------------------------------------------------------------------------------------
|
|
37
|
-
if (module_a1 <= module_a2):
|
|
38
|
-
param_initial = module_a1; vector = 'A1'
|
|
39
|
-
if (module_a2 < module_a1):
|
|
40
|
-
param_initial = module_a2; vector = 'A2'
|
|
41
|
-
#-------------------------------------------
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
#===================================================
|
|
45
|
-
# Extraindo informações ============================
|
|
46
|
-
#===================================================
|
|
47
|
-
shutil.copy('energy_scan.txt', 'a-scan.dat')
|
|
48
|
-
#-------------------------------------------
|
|
49
|
-
file0 = np.loadtxt('a-scan.dat')
|
|
50
|
-
file0.shape
|
|
51
|
-
#-------------------
|
|
52
|
-
date_a = file0[:,0]
|
|
53
|
-
date_E = file0[:,1]
|
|
54
|
-
#--------------------
|
|
55
|
-
E_min = min(date_E)
|
|
56
|
-
E_max = max(date_E)
|
|
57
|
-
delta_a = date_a[np.argmin(date_E)]
|
|
58
|
-
a_opt = delta_a*param_initial
|
|
59
|
-
#------------------------------
|
|
60
|
-
date_a = date_a*param_initial
|
|
61
|
-
f_min = min(date_a)
|
|
62
|
-
f_max = max(date_a)
|
|
63
|
-
|
|
64
|
-
#--------------------------------------------------
|
|
65
|
-
shutil.copyfile(str(delta_a) + '/POSCAR', 'POSCAR')
|
|
66
|
-
shutil.copyfile(str(delta_a) + '/CONTCAR', 'CONTCAR')
|
|
67
|
-
#----------------------------------------------------
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"""
|
|
71
|
-
#=======================================
|
|
72
|
-
# Interpolando os dados do a-scan ======
|
|
73
|
-
#=======================================
|
|
74
|
-
n_d = 250
|
|
75
|
-
#--------
|
|
76
|
-
f = interp1d(date_a, date_E, kind='cubic')
|
|
77
|
-
x_interp = np.linspace(f_min, f_max, n_d)
|
|
78
|
-
y_interp = f(x_interp)
|
|
79
|
-
"""
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
#===================================================
|
|
83
|
-
# Plot 2D ==========================================
|
|
84
|
-
#===================================================
|
|
85
|
-
fig, ax = plt.subplots()
|
|
86
|
-
plt.plot([a_opt, a_opt], [-1000.0, +1000.0], color = 'red', linestyle = '--', linewidth = 1.0, alpha = 1.0)
|
|
87
|
-
# plt.plot(x_interp, y_interp, color = 'black', linestyle = '-', linewidth = 1.0)
|
|
88
|
-
plt.plot(date_a, date_E, color = 'black', linestyle = '-', linewidth = 1.0)
|
|
89
|
-
plt.scatter(date_a, date_E, s=5, color = 'black')
|
|
90
|
-
plt.title('$a$-scan', fontsize=10)
|
|
91
|
-
plt.xlim((f_min, f_max))
|
|
92
|
-
#------------------------------
|
|
93
|
-
delta_E = abs(E_max -E_min)*0.1
|
|
94
|
-
#------------------------------
|
|
95
|
-
plt.ylim((E_min -delta_E, E_max +delta_E))
|
|
96
|
-
plt.xlabel('$a_{optimized}$(${\AA}$)')
|
|
97
|
-
plt.ylabel('$E(eV)$')
|
|
98
|
-
ax.set_box_aspect(1.25/1)
|
|
99
|
-
#----------------------------------------------------------------------
|
|
100
|
-
plt.savefig('a-scan.png', dpi = 600, bbox_inches='tight', pad_inches=0)
|
|
101
|
-
# plt.savefig('a-scan.pdf', dpi = 600, bbox_inches='tight', pad_inches=0)
|
|
102
|
-
# plt.savefig('a-scan.svg', dpi = 600, bbox_inches='tight', pad_inches=0)
|
|
103
|
-
# plt.savefig('a-scan.eps', dpi = 600, bbox_inches='tight', pad_inches=0)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
#=====================================================
|
|
107
|
-
info = open('info_a-scan.dat', "w", encoding='utf-8')
|
|
108
|
-
info.write(f'============================================================================== \n')
|
|
109
|
-
info.write(f'Optimized lattice parameter: a = {a_opt} Å\n')
|
|
110
|
-
info.write(f'------------------------------------------------------------------------------ \n')
|
|
111
|
-
info.write(f'a_initial = {param_initial} Å (|{vector}|); multiplication factor = {delta_a} \n')
|
|
112
|
-
info.write(f'============================================================================== \n')
|
|
113
|
-
info.close()
|
|
114
|
-
#===========
|
|
115
|
-
|