Twisted WS2 Bilayers#
import & prepare#
[2]:
!pip install git+https://github.com/nmdl-mizo/interface_master.git@develop
!mkdir -p cif_files
!curl https://raw.githubusercontent.com/nmdl-mizo/interface_master/develop/test_files/cif_files/WS2_mp-224_conventional_standard.cif -o 'cif_files/WS2_mp-224_conventional_standard.cif'
!curl https://raw.githubusercontent.com/nmdl-mizo/interface_master/develop/test_files/cif_files/WS2_single_layer.cif -o 'cif_files/WS2_single_layer.cif'
Defaulting to user installation because normal site-packages is not writeable
Collecting git+https://github.com/nmdl-mizo/interface_master.git@develop
Cloning https://github.com/nmdl-mizo/interface_master.git (to revision develop) to /tmp/pip-req-build-imt8qeri
Running command git clone --filter=blob:none --quiet https://github.com/nmdl-mizo/interface_master.git /tmp/pip-req-build-imt8qeri
Resolved https://github.com/nmdl-mizo/interface_master.git to commit f5666609400c80ae72c32471aeeaf5b80e4684e1
Preparing metadata (setup.py) ... done
Requirement already satisfied: pymatgen in /home/vscode/.local/lib/python3.10/site-packages (from interfacemaster==1.1.1) (2023.1.30)
Requirement already satisfied: matplotlib in /home/vscode/.local/lib/python3.10/site-packages (from interfacemaster==1.1.1) (3.7.0)
Requirement already satisfied: gb_code in /home/vscode/.local/lib/python3.10/site-packages (from interfacemaster==1.1.1) (1.0.0)
Requirement already satisfied: numpy>=1.14.0 in /home/vscode/.local/lib/python3.10/site-packages (from gb_code->interfacemaster==1.1.1) (1.24.2)
Requirement already satisfied: contourpy>=1.0.1 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (1.0.7)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (23.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (1.4.4)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (2.8.2)
Requirement already satisfied: pyparsing>=2.3.1 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (3.0.9)
Requirement already satisfied: pillow>=6.2.0 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (9.4.0)
Requirement already satisfied: cycler>=0.10 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (4.38.0)
Requirement already satisfied: ruamel.yaml>=0.17.0 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.17.21)
Requirement already satisfied: tabulate in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.9.0)
Requirement already satisfied: monty>=3.0.2 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (2022.9.9)
Requirement already satisfied: sympy in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (1.11.1)
Requirement already satisfied: uncertainties>=3.1.4 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (3.1.7)
Requirement already satisfied: pandas in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (1.5.3)
Requirement already satisfied: mp-api>=0.27.3 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.30.10)
Requirement already satisfied: palettable>=3.1.1 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (3.3.0)
Requirement already satisfied: plotly>=4.5.0 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (5.13.0)
Requirement already satisfied: pybtex in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.24.0)
Requirement already satisfied: networkx>=2.2 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (3.0)
Requirement already satisfied: tqdm in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (4.64.1)
Requirement already satisfied: scipy>=1.5.0 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (1.10.1)
Requirement already satisfied: spglib>=2.0.2 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (2.0.2)
Requirement already satisfied: requests in /usr/local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (2.28.2)
Requirement already satisfied: typing-extensions>=3.7.4.1 in /home/vscode/.local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (4.5.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (65.5.1)
Requirement already satisfied: msgpack in /home/vscode/.local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (1.0.4)
Requirement already satisfied: emmet-core>=0.39.8 in /home/vscode/.local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (0.44.0)
Requirement already satisfied: tenacity>=6.2.0 in /home/vscode/.local/lib/python3.10/site-packages (from plotly>=4.5.0->pymatgen->interfacemaster==1.1.1) (8.2.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib->interfacemaster==1.1.1) (1.16.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (2022.12.7)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (3.0.1)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (1.26.14)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (3.4)
Requirement already satisfied: ruamel.yaml.clib>=0.2.6 in /home/vscode/.local/lib/python3.10/site-packages (from ruamel.yaml>=0.17.0->pymatgen->interfacemaster==1.1.1) (0.2.7)
Requirement already satisfied: future in /home/vscode/.local/lib/python3.10/site-packages (from uncertainties>=3.1.4->pymatgen->interfacemaster==1.1.1) (0.18.3)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/site-packages (from pandas->pymatgen->interfacemaster==1.1.1) (2022.7.1)
Requirement already satisfied: latexcodec>=1.0.4 in /home/vscode/.local/lib/python3.10/site-packages (from pybtex->pymatgen->interfacemaster==1.1.1) (2.0.1)
Requirement already satisfied: PyYAML>=3.01 in /usr/local/lib/python3.10/site-packages (from pybtex->pymatgen->interfacemaster==1.1.1) (6.0)
Requirement already satisfied: mpmath>=0.19 in /home/vscode/.local/lib/python3.10/site-packages (from sympy->pymatgen->interfacemaster==1.1.1) (1.2.1)
Requirement already satisfied: pydantic>=1.10.2 in /home/vscode/.local/lib/python3.10/site-packages (from emmet-core>=0.39.8->mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (1.10.5)
[notice] A new release of pip available: 22.3.1 -> 23.0.1
[notice] To update, run: pip install --upgrade pip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 951 100 951 0 0 2962 0 --:--:-- --:--:-- --:--:-- 2962
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 799 100 799 0 0 1026 0 --:--:-- --:--:-- --:--:-- 1025
[2]:
from interfacemaster.cellcalc import get_primitive_hkl, get_pri_vec_inplane, get_normal_index, get_normal_from_MI, rot
from interfacemaster.interface_generator import core, convert_vector_index
from interfacemaster.symmetric_tilt import get_csl_twisted_graphenes
from numpy import array, dot, round, cross, eye, pi, ceil, column_stack, arange
from numpy.linalg import inv, det, norm
from gb_code.csl_generator import print_list
import pandas as pd
[3]:
from pymatgen.core.structure import Structure
Define a get_csl_twisted_graphenes class#
[4]:
#sigmas, rotation angles, CNID areas, num of atoms
sigmas, thetas, A_cnid, anum = get_csl_twisted_graphenes(lim = 10, filename = \
'cif_files/WS2_mp-224_conventional_standard.cif',\
maxsigma = 2500, verbose=False)
/home/vscode/.local/lib/python3.10/site-packages/pymatgen/io/cif.py:1169: UserWarning: Issues encountered while parsing CIF: Some fractional coordinates rounded to ideal values to avoid issues with finite precision.
warnings.warn("Issues encountered while parsing CIF: " + "\n".join(self.warnings))
[5]:
df = pd.DataFrame(column_stack((sigmas, thetas/pi*180, A_cnid, anum)), index = arange(len(sigmas))+1, \
columns = ['sigma','thetas','CNID area','atom number'])
df['sigma'] = df['sigma'].astype('int')
df['atom number'] = df['atom number'].astype('int')
df
[5]:
sigma | thetas | CNID area | atom number | |
---|---|---|---|---|
1 | 7 | 21.786789 | 1.259542 | 28 |
2 | 13 | 32.204228 | 0.678215 | 52 |
3 | 19 | 13.173551 | 0.464042 | 76 |
4 | 31 | 17.896551 | 0.284413 | 124 |
5 | 37 | 9.430008 | 0.238292 | 148 |
6 | 43 | 15.178179 | 0.205042 | 172 |
7 | 49 | 16.426421 | 0.179935 | 196 |
8 | 61 | 7.340993 | 0.144538 | 244 |
9 | 67 | 35.567302 | 0.131594 | 268 |
10 | 73 | 11.635051 | 0.120778 | 292 |
11 | 79 | 26.007824 | 0.111605 | 316 |
12 | 91 | 6.008983 | 0.096888 | 364 |
13 | 97 | 29.409311 | 0.090895 | 388 |
14 | 103 | 19.652860 | 0.085600 | 412 |
15 | 109 | 10.992733 | 0.080888 | 436 |
16 | 127 | 5.085848 | 0.069424 | 508 |
17 | 133 | 8.613238 | 0.066292 | 532 |
18 | 139 | 34.538944 | 0.063430 | 556 |
19 | 151 | 18.733998 | 0.058389 | 604 |
20 | 163 | 36.516938 | 0.054091 | 652 |
21 | 169 | 4.408455 | 0.052170 | 676 |
22 | 181 | 30.158276 | 0.048712 | 724 |
23 | 193 | 8.255621 | 0.045683 | 772 |
24 | 217 | 3.890238 | 0.040630 | 868 |
25 | 223 | 19.274807 | 0.039537 | 892 |
26 | 229 | 26.745652 | 0.038501 | 916 |
27 | 247 | 14.622221 | 0.035696 | 988 |
28 | 259 | 28.783203 | 0.034042 | 1036 |
29 | 271 | 3.481006 | 0.032534 | 1084 |
30 | 277 | 17.278244 | 0.031830 | 1108 |
31 | 283 | 24.016602 | 0.031155 | 1132 |
32 | 301 | 6.608610 | 0.029292 | 1204 |
33 | 331 | 3.149657 | 0.026637 | 1324 |
34 | 337 | 15.654144 | 0.026163 | 1348 |
35 | 367 | 11.985100 | 0.024024 | 1468 |
36 | 379 | 23.713582 | 0.023263 | 1516 |
37 | 403 | 14.307676 | 0.021878 | 1612 |
38 | 409 | 19.932013 | 0.021557 | 1636 |
39 | 457 | 27.052418 | 0.019293 | 1828 |
40 | 481 | 18.365765 | 0.018330 | 1924 |
41 | 523 | 20.146584 | 0.016858 | 2092 |
42 | 559 | 17.026049 | 0.015772 | 2236 |
43 | 613 | 23.301803 | 0.014383 | 2452 |
[6]:
my_interface = core('cif_files/WS2_single_layer.cif',\
'cif_files/WS2_single_layer.cif')
Warning!, this programme will rewrite the POSCAR file in this dir!
/home/vscode/.local/lib/python3.10/site-packages/pymatgen/io/cif.py:1169: UserWarning: Issues encountered while parsing CIF: Some fractional coordinates rounded to ideal values to avoid issues with finite precision.
warnings.warn("Issues encountered while parsing CIF: " + "\n".join(self.warnings))
Searching two_dimensional CSL#
[7]:
#a known target disorientation giving CSL
R = rot(a=[0,0,1],theta = 18/180 * pi)
[8]:
my_interface.parse_limit(du = 1e-3, S = 1e-3, sgm1=100, sgm2=100, dd = 1e-3)
#Do searching!
my_interface.search_one_position_2D(hkl_1=[0,0,1], hkl_2 = [0,0,1], theta_range = 2, dtheta= 0.01, pre_dt=True,pre_R=R, exact=False)
Congrates, we found an appx CSL!
U1 =
[[-5 6]
[ 1 5]
[ 0 0]]; sigma_1 = 31
U2 =
[[-6 5]
[-1 6]
[ 0 0]]; sigma_2 = 31
D =
[[ 9.9999969e-01 7.5841000e-04 -0.0000000e+00]
[-7.5825000e-04 9.9999974e-01 0.0000000e+00]
[ 0.0000000e+00 -0.0000000e+00 1.0000000e+00]]
axis = [ 5.39873138e-16 9.35087575e-16 -8.81679743e+00] ; theta = 0.06
Get bicrystal#
[9]:
hkl = get_primitive_hkl([0, 0, 1], my_interface.conv_lattice_1, my_interface.lattice_1)
my_interface.compute_bicrystal_two_D(hkl_1=[0,0,1], hkl_2 = [0,0,1],normal_ortho = False, lim = 50, tol_ortho = 1e-2, tol_integer=1e-3)
cell 1:
[[ 0 -5 -6]
[ 0 1 -5]
[ 1 0 0]]
cell 2:
[[ 0 -6 -5]
[ 0 -1 -6]
[ 1 0 0]]
[10]:
#layer_displacement = 3.4
#my_interface.get_bicrystal(xyz_1 = [1,1,1], xyz_2 = [1,1,1], \
#dp1 = 9.99905800e+00 - layer_displacement, filetype= 'VASP')
my_interface.get_bicrystal(xyz_1 = [1,1,1], xyz_2 = [1,1,1], filetype= 'VASP', dp1 = 0)
Sample CNID#
[11]:
gridsize = 0.3
n1 = int(ceil(norm(my_interface.CNID[:,0])/gridsize))
n2 = int(ceil(norm(my_interface.CNID[:,1])/gridsize))
[12]:
import shutil
try:
shutil.rmtree('CNID_inputs')
except:
print('No existing files')
my_interface.sample_CNID([n1,n2], dp1 = 0)
CNID
[[-0.16129032 0.19354839]
[ 0.03225806 0.16129032]
[-0. -0. ]]
making 4 files...
completed
Please check the POSCAR file