SAMBA-ilum 1.0.0.397__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.397 → SAMBA_ilum-1.0.0.399}/PKG-INFO +1 -1
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/PKG-INFO +1 -1
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/SOURCES.txt +2 -1
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/__main__.py +1 -1
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_a-scan +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bader +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bands +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_dos +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_relax +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_scf +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_xy-scan +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_xyz-scan +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_z-scan +1 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/SAMBA_WorkFlow.input +3 -3
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/job.py +5 -5
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/make_files.py +2 -2
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/xy-scan.py +2 -2
- {SAMBA_ilum-1.0.0.397 → 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.397 → SAMBA_ilum-1.0.0.399}/setup.py +1 -1
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/LICENSE.txt +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/README.md +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/dependency_links.txt +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/entry_points.txt +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/requires.txt +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/SAMBA_ilum.egg-info/top_level.txt +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/__init__.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/HeteroStructure_Generator.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bader.SO +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_bands.SO +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_dos.SO +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/INCAR_scf.SO +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/SAMBA_HeteroStructure.input +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.bands +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.chgcar +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.dos +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.location +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.locpot +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.orbitals +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/inputs_VASProcar/input.vasprocar.spin +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/INPUTS/vdw_kernel.bindat +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/a-scan.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/a-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/job.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/z-scan.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/OLD/z-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/_info_pseudo.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/a-scan.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/a-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/bader +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/bader_poscar.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/bader_update.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/charge_transfer.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/chgsum.pl +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/contcar_update.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/data-base_json.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/data-base_union.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/energy_scan.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/kpoints.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/lattice_plot3d.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/output.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/potcar.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/vdW_DF.py +0 -0
- /SAMBA_ilum-1.0.0.397/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.397/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.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/z-scan.py +0 -0
- {SAMBA_ilum-1.0.0.397 → SAMBA_ilum-1.0.0.399}/samba_ilum/src/z-scan_analysis.py +0 -0
- {SAMBA_ilum-1.0.0.397 → 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')
|
|
@@ -123,15 +123,15 @@ job.write(f' #------------------------ \n')
|
|
|
123
123
|
job.write(f' for k in "{folders2}"; do \n')
|
|
124
124
|
job.write(f' cd $dir0/$i/$j/$k \n')
|
|
125
125
|
job.write(f' $vasp_std \n')
|
|
126
|
-
job.write(f' rm -r CHG CHGCAR DOSCAR PROCAR WAVECAR EIGENVAL IBZKPT vasprun.xml \n')
|
|
127
126
|
job.write(f' python3 contcar_update.py \n')
|
|
128
127
|
job.write(f' python3 energy_scan.py \n')
|
|
128
|
+
job.write(f' rm -r CHG CHGCAR DOSCAR PROCAR WAVECAR INCAR KPOINTS OSZICAR PCDAT POTCAR REPORT XDATCAR vdw_kernel.bindat EIGENVAL IBZKPT vasprun.xml *.py \n')
|
|
129
129
|
job.write(f' bzip2 OUTCAR \n')
|
|
130
130
|
job.write(f' done \n')
|
|
131
131
|
job.write(f' #------------- \n')
|
|
132
132
|
job.write(f' cd $dir0/$i/$j \n')
|
|
133
133
|
job.write(" python3 ${j}_analysis.py \n")
|
|
134
|
-
job.write(" rm -r 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* \n")
|
|
134
|
+
job.write(" # rm -r 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* \n")
|
|
135
135
|
job.write(f' #----------------------- \n')
|
|
136
136
|
job.write(f' for k in "{tasks2}"; do \n')
|
|
137
137
|
job.write(f' #----------------------------------------------------- \n')
|
|
@@ -166,9 +166,9 @@ job.write(" prefixo=${k:0:3} \n")
|
|
|
166
166
|
job.write(f' if [ "$prefixo" != "OK_" ]; then \n')
|
|
167
167
|
job.write(f' cd $dir0/$i/$j/$k \n')
|
|
168
168
|
job.write(f' $vasp_std \n')
|
|
169
|
-
job.write(f' rm -r CHG CHGCAR DOSCAR PROCAR WAVECAR EIGENVAL IBZKPT vasprun.xml \n')
|
|
170
169
|
job.write(f' python3 contcar_update.py \n')
|
|
171
170
|
job.write(f' python3 energy_scan.py \n')
|
|
171
|
+
job.write(f' rm -r CHG CHGCAR DOSCAR PROCAR WAVECAR INCAR KPOINTS OSZICAR PCDAT POTCAR REPORT XDATCAR vdw_kernel.bindat EIGENVAL IBZKPT vasprun.xml *.py \n')
|
|
172
172
|
job.write(f' bzip2 OUTCAR \n')
|
|
173
173
|
job.write(f' cd $dir0/$i/$j \n')
|
|
174
174
|
job.write(f' mv $k OK_$k \n')
|
|
@@ -188,7 +188,7 @@ job.write(" new_name=${k:3} \n")
|
|
|
188
188
|
job.write(f' mv "$k" "$new_name" \n')
|
|
189
189
|
job.write(f' done \n')
|
|
190
190
|
job.write(" python3 ${j}_analysis.py \n")
|
|
191
|
-
job.write(" rm -r 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* \n")
|
|
191
|
+
job.write(" # rm -r 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* \n")
|
|
192
192
|
job.write(f' #----------------------- \n')
|
|
193
193
|
job.write(f' for k in "{tasks2}"; do \n')
|
|
194
194
|
job.write(f' #-------------------------------------------------- \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
|
{SAMBA_ilum-1.0.0.397 → 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
|