SAMBA-ilum 1.0.0.398__tar.gz → 1.0.0.399__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.398 → SAMBA_ilum-1.0.0.399}/PKG-INFO +1 -1
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/PKG-INFO +1 -1
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/SOURCES.txt +2 -1
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/__main__.py +1 -1
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/SAMBA_WorkFlow.input +3 -3
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/job.py +1 -1
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/make_files.py +2 -2
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/xy-scan.py +2 -2
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/xy-scan_analysis.py +5 -3
- SAMBA_ilum-1.0.0.399/samba_ilum/src/xyz-scan.py +300 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/setup.py +1 -1
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/LICENSE.txt +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/README.md +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/dependency_links.txt +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/entry_points.txt +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/requires.txt +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/top_level.txt +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/__init__.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/HeteroStructure_Generator.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_a-scan +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bader +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bader.SO +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bands +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bands.SO +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_dos +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_dos.SO +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_relax +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_scf +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_scf.SO +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_xy-scan +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_xyz-scan +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_z-scan +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/SAMBA_HeteroStructure.input +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.bands +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.chgcar +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.dos +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.location +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.locpot +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.orbitals +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.spin +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/vdw_kernel.bindat +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/a-scan.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/a-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/job.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/z-scan.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/z-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/_info_pseudo.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/a-scan.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/a-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/bader +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/bader_poscar.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/bader_update.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/charge_transfer.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/chgsum.pl +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/contcar_update.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/data-base_json.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/data-base_union.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/energy_scan.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/kpoints.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/lattice_plot3d.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/output.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/potcar.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/vdW_DF.py +0 -0
- /SAMBA_ilum-1.0.0.398/samba_ilum/src/xyz-scan.py → /SAMBA_ilum-1.0.0.399/samba_ilum/src/xyz-scan - Copia.py +0 -0
- /SAMBA_ilum-1.0.0.398/samba_ilum/src/xyz-scan_analysis.py → /SAMBA_ilum-1.0.0.399/samba_ilum/src/xyz-scan_analysis - Copia.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/z-scan.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/z-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/setup.cfg +0 -0
|
@@ -32,8 +32,9 @@ samba_ilum/src/potcar.py
|
|
|
32
32
|
samba_ilum/src/vdW_DF.py
|
|
33
33
|
samba_ilum/src/xy-scan.py
|
|
34
34
|
samba_ilum/src/xy-scan_analysis.py
|
|
35
|
+
samba_ilum/src/xyz-scan - Copia.py
|
|
35
36
|
samba_ilum/src/xyz-scan.py
|
|
36
|
-
samba_ilum/src/xyz-scan_analysis.py
|
|
37
|
+
samba_ilum/src/xyz-scan_analysis - Copia.py
|
|
37
38
|
samba_ilum/src/z-scan.py
|
|
38
39
|
samba_ilum/src/z-scan_analysis.py
|
|
39
40
|
samba_ilum/src/INPUTS/INCAR_a-scan
|
|
@@ -62,9 +62,9 @@ k_dens_z_scan = 6 # Cálculo do z-scan: nº de pontos-k por Å-1
|
|
|
62
62
|
#============================
|
|
63
63
|
# Parâmetros xy-scan ========
|
|
64
64
|
#============================
|
|
65
|
-
k_dens_xy_scan = 6
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
k_dens_xy_scan = 6 # Cálculo do xy-scan: nº de pontos-k por Å-1
|
|
66
|
+
r_displacement_A1 = [0.0, (1/8), (1/6), (1/4), (1/3), (1/2), (2/3), (3/4), (5/6)] # Deslocamentos na direção do vetor A1 (2º material)
|
|
67
|
+
r_displacement_A2 = [0.0, (1/8), (1/6), (1/4), (1/3), (1/2), (2/3), (3/4), (5/6)] # Deslocamentos na direção do vetor A2 (2º material)
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
#============================
|
|
@@ -63,7 +63,7 @@ job.write(f'# module load vasp-6.2.0-gcc-9.3.0-epqgvat \n')
|
|
|
63
63
|
job.write(f'# vasp_std="{vasp_std_2}" \n')
|
|
64
64
|
job.write(f'# vasp_ncl="{vasp_ncl_2}" \n')
|
|
65
65
|
job.write(f' \n')
|
|
66
|
-
job.write(f'ttasks=( "xyz-scan" "
|
|
66
|
+
job.write(f'ttasks=( "xyz-scan" "z-scan" "xy-scan" "a-scan" "relax" "scf" "bands" "dos" "bader" "scf.SO" "bands.SO" "dos.SO" "bader.SO" ) \n')
|
|
67
67
|
job.write(f' \n')
|
|
68
68
|
job.write(f'#------------------------ \n')
|
|
69
69
|
job.write(f'if [ ! -d "$dir0/completed" ]; then \n')
|
|
@@ -203,8 +203,8 @@ for i in range(len(files)):
|
|
|
203
203
|
#===============================================================
|
|
204
204
|
# Atualizando o arquivo xy-scan.py =============================
|
|
205
205
|
#===============================================================
|
|
206
|
-
content = content.replace('
|
|
207
|
-
content = content.replace('
|
|
206
|
+
content = content.replace('replace_displacement_A1', str(r_displacement_A1))
|
|
207
|
+
content = content.replace('replace_displacement_A2', str(r_displacement_A2))
|
|
208
208
|
if (task[j] == 'xyz-scan'):
|
|
209
209
|
#===============================================================
|
|
210
210
|
# Atualizando o arquivo xyz-scan.py ============================
|
|
@@ -19,10 +19,10 @@ TALVEZ CRIAR UMA FUNÇÃO COM ESTE PROPOSITO SEJA PRATICO PARA O CODIGO TODO
|
|
|
19
19
|
#==========================================================================
|
|
20
20
|
|
|
21
21
|
# Deslocamentos a ser aplicado no 2º material, referente ao vetor A1 da rede
|
|
22
|
-
displacement_A1 =
|
|
22
|
+
displacement_A1 = replace_displacement_A1
|
|
23
23
|
|
|
24
24
|
# Deslocamentos a ser aplicado no 2º material, referente ao vetor A2 da rede
|
|
25
|
-
displacement_A2 =
|
|
25
|
+
displacement_A2 = replace_displacement_A2
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
"""
|
|
@@ -152,9 +152,9 @@ T = np.linalg.inv(np.array([a, b, c]).T) # Definindo a matriz de transformaçã
|
|
|
152
152
|
#------------------------------------------------------------------------------
|
|
153
153
|
r = np.array([delta_X, delta_Y, 0.0]) # Definindo o vetor posição cartesiano do átomo
|
|
154
154
|
#------------------------------------
|
|
155
|
-
f = np.dot(T, r) # Calculando a correspondenre posição em coordenadas fracionárias ??????????????????????? Esta correto ???????????????????????
|
|
156
|
-
for m in range(3): ?????????? Ao invés de 'f' não deveria ser 'f[m]' ??????????
|
|
157
|
-
f = np.where(f < 0, f + 1, f) ??????????????????????? Esta correto ???????????????????????
|
|
155
|
+
f = np.dot(T, r) # Calculando a correspondenre posição em coordenadas fracionárias # ??????????????????????? Esta correto ???????????????????????
|
|
156
|
+
for m in range(3): # ?????????? Ao invés de 'f' não deveria ser 'f[m]' ??????????
|
|
157
|
+
f = np.where(f < 0, f + 1, f) # ??????????????????????? Esta correto ???????????????????????
|
|
158
158
|
f = np.where(f > 1, f - 1, f)
|
|
159
159
|
#--------------------------------
|
|
160
160
|
for m in range(3):
|
|
@@ -180,6 +180,8 @@ fig, ax = plt.subplots()
|
|
|
180
180
|
cp = plt.contourf(x_grid, y_grid, e2_grid, levels = n_contour, cmap = 'jet', alpha = 1.0, antialiased = True)
|
|
181
181
|
plt.quiver(0, 0, A1x, A1y, angles='xy', scale_units='xy', scale=1, color='black', label='A$_1$')
|
|
182
182
|
plt.quiver(0, 0, A2x, A2y, angles='xy', scale_units='xy', scale=1, color='black', label='A$_2$')
|
|
183
|
+
plt.text((A1x/2), (A1y/2), "A$_1$", fontsize=10, color="black")
|
|
184
|
+
plt.text((A2x/2), (A2y/2), "A$_2$", fontsize=10, color="black")
|
|
183
185
|
# plt.scatter(delta_X, delta_Y, c='black', marker='o', s=2)
|
|
184
186
|
plt.scatter(x_min, y_min, c='black', marker='o', s=2)
|
|
185
187
|
cbar = fig.colorbar(cp, orientation = 'vertical', shrink = 1.0)
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# SAMBA_ilum Copyright (C) 2024 - Closed source
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
import shutil
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# Atenção: ================================================================
|
|
10
|
+
# O código foi escrito pensado em uma Heteroestrutura com n_Lattice = 2 ===
|
|
11
|
+
# Para redes com n_Lattice > 2 testes e generalizações devem ser feitas ===
|
|
12
|
+
#==========================================================================
|
|
13
|
+
|
|
14
|
+
# Vacuo mínimo aplicado a Heteroestrutura
|
|
15
|
+
vacuo = replace_vacuo
|
|
16
|
+
|
|
17
|
+
# Separação no eixo-z a ser aplicada entre os materiais da Heteroestrutura
|
|
18
|
+
z_scan = replace_zscan
|
|
19
|
+
|
|
20
|
+
# Deslocamentos a ser aplicado no 2º material, referente ao vetor A1 da rede
|
|
21
|
+
displacement_A1 = replace_displacement_xyz_A1
|
|
22
|
+
|
|
23
|
+
# Deslocamentos a ser aplicado no 2º material, referente ao vetor A2 da rede
|
|
24
|
+
displacement_A2 = replace_displacement_xyz_A2
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
#----------------------------------------------------------------
|
|
29
|
+
# Testando a compatibilidade do arquivo POSCAR ------------------
|
|
30
|
+
#----------------------------------------------------------------
|
|
31
|
+
poscar = open('POSCAR', "r")
|
|
32
|
+
VTemp = poscar.readline().split()
|
|
33
|
+
poscar.close()
|
|
34
|
+
#-------------
|
|
35
|
+
crit = 0
|
|
36
|
+
for k in range(len(VTemp)):
|
|
37
|
+
try:
|
|
38
|
+
inteiro = int(VTemp[k])
|
|
39
|
+
if (k > 0 and k < 3): crit += 1
|
|
40
|
+
except ValueError:
|
|
41
|
+
if (k == 0): crit += 1
|
|
42
|
+
#------------------------------
|
|
43
|
+
if (len(VTemp) < 3 or crit < 3):
|
|
44
|
+
print(f' ')
|
|
45
|
+
print(f'========================================')
|
|
46
|
+
print(f'Verifique o arquivo POSCAR utilizado! ')
|
|
47
|
+
print(f'INCOMPATIBILIDADE com o código detectada')
|
|
48
|
+
print(f'========================================')
|
|
49
|
+
print(f' ')
|
|
50
|
+
#==========
|
|
51
|
+
sys.exit()
|
|
52
|
+
#=========
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
#==========================================================================
|
|
57
|
+
# Obtendo os vetores de rede da Heteroestrutura ===========================
|
|
58
|
+
#==========================================================================
|
|
59
|
+
contcar = open('CONTCAR', "r")
|
|
60
|
+
#-----------------------------
|
|
61
|
+
VTemp = contcar.readline()
|
|
62
|
+
VTemp = contcar.readline(); param = float(VTemp)
|
|
63
|
+
VTemp = contcar.readline().split(); A1x = float(VTemp[0]); A1y = float(VTemp[1]); A1z = float(VTemp[2])
|
|
64
|
+
VTemp = contcar.readline().split(); A2x = float(VTemp[0]); A2y = float(VTemp[1]); A2z = float(VTemp[2])
|
|
65
|
+
VTemp = contcar.readline().split(); A3x = float(VTemp[0]); A3y = float(VTemp[1]); A3z = float(VTemp[2])
|
|
66
|
+
#--------------
|
|
67
|
+
contcar.close()
|
|
68
|
+
#--------------
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
#==========================================================================
|
|
72
|
+
# Obtendo a altura no eixo-z dos diferentes materiais =====================
|
|
73
|
+
#==========================================================================
|
|
74
|
+
contcar = open('CONTCAR', "r")
|
|
75
|
+
#--------------------------------
|
|
76
|
+
VTemp = contcar.readline().split()
|
|
77
|
+
n_Lattice = len(VTemp[1].replace('+', ' ').split())
|
|
78
|
+
nions_Lattice = []
|
|
79
|
+
for m in range(n_Lattice): nions_Lattice.append(int(VTemp[m+2]))
|
|
80
|
+
#----------------------------------------------------------------
|
|
81
|
+
VTemp = contcar.readline(); param = float(VTemp)
|
|
82
|
+
#----------------------------------------------------
|
|
83
|
+
for k in range(3): VTemp = contcar.readline().split()
|
|
84
|
+
fator_Z = float(VTemp[2])*param
|
|
85
|
+
#--------------------------------------------
|
|
86
|
+
for k in range(3): VTemp = contcar.readline()
|
|
87
|
+
#--------------------------------------------------------------
|
|
88
|
+
minZ = [0]*n_Lattice; dZ = [0]*(n_Lattice +1); dZ_total = 0.0
|
|
89
|
+
#--------------------------------------------------------------
|
|
90
|
+
for k in range(n_Lattice):
|
|
91
|
+
vZ = []
|
|
92
|
+
for m in range(nions_Lattice[k]):
|
|
93
|
+
VTemp = contcar.readline().split()
|
|
94
|
+
vZ.append(float(VTemp[2]))
|
|
95
|
+
#-----------------------------
|
|
96
|
+
dZ[k+1] = (max(vZ) - min(vZ))
|
|
97
|
+
dZ_total += dZ[k+1]*fator_Z
|
|
98
|
+
minZ[k] = min(vZ)
|
|
99
|
+
#--------------------
|
|
100
|
+
contcar.close()
|
|
101
|
+
#--------------
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
#==========================================================================
|
|
105
|
+
# Deslocando os materiais para Z = 0.0 ====================================
|
|
106
|
+
#==========================================================================
|
|
107
|
+
contcar = open('CONTCAR', "r")
|
|
108
|
+
poscar_new = open('POSCAR_temp', "w")
|
|
109
|
+
#------------------------------------
|
|
110
|
+
for k in range(8):
|
|
111
|
+
VTemp = contcar.readline()
|
|
112
|
+
poscar_new.write(f'{VTemp}')
|
|
113
|
+
for k in range(n_Lattice):
|
|
114
|
+
for m in range(nions_Lattice[k]):
|
|
115
|
+
VTemp = contcar.readline().split()
|
|
116
|
+
temp_z = float(VTemp[2]) -minZ[k] +dZ[k]
|
|
117
|
+
if (temp_z < 0.0): temp_z = 0.0
|
|
118
|
+
poscar_new.write(f'{float(VTemp[0])} {float(VTemp[1])} {temp_z} \n')
|
|
119
|
+
#-------------
|
|
120
|
+
contcar.close()
|
|
121
|
+
poscar_new.close()
|
|
122
|
+
#-----------------
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
#===========================================================
|
|
126
|
+
# Convertendo as coordenadas para a forma cartesiana =======
|
|
127
|
+
#===========================================================
|
|
128
|
+
poscar = open('POSCAR_temp', "r")
|
|
129
|
+
poscar_new = open('POSCAR_cart', "w")
|
|
130
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
131
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
132
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}'); VTemp = VTemp.split(); A = [float(VTemp[0]), float(VTemp[1]), float(VTemp[2])]
|
|
133
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}'); VTemp = VTemp.split(); B = [float(VTemp[0]), float(VTemp[1]), float(VTemp[2])]
|
|
134
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}'); VTemp = VTemp.split(); C = [float(VTemp[0]), float(VTemp[1]), float(VTemp[2])]
|
|
135
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
136
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
137
|
+
VTemp = poscar.readline(); poscar_new.write(f'Cartesian \n')
|
|
138
|
+
#-----------------------------------------------------------
|
|
139
|
+
# Escrita das coordenadas cartesianas ----------------------
|
|
140
|
+
#-----------------------------------------------------------
|
|
141
|
+
for k in range(n_Lattice):
|
|
142
|
+
for m in range(nions_Lattice[k]):
|
|
143
|
+
VTemp = poscar.readline().split()
|
|
144
|
+
k1 = float(VTemp[0]); k2 = float(VTemp[1]); k3 = float(VTemp[2])
|
|
145
|
+
coord_x = ((k1*A[0]) + (k2*B[0]) + (k3*C[0]))
|
|
146
|
+
coord_y = ((k1*A[1]) + (k2*B[1]) + (k3*C[1]))
|
|
147
|
+
coord_z = ((k1*A[2]) + (k2*B[2]) + (k3*C[2]))
|
|
148
|
+
poscar_new.write(f'{coord_x:>28,.21f} {coord_y:>28,.21f} {coord_z:>28,.21f} \n')
|
|
149
|
+
#-------------
|
|
150
|
+
poscar.close()
|
|
151
|
+
poscar_new.close()
|
|
152
|
+
#-----------------
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
for z in range(len(z_scan)):
|
|
156
|
+
#-----------------
|
|
157
|
+
deltaZ = z_scan[z]
|
|
158
|
+
#-----------------
|
|
159
|
+
|
|
160
|
+
#===========================================================
|
|
161
|
+
# Gerando os arquivos POSCAR para cada separação em Z ======
|
|
162
|
+
#===========================================================
|
|
163
|
+
poscar = open('POSCAR_cart', "r")
|
|
164
|
+
poscar_new = open('POSCAR_deltaZ', "w")
|
|
165
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
166
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
167
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}'); VTemp = VTemp.split(); A = [float(VTemp[0]), float(VTemp[1]), float(VTemp[2])]
|
|
168
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}'); VTemp = VTemp.split(); B = [float(VTemp[0]), float(VTemp[1]), float(VTemp[2])]
|
|
169
|
+
VTemp = poscar.readline().split(); C = [float(VTemp[0]), float(VTemp[1]), float(VTemp[2])]
|
|
170
|
+
#---------------------------------------------
|
|
171
|
+
# temp_Z = (dZ_total + deltaZ_f + vacuo)/param
|
|
172
|
+
temp_Z = (dZ_total + deltaZ + vacuo)/param; A3z = temp_Z
|
|
173
|
+
poscar_new.write(f'{float(VTemp[0]):>28,.21f} {float(VTemp[1]):>28,.21f} {float(temp_Z):>28,.21f} \n')
|
|
174
|
+
#-----------------------------------------------------------------------------------------------------
|
|
175
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
176
|
+
VTemp = poscar.readline(); poscar_new.write(f'{VTemp}')
|
|
177
|
+
VTemp = poscar.readline(); poscar_new.write(f'Cartesian \n')
|
|
178
|
+
#------------------------------------------------------------
|
|
179
|
+
for k in range(n_Lattice):
|
|
180
|
+
for m in range(nions_Lattice[k]):
|
|
181
|
+
VTemp = poscar.readline().split()
|
|
182
|
+
coord_x = float(VTemp[0]); coord_y = float(VTemp[1]); coord_z = float(VTemp[2])
|
|
183
|
+
#-------------------------------------------------------------------------------
|
|
184
|
+
coord_z = coord_z + (vacuo/2)
|
|
185
|
+
if (k > 0): coord_z = coord_z + deltaZ
|
|
186
|
+
poscar_new.write(f'{coord_x:>28,.21f} {coord_y:>28,.21f} {coord_z:>28,.21f} \n')
|
|
187
|
+
#-------------------------------------------------------------------------------
|
|
188
|
+
#-------------
|
|
189
|
+
poscar.close()
|
|
190
|
+
poscar_new.close()
|
|
191
|
+
#-----------------
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
#==========================================================================
|
|
195
|
+
# Gerando e Armazenando os arquivos POSCAR deslocados no plano ============
|
|
196
|
+
#==========================================================================
|
|
197
|
+
os.mkdir('POSCAR_temp_cart')
|
|
198
|
+
#---------------------------
|
|
199
|
+
number = 0
|
|
200
|
+
#---------
|
|
201
|
+
for ii in displacement_A1:
|
|
202
|
+
for jj in displacement_A2:
|
|
203
|
+
#-----------------------------------------------
|
|
204
|
+
displacement_X = (ii*A1x*param) + (jj*A2x*param)
|
|
205
|
+
displacement_Y = (ii*A1y*param) + (jj*A2y*param)
|
|
206
|
+
#-----------------------------------------------
|
|
207
|
+
number += 1
|
|
208
|
+
#---------------------------------
|
|
209
|
+
poscar = open('POSCAR_deltaZ', "r")
|
|
210
|
+
poscar_new = open('POSCAR_temp_cart/POSCAR_' + str(number), "w")
|
|
211
|
+
#---------------------------------------------------------------------------
|
|
212
|
+
VTemp = poscar.readline()
|
|
213
|
+
poscar_new.write(f'{VTemp}')
|
|
214
|
+
VTemp = VTemp.split()
|
|
215
|
+
nions1 = int(VTemp[2]); nions2 = int(VTemp[3])
|
|
216
|
+
#----------------------------------------------
|
|
217
|
+
for k in range(7 + nions1):
|
|
218
|
+
VTemp = poscar.readline()
|
|
219
|
+
poscar_new.write(f'{VTemp}')
|
|
220
|
+
#-------------------------------
|
|
221
|
+
for k in range(nions2):
|
|
222
|
+
VTemp = poscar.readline().split()
|
|
223
|
+
poscar_new.write(f'{float(VTemp[0]) + displacement_X} {float(VTemp[1]) + displacement_Y} {VTemp[2]} \n')
|
|
224
|
+
#-----------------------------------------------------------------------------------------------------------
|
|
225
|
+
poscar.close()
|
|
226
|
+
poscar_new.close()
|
|
227
|
+
#-----------------
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
#=============================================================================
|
|
231
|
+
# Convertendo as coordenadas dos arquivos POSCAR de cartesiano para direto ===
|
|
232
|
+
#=============================================================================
|
|
233
|
+
|
|
234
|
+
#---------
|
|
235
|
+
number = 0
|
|
236
|
+
#----------
|
|
237
|
+
a = np.array([A1x*param, A1y*param, A1z*param])
|
|
238
|
+
b = np.array([A2x*param, A2y*param, A2z*param])
|
|
239
|
+
c = np.array([A3x*param, A3y*param, A3z*param])
|
|
240
|
+
T = np.linalg.inv(np.array([a, b, c]).T) # Definindo a matriz de transformação
|
|
241
|
+
#------------------------------------------------------------------------------
|
|
242
|
+
|
|
243
|
+
for ii in displacement_A1:
|
|
244
|
+
for jj in displacement_A2:
|
|
245
|
+
#----------
|
|
246
|
+
number += 1
|
|
247
|
+
#---------------------------------
|
|
248
|
+
dir_temp = str(ii) + '_' + str(jj) + '_' + str(deltaZ)
|
|
249
|
+
os.mkdir(dir_temp)
|
|
250
|
+
if os.path.isfile('vdw_kernel.bindat'): shutil.copyfile('vdw_kernel.bindat', dir_temp + '/vdw_kernel.bindat')
|
|
251
|
+
shutil.copyfile('contcar_update.py', dir_temp + '/contcar_update.py')
|
|
252
|
+
shutil.copyfile('energy_scan.py', dir_temp + '/energy_scan.py')
|
|
253
|
+
shutil.copyfile('KPOINTS', dir_temp + '/KPOINTS')
|
|
254
|
+
shutil.copyfile('POTCAR', dir_temp + '/POTCAR')
|
|
255
|
+
shutil.copyfile('INCAR', dir_temp + '/INCAR')
|
|
256
|
+
#-----------------------------------------------------------
|
|
257
|
+
poscar = open('POSCAR_temp_cart/POSCAR_' + str(number), "r")
|
|
258
|
+
poscar_new = open(dir_temp + '/POSCAR', "w")
|
|
259
|
+
#-------------------------------------------
|
|
260
|
+
for k in range(7):
|
|
261
|
+
VTemp = poscar.readline()
|
|
262
|
+
poscar_new.write(f'{VTemp}')
|
|
263
|
+
#------------------------
|
|
264
|
+
VTemp = poscar.readline()
|
|
265
|
+
poscar_new.write(f'Direct \n')
|
|
266
|
+
|
|
267
|
+
#----------------------------------------------------------------------------------------------------
|
|
268
|
+
# Convertendo as posições atomicas cartesianas de todos os átomos da Supercélula para a forma direta,
|
|
269
|
+
# e ajustando as posições dos átomos que se encontram fora da célula.
|
|
270
|
+
#--------------------------------------------------------------------
|
|
271
|
+
for k in range(nions1 + nions2):
|
|
272
|
+
VTemp = poscar.readline().split()
|
|
273
|
+
x = float(VTemp[0])
|
|
274
|
+
y = float(VTemp[1])
|
|
275
|
+
z = float(VTemp[2])
|
|
276
|
+
#----------------------
|
|
277
|
+
r = np.array([x, y, z]) # Definindo o vetor posição cartesiano do átomo
|
|
278
|
+
#----------------------
|
|
279
|
+
f = np.dot(T, r) # Calculando a correspondenre posição em coordenadas fracionárias
|
|
280
|
+
for m in range(3):
|
|
281
|
+
f = np.where(f < 0, f + 1, f)
|
|
282
|
+
f = np.where(f > 1, f - 1, f)
|
|
283
|
+
#--------------------------------
|
|
284
|
+
for m in range(3):
|
|
285
|
+
# f[m] = round(f[m], 6)
|
|
286
|
+
if (f[m] > 0.9999 or f[m] < 0.0001):
|
|
287
|
+
f[m] = 0.0
|
|
288
|
+
poscar_new.write(f'{f[0]} {f[1]} {f[2]} \n')
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
#-------------
|
|
292
|
+
poscar.close()
|
|
293
|
+
poscar_new.close()
|
|
294
|
+
#------------------------
|
|
295
|
+
os.remove('POSCAR_deltaZ')
|
|
296
|
+
shutil.rmtree('POSCAR_temp_cart')
|
|
297
|
+
#------------------------------------
|
|
298
|
+
os.remove('POSCAR_temp')
|
|
299
|
+
os.remove('POSCAR_cart')
|
|
300
|
+
#-----------------------
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{SAMBA_ilum-1.0.0.398 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/SAMBA_HeteroStructure.input
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|