diff --git a/susyexists/README.md b/susyexists/README.md new file mode 100644 index 00000000..cbd01009 --- /dev/null +++ b/susyexists/README.md @@ -0,0 +1,37 @@ +# K-point convergence tracker (Materials) + +> Ideal candidate: scientists skilled in Density Functional Theory and proficient in python. + +# Overview + +The aim of this task is to create a python package that implements automatic convergence tracking mechanism for a materials simulations engine. The convergence is tracked with respect to the k-point sampling inside a reciprocal cell of a crystalline compound. + +# Requirements + +1. automatically find the dimensions of a k-point mesh that satisfy a certain criteria for total energy (eg. total energy is converged within dE = 0.01meV) +1. the code shall be written in a way that can facilitate easy addition of convergence wrt other characteristics extracted from simulations (forces, pressures, phonon frequencies etc) +1. the code shall support VASP or Quantum ESPRESSO + +# Expectations + +- correctly find k-point mesh that satisfies total energy convergence parameters for a set of 10 materials, starting from Si2, as simplest, to a 10-20-atom supercell of your choice +- modular and object-oriented implementation +- commit early and often - at least once per 24 hours + +# Timeline + +We leave exact timing to the candidate. Must fit Within 5 days total. + +# User story + +As a user of this software I can start it passing: + +- path to input data (eg. pw.in / POSCAR, INCAR, KPOINTS) and +- kinetic energy cutoff + +as parameters and get the k-point dimensions (eg. 5 5 5). + +# Notes + +- create an account at exabyte.io and use it for the calculation purposes +- suggested modeling engine: Quantum ESPRESSO diff --git a/susyexists/Si_parameter_test.ipynb b/susyexists/Si_parameter_test.ipynb new file mode 100644 index 00000000..1bee14c4 --- /dev/null +++ b/susyexists/Si_parameter_test.ipynb @@ -0,0 +1,110 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from src import model #Import library\n", + "num_core = 8 #Define number of cores" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "#Step 1 - Initialize model\n", + "pw = model.pw(project_id=\"Si\") #Define project\n", + "pw.from_poscar(directory=\"./Structures/Si.poscar\") #Load structure\n", + "pw.get_primitive() #Get primitive cell\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ecutwfc: 50.0 DeltaE :-0.0006273841728230423 Ry Time: 0.1938261985778809 seconds\n", + "ecutwfc: 60.0 DeltaE :-0.0003047080408862257 Ry Time: 0.2084970474243164 seconds\n", + "ecutwfc: 70.0 DeltaE :-6.351904913692863e-05 Ry Time: 0.2371938228607178 seconds\n", + "ecutwfc: 80.0 DeltaE :-6.302970438909483e-06 Ry Time: 0.2995648384094238 seconds\n", + "ecutwfc: 90.0 DeltaE :-1.8760475342105565e-06 Ry Time: 0.3129620552062988 seconds\n", + "ecutwfc: 100.0 DeltaE :-1.1352211721771255e-06 Ry Time: 0.3260128498077393 seconds\n", + "ecutwfc: 110.0 DeltaE :-5.068481669923131e-07 Ry Time: 0.4594228267669678 seconds\n", + "ecutwfc: 120.0 DeltaE :-3.066274292251592e-07 Ry Time: 0.4630310535430908 seconds\n", + "ecutwfc: 130.0 DeltaE :-2.0733272876327646e-07 Ry Time: 0.4597089290618896 seconds\n", + "ecutwfc: 140.0 DeltaE :-1.7449340994346585e-07 Ry Time: 0.5133810043334961 seconds\n", + "ecutwfc: 150.0 DeltaE :-1.0422343521554467e-07 Ry Time: 0.5248079299926758 seconds\n", + "ecutwfc: 160.0 DeltaE :-2.12823554335273e-07 Ry Time: 0.5203700065612793 seconds\n", + "ecutwfc: 170.0 DeltaE :-1.0274962747303107e-07 Ry Time: 0.5212390422821045 seconds\n", + "ecutwfc: 180.0 DeltaE :-4.080993676325306e-08 Ry Time: 0.5420069694519043 seconds\n" + ] + } + ], + "source": [ + "res = pw.test('ecutwfc',conv_thr=1e-7,start=40,end=500,step=10,num_core=8,debug=False,out=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kpoints: 3.0 DeltaE :-0.11467918418520107 Ry Time: 1.894612073898315 seconds\n", + "kpoints: 4.0 DeltaE :-0.02549575453173958 Ry Time: 3.407161951065063 seconds\n", + "kpoints: 5.0 DeltaE :-0.006562763616971168 Ry Time: 2.148712158203125 seconds\n", + "kpoints: 6.0 DeltaE :-0.0016181548250191469 Ry Time: 3.427868127822876 seconds\n", + "kpoints: 7.0 DeltaE :-0.00030730358718500383 Ry Time: 3.61491584777832 seconds\n", + "kpoints: 8.0 DeltaE :-2.980461402835033e-05 Ry Time: 6.036959886550903 seconds\n", + "kpoints: 9.0 DeltaE :7.220643169603136e-06 Ry Time: 7.17269492149353 seconds\n", + "kpoints: 10.0 DeltaE :4.551905615102214e-06 Ry Time: 9.542922973632812 seconds\n", + "kpoints: 11.0 DeltaE :1.018306175382122e-06 Ry Time: 10.97165894508362 seconds\n", + "kpoints: 12.0 DeltaE :-2.4028405931630914e-08 Ry Time: 13.10678911209106 seconds\n" + ] + } + ], + "source": [ + "res = pw.test('kpoints',conv_thr=1e-7,start=2,end=20,step=1,num_core=8,debug=False,out=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/susyexists/Structures/Si.poscar b/susyexists/Structures/Si.poscar new file mode 100644 index 00000000..cb6a29ed --- /dev/null +++ b/susyexists/Structures/Si.poscar @@ -0,0 +1,16 @@ +Si8 +1.0 + 5.4437023729394527 0.0000000000000000 0.0000000000000003 + 0.0000000000000009 5.4437023729394527 0.0000000000000003 + 0.0000000000000000 0.0000000000000000 5.4437023729394527 +Si +8 +direct + 0.7500000000000000 0.7500000000000000 0.2500000000000000 Si + 0.0000000000000000 0.5000000000000000 0.5000000000000000 Si + 0.7500000000000000 0.2500000000000000 0.7500000000000000 Si + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Si + 0.2500000000000000 0.7500000000000000 0.7500000000000000 Si + 0.5000000000000000 0.5000000000000000 0.0000000000000000 Si + 0.2500000000000000 0.2500000000000000 0.2500000000000000 Si + 0.5000000000000000 0.0000000000000000 0.5000000000000000 Si diff --git a/susyexists/config.json b/susyexists/config.json new file mode 100644 index 00000000..893e4e8c --- /dev/null +++ b/susyexists/config.json @@ -0,0 +1,38 @@ +{ + "pw": { + "control": { + "pseudo_dir": "./pseudos/" + }, + "system": { + "degauss": "0.1", + "ecutwfc": "20", + "occupations": "smearing" + }, + "electrons": { + "conv_thr": "1e-6" + }, + "ions": {}, + "cell": {}, + "k_points": "1 1 1 0 0 0" + }, + "ph": { + "inputph": { + "ldisp": "true", + "nq1": "1", + "nq2": "1", + "nq3": "1" + } + }, + "q2r": { + "input": { + "zasr": "simple" + } + }, + "matdyn": { + "input": { + "asr": "simple", + "q_in_band_form": "true", + "q_in_cryst_coord": "true" + } + } +} diff --git a/susyexists/pseudos/Si.UPF b/susyexists/pseudos/Si.UPF new file mode 100644 index 00000000..f8355759 --- /dev/null +++ b/susyexists/pseudos/Si.UPF @@ -0,0 +1,1231 @@ + + + + Si_ONCV_PBE-1.2.upf + + This pseudopotential file has been produced using the code + ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential) + scalar-relativistic version 2.1.1, 03/26/2014 by D. R. Hamann + The code is available through a link at URL www.mat-simresearch.com. + Documentation with the package provides a full discription of the + input data below. + + + While it is not required under the terms of the GNU GPL, it is + suggested that you cite D. R. Hamann, Phys. Rev. B 88, 085117 (2013) + in any publication using these pseudopotentials. + + + Copyright 2015 The Regents of the University of California + + This work is licensed under the Creative Commons Attribution-ShareAlike + 4.0 International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + + This pseudopotential is part of the Schlipf-Gygi norm-conserving + pseudopotential library. Its construction parameters were tuned to + reproduce materials of a training set with very high accuracy and + should be suitable as a general purpose pseudopotential to treat a + variety of different compounds. For details of the construction and + testing of the pseudopotential please refer to: + + M. Schlipf and F. Gygi, Computer Physics Communications (2015) + DOI: 10.1016/j.cpc.2015.05.011 + http://dx.doi.org/10.1016/j.cpc.2015.05.011 + http://www.quantum-simulation.org + + We kindly ask that you include this reference in all publications + associated to this pseudopotential. + + + +# ATOM AND REFERENCE CONFIGURATION +# atsym z nc nv iexc psfile + Si 14.00 3 2 4 upf +# +# n l f energy (Ha) + 1 0 2.00 + 2 0 2.00 + 2 1 6.00 + 3 0 2.00 + 3 1 2.00 +# +# PSEUDOPOTENTIAL AND OPTIMIZATION +# lmax + 1 +# +# l, rc, ep, ncon, nbas, qcut + 0 2.40480 -0.39736 5 8 5.11281 + 1 3.56481 -0.14998 5 8 3.50314 +# +# LOCAL POTENTIAL +# lloc, lpopt, rc(5), dvloc0 + 4 5 1.27795 0.00000 +# +# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs +# l, nproj, debl + 0 2 0.56800 + 1 2 1.00881 +# +# MODEL CORE CHARGE +# icmod, fcfact + 0 0.00000 +# +# LOG DERIVATIVE ANALYSIS +# epsh1, epsh2, depsh + -5.00 3.00 0.02 +# +# OUTPUT GRID +# rlmax, drl + 6.00 0.01 +# +# TEST CONFIGURATIONS +# ncnf + 0 +# nvcnf +# n l f + + + + + + + + + 0.0000 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 + 0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500 + 0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300 + 0.2400 0.2500 0.2600 0.2700 0.2800 0.2900 0.3000 0.3100 + 0.3200 0.3300 0.3400 0.3500 0.3600 0.3700 0.3800 0.3900 + 0.4000 0.4100 0.4200 0.4300 0.4400 0.4500 0.4600 0.4700 + 0.4800 0.4900 0.5000 0.5100 0.5200 0.5300 0.5400 0.5500 + 0.5600 0.5700 0.5800 0.5900 0.6000 0.6100 0.6200 0.6300 + 0.6400 0.6500 0.6600 0.6700 0.6800 0.6900 0.7000 0.7100 + 0.7200 0.7300 0.7400 0.7500 0.7600 0.7700 0.7800 0.7900 + 0.8000 0.8100 0.8200 0.8300 0.8400 0.8500 0.8600 0.8700 + 0.8800 0.8900 0.9000 0.9100 0.9200 0.9300 0.9400 0.9500 + 0.9600 0.9700 0.9800 0.9900 1.0000 1.0100 1.0200 1.0300 + 1.0400 1.0500 1.0600 1.0700 1.0800 1.0900 1.1000 1.1100 + 1.1200 1.1300 1.1400 1.1500 1.1600 1.1700 1.1800 1.1900 + 1.2000 1.2100 1.2200 1.2300 1.2400 1.2500 1.2600 1.2700 + 1.2800 1.2900 1.3000 1.3100 1.3200 1.3300 1.3400 1.3500 + 1.3600 1.3700 1.3800 1.3900 1.4000 1.4100 1.4200 1.4300 + 1.4400 1.4500 1.4600 1.4700 1.4800 1.4900 1.5000 1.5100 + 1.5200 1.5300 1.5400 1.5500 1.5600 1.5700 1.5800 1.5900 + 1.6000 1.6100 1.6200 1.6300 1.6400 1.6500 1.6600 1.6700 + 1.6800 1.6900 1.7000 1.7100 1.7200 1.7300 1.7400 1.7500 + 1.7600 1.7700 1.7800 1.7900 1.8000 1.8100 1.8200 1.8300 + 1.8400 1.8500 1.8600 1.8700 1.8800 1.8900 1.9000 1.9100 + 1.9200 1.9300 1.9400 1.9500 1.9600 1.9700 1.9800 1.9900 + 2.0000 2.0100 2.0200 2.0300 2.0400 2.0500 2.0600 2.0700 + 2.0800 2.0900 2.1000 2.1100 2.1200 2.1300 2.1400 2.1500 + 2.1600 2.1700 2.1800 2.1900 2.2000 2.2100 2.2200 2.2300 + 2.2400 2.2500 2.2600 2.2700 2.2800 2.2900 2.3000 2.3100 + 2.3200 2.3300 2.3400 2.3500 2.3600 2.3700 2.3800 2.3900 + 2.4000 2.4100 2.4200 2.4300 2.4400 2.4500 2.4600 2.4700 + 2.4800 2.4900 2.5000 2.5100 2.5200 2.5300 2.5400 2.5500 + 2.5600 2.5700 2.5800 2.5900 2.6000 2.6100 2.6200 2.6300 + 2.6400 2.6500 2.6600 2.6700 2.6800 2.6900 2.7000 2.7100 + 2.7200 2.7300 2.7400 2.7500 2.7600 2.7700 2.7800 2.7900 + 2.8000 2.8100 2.8200 2.8300 2.8400 2.8500 2.8600 2.8700 + 2.8800 2.8900 2.9000 2.9100 2.9200 2.9300 2.9400 2.9500 + 2.9600 2.9700 2.9800 2.9900 3.0000 3.0100 3.0200 3.0300 + 3.0400 3.0500 3.0600 3.0700 3.0800 3.0900 3.1000 3.1100 + 3.1200 3.1300 3.1400 3.1500 3.1600 3.1700 3.1800 3.1900 + 3.2000 3.2100 3.2200 3.2300 3.2400 3.2500 3.2600 3.2700 + 3.2800 3.2900 3.3000 3.3100 3.3200 3.3300 3.3400 3.3500 + 3.3600 3.3700 3.3800 3.3900 3.4000 3.4100 3.4200 3.4300 + 3.4400 3.4500 3.4600 3.4700 3.4800 3.4900 3.5000 3.5100 + 3.5200 3.5300 3.5400 3.5500 3.5600 3.5700 3.5800 3.5900 + 3.6000 3.6100 3.6200 3.6300 3.6400 3.6500 3.6600 3.6700 + 3.6800 3.6900 3.7000 3.7100 3.7200 3.7300 3.7400 3.7500 + 3.7600 3.7700 3.7800 3.7900 3.8000 3.8100 3.8200 3.8300 + 3.8400 3.8500 3.8600 3.8700 3.8800 3.8900 3.9000 3.9100 + 3.9200 3.9300 3.9400 3.9500 3.9600 3.9700 3.9800 3.9900 + 4.0000 4.0100 4.0200 4.0300 4.0400 4.0500 4.0600 4.0700 + 4.0800 4.0900 4.1000 4.1100 4.1200 4.1300 4.1400 4.1500 + 4.1600 4.1700 4.1800 4.1900 4.2000 4.2100 4.2200 4.2300 + 4.2400 4.2500 4.2600 4.2700 4.2800 4.2900 4.3000 4.3100 + 4.3200 4.3300 4.3400 4.3500 4.3600 4.3700 4.3800 4.3900 + 4.4000 4.4100 4.4200 4.4300 4.4400 4.4500 4.4600 4.4700 + 4.4800 4.4900 4.5000 4.5100 4.5200 4.5300 4.5400 4.5500 + 4.5600 4.5700 4.5800 4.5900 4.6000 4.6100 4.6200 4.6300 + 4.6400 4.6500 4.6600 4.6700 4.6800 4.6900 4.7000 4.7100 + 4.7200 4.7300 4.7400 4.7500 4.7600 4.7700 4.7800 4.7900 + 4.8000 4.8100 4.8200 4.8300 4.8400 4.8500 4.8600 4.8700 + 4.8800 4.8900 4.9000 4.9100 4.9200 4.9300 4.9400 4.9500 + 4.9600 4.9700 4.9800 4.9900 5.0000 5.0100 5.0200 5.0300 + 5.0400 5.0500 5.0600 5.0700 5.0800 5.0900 5.1000 5.1100 + 5.1200 5.1300 5.1400 5.1500 5.1600 5.1700 5.1800 5.1900 + 5.2000 5.2100 5.2200 5.2300 5.2400 5.2500 5.2600 5.2700 + 5.2800 5.2900 5.3000 5.3100 5.3200 5.3300 5.3400 5.3500 + 5.3600 5.3700 5.3800 5.3900 5.4000 5.4100 5.4200 5.4300 + 5.4400 5.4500 5.4600 5.4700 5.4800 5.4900 5.5000 5.5100 + 5.5200 5.5300 5.5400 5.5500 5.5600 5.5700 5.5800 5.5900 + 5.6000 5.6100 5.6200 5.6300 5.6400 5.6500 5.6600 5.6700 + 5.6800 5.6900 5.7000 5.7100 5.7200 5.7300 5.7400 5.7500 + 5.7600 5.7700 5.7800 5.7900 5.8000 5.8100 5.8200 5.8300 + 5.8400 5.8500 5.8600 5.8700 5.8800 5.8900 5.9000 5.9100 + 5.9200 5.9300 5.9400 5.9500 5.9600 5.9700 5.9800 5.9900 + 6.0000 6.0100 + + + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 + + + + -2.5160304129e+01 -2.5156559663e+01 -2.5145367977e+01 -2.5126854207e+01 + -2.5101226916e+01 -2.5068778089e+01 -2.5029883139e+01 -2.4985000900e+01 + -2.4934673633e+01 -2.4879527023e+01 -2.4820270180e+01 -2.4757412248e+01 + -2.4690707529e+01 -2.4619908619e+01 -2.4544913952e+01 -2.4465690072e+01 + -2.4382239902e+01 -2.4294588183e+01 -2.4202773826e+01 -2.4106845331e+01 + -2.4006857712e+01 -2.3902870263e+01 -2.3794944832e+01 -2.3683144453e+01 + -2.3567532222e+01 -2.3448170370e+01 -2.3325119484e+01 -2.3198437854e+01 + -2.3068180933e+01 -2.2934400894e+01 -2.2797146278e+01 -2.2656461739e+01 + -2.2512387873e+01 -2.2364961151e+01 -2.2214213926e+01 -2.2060174574e+01 + -2.1902867687e+01 -2.1742314424e+01 -2.1578532926e+01 -2.1411538851e+01 + -2.1241346018e+01 -2.1067967144e+01 -2.0891414679e+01 -2.0711701725e+01 + -2.0528843042e+01 -2.0342856111e+01 -2.0153762250e+01 -1.9961587770e+01 + -1.9766365122e+01 -1.9568134059e+01 -1.9366942824e+01 -1.9162849156e+01 + -1.8955921192e+01 -1.8746238672e+01 -1.8533893323e+01 -1.8318989685e+01 + -1.8101645532e+01 -1.7881991925e+01 -1.7660173498e+01 -1.7436347980e+01 + -1.7210685890e+01 -1.6983369961e+01 -1.6754593800e+01 -1.6524561482e+01 + -1.6293485634e+01 -1.6061586135e+01 -1.5829088782e+01 -1.5596223293e+01 + -1.5363221713e+01 -1.5130316716e+01 -1.4897739845e+01 -1.4665719939e+01 + -1.4434481659e+01 -1.4204244184e+01 -1.3975220005e+01 -1.3747613830e+01 + -1.3521621990e+01 -1.3297431797e+01 -1.3075221158e+01 -1.2855158363e+01 + -1.2637402040e+01 -1.2422101244e+01 -1.2209395660e+01 -1.1999415900e+01 + -1.1792283861e+01 -1.1588113126e+01 -1.1387009382e+01 -1.1189070846e+01 + -1.0994388670e+01 -1.0803047324e+01 -1.0615124949e+01 -1.0430693659e+01 + -1.0249819810e+01 -1.0072564219e+01 -9.8989823400e+00 -9.7291243995e+00 + -9.5630354963e+00 -9.4007558350e+00 -9.2423202946e+00 -9.0877588186e+00 + -8.9370963431e+00 -8.7903527500e+00 -8.6475428366e+00 -8.5086764428e+00 + -8.3737581319e+00 -8.2427869426e+00 -8.1157568288e+00 -7.9926564372e+00 + -7.8734693478e+00 -7.7581734943e+00 -7.6467409698e+00 -7.5391386646e+00 + -7.4353281646e+00 -7.3352657501e+00 -7.2389009776e+00 -7.1461782942e+00 + -7.0570369231e+00 -6.9714100460e+00 -6.8892240431e+00 -6.8103999310e+00 + -6.7348539728e+00 -6.6624937797e+00 -6.5932214436e+00 -6.5269339285e+00 + -6.4635198789e+00 -6.4028605987e+00 -6.3448323139e+00 -6.2893026490e+00 + -6.2361307039e+00 -6.1851687676e+00 -6.1362460770e+00 -6.0891737898e+00 + -6.0437542780e+00 -5.9997824464e+00 -5.9570641603e+00 -5.9154057309e+00 + -5.8746445187e+00 -5.8346266722e+00 -5.7952216703e+00 -5.7563298574e+00 + -5.7178559554e+00 -5.6797439417e+00 -5.6419425664e+00 -5.6044192537e+00 + -5.5671584310e+00 -5.5301456719e+00 -5.4933852483e+00 -5.4568791441e+00 + -5.4206379339e+00 -5.3846728490e+00 -5.3489973601e+00 -5.3136250328e+00 + -5.2785699936e+00 -5.2438444091e+00 -5.2094608889e+00 -5.1754292076e+00 + -5.1417589860e+00 -5.1084574587e+00 -5.0755308179e+00 -5.0429838025e+00 + -5.0108193914e+00 -4.9790400036e+00 -4.9476459113e+00 -4.9166374676e+00 + -4.8860128224e+00 -4.8557705589e+00 -4.8259072537e+00 -4.7964200311e+00 + -4.7673043609e+00 -4.7385562137e+00 -4.7101703242e+00 -4.6821417944e+00 + -4.6544649071e+00 -4.6271341528e+00 -4.6001435689e+00 -4.5734872608e+00 + -4.5471591643e+00 -4.5211531944e+00 -4.4954632799e+00 -4.4700833106e+00 + -4.4450072653e+00 -4.4202291453e+00 -4.3957430102e+00 -4.3715430831e+00 + -4.3476235184e+00 -4.3239788438e+00 -4.3006033168e+00 -4.2774917787e+00 + -4.2546387370e+00 -4.2320392188e+00 -4.2096880970e+00 -4.1875805275e+00 + -4.1657118053e+00 -4.1440771838e+00 -4.1226724025e+00 -4.1014928094e+00 + -4.0805344887e+00 -4.0597931513e+00 -4.0392649393e+00 -4.0189460345e+00 + -3.9988326022e+00 -3.9789212720e+00 -3.9592082959e+00 -3.9396905671e+00 + -3.9203647169e+00 -3.9012276089e+00 -3.8822763374e+00 -3.8635077293e+00 + -3.8449192053e+00 -3.8265078683e+00 -3.8082711123e+00 -3.7902064559e+00 + -3.7723112189e+00 -3.7545832111e+00 -3.7370199771e+00 -3.7196192801e+00 + -3.7023790216e+00 -3.6852968792e+00 -3.6683709673e+00 -3.6515992010e+00 + -3.6349795807e+00 -3.6185102889e+00 -3.6021893394e+00 -3.5860149761e+00 + -3.5699854184e+00 -3.5540988193e+00 -3.5383535433e+00 -3.5227478466e+00 + -3.5072800370e+00 -3.4919485039e+00 -3.4767515617e+00 -3.4616876114e+00 + -3.4467550591e+00 -3.4319522686e+00 -3.4172776837e+00 -3.4027297199e+00 + -3.3883067879e+00 -3.3740073292e+00 -3.3598297607e+00 -3.3457725134e+00 + -3.3318340631e+00 -3.3180127986e+00 -3.3043072292e+00 -3.2907159686e+00 + -3.2772374878e+00 -3.2638704304e+00 -3.2506134911e+00 -3.2374652996e+00 + -3.2244245247e+00 -3.2114898374e+00 -3.1986598194e+00 -3.1859332481e+00 + -3.1733088943e+00 -3.1607854555e+00 -3.1483617369e+00 -3.1360365380e+00 + -3.1238085869e+00 -3.1116767424e+00 -3.0996398630e+00 -3.0876967359e+00 + -3.0758462566e+00 -3.0640873359e+00 -3.0524188164e+00 -3.0408396230e+00 + -3.0293487233e+00 -3.0179450177e+00 -3.0066274531e+00 -2.9953950551e+00 + -2.9842467852e+00 -2.9731816036e+00 -2.9621985961e+00 -2.9512967886e+00 + -2.9404751469e+00 -2.9297328183e+00 -2.9190688798e+00 -2.9084823458e+00 + -2.8979723759e+00 -2.8875381094e+00 -2.8771786280e+00 -2.8668930794e+00 + -2.8566806724e+00 -2.8465405607e+00 -2.8364718714e+00 -2.8264738829e+00 + -2.8165458092e+00 -2.8066867993e+00 -2.7968961512e+00 -2.7871731387e+00 + -2.7775169864e+00 -2.7679269534e+00 -2.7584023893e+00 -2.7489425950e+00 + -2.7395467978e+00 -2.7302144067e+00 -2.7209447682e+00 -2.7117371878e+00 + -2.7025910190e+00 -2.6935056869e+00 -2.6844805737e+00 -2.6755149928e+00 + -2.6666084229e+00 -2.6577602896e+00 -2.6489699866e+00 -2.6402369232e+00 + -2.6315606022e+00 -2.6229404784e+00 -2.6143759566e+00 -2.6058665452e+00 + -2.5974117510e+00 -2.5890110570e+00 -2.5806638980e+00 -2.5723698487e+00 + -2.5641284258e+00 -2.5559391247e+00 -2.5478014543e+00 -2.5397149955e+00 + -2.5316792911e+00 -2.5236938519e+00 -2.5157582451e+00 -2.5078720577e+00 + -2.5000348554e+00 -2.4922461670e+00 -2.4845056016e+00 -2.4768127538e+00 + -2.4691672088e+00 -2.4615685147e+00 -2.4540163084e+00 -2.4465101933e+00 + -2.4390497687e+00 -2.4316346093e+00 -2.4242643615e+00 -2.4169386412e+00 + -2.4096570597e+00 -2.4024192138e+00 -2.3952247558e+00 -2.3880733133e+00 + -2.3809645095e+00 -2.3738979555e+00 -2.3668733113e+00 -2.3598902150e+00 + -2.3529483009e+00 -2.3460471891e+00 -2.3391865497e+00 -2.3323660308e+00 + -2.3255852786e+00 -2.3188439163e+00 -2.3121416288e+00 -2.3054780742e+00 + -2.2988529111e+00 -2.2922657665e+00 -2.2857163384e+00 -2.2792043000e+00 + -2.2727293221e+00 -2.2662910402e+00 -2.2598891597e+00 -2.2535233799e+00 + -2.2471933879e+00 -2.2408988386e+00 -2.2346394319e+00 -2.2284149055e+00 + -2.2222249672e+00 -2.2160693127e+00 -2.2099476286e+00 -2.2038596764e+00 + -2.1978051806e+00 -2.1917838655e+00 -2.1857954228e+00 -2.1798396167e+00 + -2.1739161867e+00 -2.1680248688e+00 -2.1621653778e+00 -2.1563374587e+00 + -2.1505408792e+00 -2.1447753880e+00 -2.1390407300e+00 -2.1333366252e+00 + -2.1276628673e+00 -2.1220192168e+00 -2.1164054341e+00 -2.1108212567e+00 + -2.1052664597e+00 -2.0997408293e+00 -2.0942441369e+00 -2.0887761515e+00 + -2.0833366149e+00 -2.0779253420e+00 -2.0725421150e+00 -2.0671867160e+00 + -2.0618589102e+00 -2.0565584826e+00 -2.0512852441e+00 -2.0460389871e+00 + -2.0408195037e+00 -2.0356265580e+00 -2.0304599722e+00 -2.0253195543e+00 + -2.0202051063e+00 -2.0151164259e+00 -2.0100532909e+00 -2.0050155417e+00 + -2.0000029894e+00 -1.9950154452e+00 -1.9900527083e+00 -1.9851145834e+00 + -1.9802009118e+00 -1.9753115133e+00 -1.9704462079e+00 -1.9656047982e+00 + -1.9607871107e+00 -1.9559929888e+00 -1.9512222609e+00 -1.9464747552e+00 + -1.9417502793e+00 -1.9370486765e+00 -1.9323697940e+00 -1.9277134681e+00 + -1.9230795352e+00 -1.9184678093e+00 -1.9138781456e+00 -1.9093103968e+00 + -1.9047644068e+00 -1.9002400194e+00 -1.8957370569e+00 -1.8912553817e+00 + -1.8867948534e+00 -1.8823553233e+00 -1.8779366424e+00 -1.8735386423e+00 + -1.8691611886e+00 -1.8648041493e+00 -1.8604673825e+00 -1.8561507463e+00 + -1.8518540828e+00 -1.8475772568e+00 -1.8433201460e+00 -1.8390826150e+00 + -1.8348645287e+00 -1.8306657410e+00 -1.8264861122e+00 -1.8223255309e+00 + -1.8181838679e+00 -1.8140609945e+00 -1.8099567776e+00 -1.8058710698e+00 + -1.8018037713e+00 -1.7977547591e+00 -1.7937239104e+00 -1.7897111021e+00 + -1.7857161890e+00 -1.7817390708e+00 -1.7777796345e+00 -1.7738377630e+00 + -1.7699133391e+00 -1.7660062330e+00 -1.7621163287e+00 -1.7582435281e+00 + -1.7543877195e+00 -1.7505487911e+00 -1.7467266302e+00 -1.7429211021e+00 + -1.7391321243e+00 -1.7353595902e+00 -1.7316033932e+00 -1.7278634268e+00 + -1.7241395708e+00 -1.7204317235e+00 -1.7167397946e+00 -1.7130636826e+00 + -1.7094032860e+00 -1.7057585031e+00 -1.7021292086e+00 -1.6985153289e+00 + -1.6949167674e+00 -1.6913334272e+00 -1.6877652116e+00 -1.6842120150e+00 + -1.6806737355e+00 -1.6771502958e+00 -1.6736416038e+00 -1.6701475670e+00 + -1.6666680931e+00 -1.6632030745e+00 -1.6597524288e+00 -1.6563160760e+00 + -1.6528939281e+00 -1.6494858970e+00 -1.6460918947e+00 -1.6427118130e+00 + -1.6393455852e+00 -1.6359931297e+00 -1.6326543626e+00 -1.6293292000e+00 + -1.6260175565e+00 -1.6227193292e+00 -1.6194344586e+00 -1.6161628647e+00 + -1.6129044675e+00 -1.6096591868e+00 -1.6064269393e+00 -1.6032076307e+00 + -1.6000012029e+00 -1.5968075796e+00 -1.5936266844e+00 -1.5904584411e+00 + -1.5873027694e+00 -1.5841595804e+00 -1.5810288184e+00 -1.5779104108e+00 + -1.5748042848e+00 -1.5717103677e+00 -1.5686285837e+00 -1.5655588459e+00 + -1.5625011024e+00 -1.5594552840e+00 -1.5564213212e+00 -1.5533991448e+00 + -1.5503886849e+00 -1.5473898532e+00 -1.5444026029e+00 -1.5414268680e+00 + -1.5384625823e+00 -1.5355096797e+00 -1.5325680940e+00 -1.5296377430e+00 + -1.5267185758e+00 -1.5238105327e+00 -1.5209135507e+00 -1.5180275668e+00 + -1.5151525180e+00 -1.5122883302e+00 -1.5094349445e+00 -1.5065923092e+00 + -1.5037603643e+00 -1.5009390495e+00 -1.4981283049e+00 -1.4953280660e+00 + -1.4925382630e+00 -1.4897588532e+00 -1.4869897792e+00 -1.4842309837e+00 + -1.4814824094e+00 -1.4787439991e+00 -1.4760156806e+00 -1.4732974099e+00 + -1.4705891360e+00 -1.4678908041e+00 -1.4652023597e+00 -1.4625237482e+00 + -1.4598549093e+00 -1.4571957823e+00 -1.4545463276e+00 -1.4519064929e+00 + -1.4492762263e+00 -1.4466554756e+00 -1.4440441888e+00 -1.4414423008e+00 + -1.4388497696e+00 -1.4362665501e+00 -1.4336925927e+00 -1.4311278477e+00 + -1.4285722654e+00 -1.4260257948e+00 -1.4234883722e+00 -1.4209599659e+00 + -1.4184405284e+00 -1.4159300124e+00 -1.4134283706e+00 -1.4109355557e+00 + -1.4084515142e+00 -1.4059761948e+00 -1.4035095631e+00 -1.4010515740e+00 + -1.3986021823e+00 -1.3961613429e+00 -1.3937290106e+00 -1.3913051314e+00 + -1.3888896627e+00 -1.3864825689e+00 -1.3840838069e+00 -1.3816933338e+00 + -1.3793111065e+00 -1.3769370819e+00 -1.3745712066e+00 -1.3722134437e+00 + -1.3698637576e+00 -1.3675221074e+00 -1.3651884520e+00 -1.3628627504e+00 + -1.3605449616e+00 -1.3582350340e+00 -1.3559329332e+00 -1.3536386252e+00 + -1.3513520708e+00 -1.3490732311e+00 -1.3468020667e+00 -1.3445385387e+00 + -1.3422825986e+00 -1.3400342116e+00 -1.3377933465e+00 -1.3355599660e+00 + -1.3333340327e+00 -1.3311155093e+00 + + + + 0.0000000000E+00 -2.8221815062E-02 -5.6445494142E-02 -8.4672798168E-02 + -1.1290528242E-01 -1.4114419501E-01 -1.6939037698E-01 -1.9764416444E-01 + -2.2590529334E-01 -2.5417280732E-01 -2.8244496915E-01 -3.1071917621E-01 + -3.3899188047E-01 -3.6725851339E-01 -3.9551341617E-01 -4.2374977575E-01 + -4.5195956687E-01 -4.8013350061E-01 -5.0826097965E-01 -5.3633006056E-01 + -5.6432742342E-01 -5.9223834894E-01 -6.2004670325E-01 -6.4773493059E-01 + -6.7528405400E-01 -7.0267368405E-01 -7.2988203575E-01 -7.5688595357E-01 + -7.8366094466E-01 -8.1018122006E-01 -8.3641974404E-01 -8.6234829123E-01 + -8.8793751146E-01 -9.1315700190E-01 -9.3797538772E-01 -9.6236040671E-01 + -9.8627900572E-01 -1.0096974376E+00 -1.0325813683E+00 -1.0548959893E+00 + -1.0766061328E+00 -1.0976763939E+00 -1.1180712564E+00 -1.1377552226E+00 + -1.1566929460E+00 -1.1748493674E+00 -1.1921898527E+00 -1.2086803323E+00 + -1.2242874399E+00 -1.2389786543E+00 -1.2527224472E+00 -1.2654884143E+00 + -1.2772474045E+00 -1.2879716911E+00 -1.2976350646E+00 -1.3062129874E+00 + -1.3136827195E+00 -1.3200234233E+00 -1.3252163082E+00 -1.3292447140E+00 + -1.3320942308E+00 -1.3337528104E+00 -1.3342107988E+00 -1.3334611157E+00 + -1.3314992447E+00 -1.3283233091E+00 -1.3239341926E+00 -1.3183355172E+00 + -1.3115336917E+00 -1.3035379589E+00 -1.2943604150E+00 -1.2840159881E+00 + -1.2725224433E+00 -1.2599003611E+00 -1.2461731164E+00 -1.2313668437E+00 + -1.2155103671E+00 -1.1986351443E+00 -1.1807751919E+00 -1.1619669990E+00 + -1.1422494296E+00 -1.1216636141E+00 -1.1002528308E+00 -1.0780623759E+00 + -1.0551394246E+00 -1.0315328824E+00 -1.0072932274E+00 -9.8247234402E-01 + -9.5712334873E-01 -9.3130040903E-01 -9.0505855525E-01 -8.7845348673E-01 + -8.5154137294E-01 -8.2437865042E-01 -7.9702181635E-01 -7.6952722003E-01 + -7.4195085302E-01 -7.1434821609E-01 -6.8677390600E-01 -6.5928155968E-01 + -6.3192362688E-01 -6.0475115787E-01 -5.7781360791E-01 -5.5115873666E-01 + -5.2483227904E-01 -4.9887765189E-01 -4.7333605091E-01 -4.4824620147E-01 + -4.2364436891E-01 -3.9956392409E-01 -3.7603514691E-01 -3.5308549759E-01 + -3.3073948786E-01 -3.0901860407E-01 -2.8794058194E-01 -2.6752024376E-01 + -2.4776940468E-01 -2.2869649292E-01 -2.1030639794E-01 -1.9260118193E-01 + -1.7558023252E-01 -1.5923918508E-01 -1.4357125705E-01 -1.2856728225E-01 + -1.1421521153E-01 -1.0050086910E-01 -8.7408295800E-02 -7.4919574579E-02 + -6.3015584453E-02 -5.1675982987E-02 -4.0879118758E-02 -3.0603560471E-02 + -2.0827219717E-02 -1.1530587296E-02 -2.6960536196E-03 5.6933329069E-03 + 1.3649262182E-02 2.1183224529E-02 2.8303792615E-02 3.5017205748E-02 + 4.1329605057E-02 4.7244681143E-02 5.2766576570E-02 5.7898783676E-02 + 6.2645082956E-02 6.7009455920E-02 7.0996674550E-02 7.4611963115E-02 + 7.7861475917E-02 8.0752158018E-02 8.3291622422E-02 8.5488566224E-02 + 8.7352042038E-02 8.8892215701E-02 9.0119548828E-02 9.1045280625E-02 + 9.1681015941E-02 9.2038858010E-02 9.2131194283E-02 9.1970801067E-02 + 9.1570514692E-02 9.0943594386E-02 9.0103044884E-02 8.9062419882E-02 + 8.7834667821E-02 8.6433452357E-02 8.4871490865E-02 8.3162378388E-02 + 8.1318468468E-02 7.9353115688E-02 7.7278212047E-02 7.5106706083E-02 + 7.2849960607E-02 7.0520357522E-02 6.8128689522E-02 6.5686615086E-02 + 6.3204339951E-02 6.0692646067E-02 5.8161156381E-02 5.5619628883E-02 + 5.3077124086E-02 5.0542239380E-02 4.8023501758E-02 4.5528231064E-02 + 4.3064447069E-02 4.0638107774E-02 3.8256734615E-02 3.5925087076E-02 + 3.3649566515E-02 3.1434393662E-02 2.9284476182E-02 2.7203678286E-02 + 2.5195325304E-02 2.3262974752E-02 2.1408405235E-02 1.9634808063E-02 + 1.7942846275E-02 1.6334421616E-02 1.4810054472E-02 1.3370091312E-02 + 1.2014931246E-02 1.0743576870E-02 9.5560333975E-03 8.4505812108E-03 + 7.4260862543E-03 6.4808452755E-03 5.6125602920E-03 4.8194090931E-03 + 4.0984157774E-03 3.4470424015E-03 2.8623005910E-03 2.3409480898E-03 + 1.8798492482E-03 1.4754749275E-03 1.1242993649E-03 8.2275609307E-04 + 5.6722371900E-04 3.5380455999E-04 1.7906799390E-04 3.9175479243E-05 + -6.9563899372E-05 -1.5042686328E-04 -2.0738093672E-04 -2.4340600869E-04 + -2.6168902892E-04 -2.6590392705E-04 -2.5821171217E-04 -2.4176438089E-04 + -2.1916537887E-04 -1.9209316461E-04 -1.6341344735E-04 -1.3436562271E-04 + -1.0611056278E-04 -8.1064671060E-05 -5.8949209202E-05 -4.0573918929E-05 + -2.7062732269E-05 -1.7264995276E-05 -1.1361026416E-05 -9.0187223690E-06 + -8.2275179000E-06 -6.4979956464E-06 -3.5021442825E-06 -8.1492721747E-07 + 4.2135375221E-07 4.9654080995E-07 1.3679919748E-07 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 0.0000000000E+00 -2.2617493275E-02 -4.5216914859E-02 -6.7780069759E-02 + -9.0288517322E-02 -1.1272345081E-01 -1.3506557978E-01 -1.5729501634E-01 + -1.7939116598E-01 -2.0133262408E-01 -2.2309707887E-01 -2.4466122163E-01 + -2.6600066503E-01 -2.8708987034E-01 -3.0790208419E-01 -3.2840928561E-01 + -3.4858214399E-01 -3.6838998850E-01 -3.8780078947E-01 -4.0678115231E-01 + -4.2529632421E-01 -4.4331021412E-01 -4.6078542610E-01 -4.7768330647E-01 + -4.9396400464E-01 -5.0958654788E-01 -5.2450892987E-01 -5.3868821308E-01 + -5.5208064453E-01 -5.6464178505E-01 -5.7632665149E-01 -5.8708987150E-01 + -5.9688585019E-01 -6.0566894784E-01 -6.1339367183E-01 -6.2001487023E-01 + -6.2548794854E-01 -6.2976907921E-01 -6.3281542910E-01 -6.3458539357E-01 + -6.3503882872E-01 -6.3413729376E-01 -6.3184429502E-01 -6.2812553181E-01 + -6.2294914272E-01 -6.1628595127E-01 -6.0810970922E-01 -5.9839733635E-01 + -5.8712915114E-01 -5.7428910148E-01 -5.5986499706E-01 -5.4384870300E-01 + -5.2623632473E-01 -5.0702845469E-01 -4.8623027470E-01 -4.6385175651E-01 + -4.3990779888E-01 -4.1441832542E-01 -3.8740842892E-01 -3.5890841425E-01 + -3.2895388000E-01 -2.9758577258E-01 -2.6485032981E-01 -2.3079918256E-01 + -1.9548921930E-01 -1.5898254185E-01 -1.2134642812E-01 -8.2653150320E-02 + -4.2979845639E-02 -2.4083517635E-03 3.8975005336E-02 8.1079652409E-02 + 1.2381102588E-01 1.6707085666E-01 2.1075749183E-01 2.5476626062E-01 + 2.9898982326E-01 3.4331857540E-01 3.8764107005E-01 4.3184446236E-01 + 4.7581497597E-01 5.1943838895E-01 5.6260053758E-01 6.0518783591E-01 + 6.4708780888E-01 6.8818963657E-01 7.2838470711E-01 7.6756717557E-01 + 8.0563452583E-01 8.4248813254E-01 8.7803381974E-01 9.1218241290E-01 + 9.4485028066E-01 9.7595986251E-01 1.0054401785E+00 1.0332273167E+00 + 1.0592648945E+00 1.0835042363E+00 1.1059054759E+00 1.1264373575E+00 + 1.1450776414E+00 1.1618134115E+00 1.1766412913E+00 1.1895673908E+00 + 1.2006078275E+00 1.2097889728E+00 1.2171467753E+00 1.2227269116E+00 + 1.2265843699E+00 1.2287838181E+00 1.2293991989E+00 1.2285126948E+00 + 1.2262144162E+00 1.2226020205E+00 1.2177802161E+00 1.2118592021E+00 + 1.2049542364E+00 1.1971848138E+00 1.1886726091E+00 1.1795407194E+00 + 1.1699138629E+00 1.1599131580E+00 1.1496568083E+00 1.1392603853E+00 + 1.1288306294E+00 1.1184638960E+00 1.1082495945E+00 1.0982616350E+00 + 1.0885548433E+00 1.0791709080E+00 1.0701102992E+00 1.0613320189E+00 + 1.0527743198E+00 1.0443322811E+00 1.0358934750E+00 1.0273305821E+00 + 1.0185170714E+00 1.0093297980E+00 9.9965333877E-01 9.8939641258E-01 + 9.7846803855E-01 9.6681504516E-01 9.5439015193E-01 9.4116645561E-01 + 9.2714066624E-01 9.1231056879E-01 8.9670333343E-01 8.8034409702E-01 + 8.6327401399E-01 8.4553810801E-01 8.2718729446E-01 8.0827659158E-01 + 7.8886328917E-01 7.6900544989E-01 7.4876295213E-01 7.2819357681E-01 + 7.0735601617E-01 6.8630639840E-01 6.6509973448E-01 6.4378951592E-01 + 6.2242582573E-01 6.0105880450E-01 5.7973316575E-01 5.5849519495E-01 + 5.3738425932E-01 5.1644245618E-01 4.9570406704E-01 4.7520680357E-01 + 4.5498022397E-01 4.3505755773E-01 4.1546403183E-01 3.9622836724E-01 + 3.7737184740E-01 3.5891870492E-01 3.4088664870E-01 3.2329547451E-01 + 3.0615966109E-01 2.8949464442E-01 2.7331198797E-01 2.5762287355E-01 + 2.4243622725E-01 2.2775912159E-01 2.1359807490E-01 1.9995625095E-01 + 1.8683792722E-01 1.7424263357E-01 1.6217249646E-01 1.5062410033E-01 + 1.3959645380E-01 1.2908458786E-01 1.1908411059E-01 1.0958878635E-01 + 1.0059114418E-01 9.2083683330E-02 8.4056381276E-02 7.6500313885E-02 + 6.9403752540E-02 6.2755605957E-02 5.6543447984E-02 5.0754258899E-02 + 4.5374726418E-02 4.0390638638E-02 3.5787502546E-02 3.1550521091E-02 + 2.7664267876E-02 2.4113275888E-02 2.0881993745E-02 1.7953831480E-02 + 1.5313579003E-02 1.2944459444E-02 1.0830669709E-02 8.9565811653E-03 + 7.3050254242E-03 5.8617649047E-03 4.6101871077E-03 3.5353189670E-03 + 2.6231351342E-03 1.8568031558E-03 1.2244957924E-03 7.1145314742E-04 + 3.0398749557E-04 -8.9051522939E-06 -2.4166157102E-04 -4.0404358183E-04 + -5.0662623854E-04 -5.6194581045E-04 -5.7657207476E-04 -5.6075544754E-04 + -5.2282735721E-04 -4.6789193181E-04 -4.0496846495E-04 -3.3789566867E-04 + -2.7026100964E-04 -2.0946348948E-04 -1.5484602095E-04 -1.0898232458E-04 + -7.5354929872E-05 -5.0934286974E-05 -3.6698428998E-05 -3.1955472692E-05 + -3.0527339774E-05 -2.4594376958E-05 -1.3564940118E-05 -3.2121979946E-06 + 1.5707686451E-06 1.8510591901E-06 5.0997502442E-07 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 0.0000000000E+00 7.8147995169E-04 3.1239584188E-03 7.0215567989E-03 + 1.2464495942E-02 1.9439123871E-02 2.7927954469E-02 3.7909717009E-02 + 4.9359416381E-02 6.2248403811E-02 7.6544457872E-02 9.2211875516E-02 + 1.0921157285E-01 1.2750119535E-01 1.4703523714E-01 1.6776516904E-01 + 1.8963957485E-01 2.1260429560E-01 2.3660258123E-01 2.6157524925E-01 + 2.8746084984E-01 3.1419583708E-01 3.4171474542E-01 3.6995037130E-01 + 3.9883395893E-01 4.2829539003E-01 4.5826337663E-01 4.8866565672E-01 + 5.1942919167E-01 5.5048036535E-01 5.8174518394E-01 6.1314947612E-01 + 6.4461909280E-01 6.7608010590E-01 7.0745900601E-01 7.3868289706E-01 + 7.6967968958E-01 8.0037828945E-01 8.3070878377E-01 8.6060262214E-01 + 8.8999279297E-01 9.1881399464E-01 9.4700280088E-01 9.7449781978E-01 + 1.0012398461E+00 1.0271720067E+00 1.0522398977E+00 1.0763917152E+00 + 1.0995783762E+00 1.1217536327E+00 1.1428741736E+00 1.1628997219E+00 + 1.1817931236E+00 1.1995204145E+00 1.2160508980E+00 1.2313571957E+00 + 1.2454152933E+00 1.2582045850E+00 1.2697078886E+00 1.2799114739E+00 + 1.2888050635E+00 1.2963818210E+00 1.3026383707E+00 1.3075747180E+00 + 1.3111942652E+00 1.3135037675E+00 1.3145132314E+00 1.3142359035E+00 + 1.3126881944E+00 1.3098895815E+00 1.3058625122E+00 1.3006323353E+00 + 1.2942271862E+00 1.2866778825E+00 1.2780177942E+00 1.2682827005E+00 + 1.2575106905E+00 1.2457420120E+00 1.2330189270E+00 1.2193855624E+00 + 1.2048877556E+00 1.1895728956E+00 1.1734897605E+00 1.1566883514E+00 + 1.1392197233E+00 1.1211358133E+00 1.1024892670E+00 1.0833332632E+00 + 1.0637213375E+00 1.0437072051E+00 1.0233445839E+00 1.0026870176E+00 + 9.8178770009E-01 9.6069930103E-01 9.3947379334E-01 9.1816228334E-01 + 8.9681484380E-01 8.7548040777E-01 8.5420644581E-01 8.3303894426E-01 + 8.1202223184E-01 7.9119882559E-01 7.7060929153E-01 7.5029215612E-01 + 7.3028369192E-01 7.1061775709E-01 6.9132581669E-01 6.7243678426E-01 + 6.5397697896E-01 6.3596990791E-01 6.1843618745E-01 6.0139360667E-01 + 5.8485703184E-01 5.6883832994E-01 5.5334618531E-01 5.3838630201E-01 + 5.2396132146E-01 5.1007072670E-01 4.9671088877E-01 4.8387515969E-01 + 4.7155379753E-01 4.5973407522E-01 4.4840037177E-01 4.3753408130E-01 + 4.2711388404E-01 4.1711588803E-01 4.0751339144E-01 3.9827739875E-01 + 3.8937692574E-01 3.8077799218E-01 3.7244239955E-01 3.6432904772E-01 + 3.5639337214E-01 3.4859243713E-01 3.4088570271E-01 3.3323207774E-01 + 3.2560097591E-01 3.1796212422E-01 3.1029186228E-01 3.0257403690E-01 + 2.9479279838E-01 2.8694224500E-01 2.7901681947E-01 2.7101545700E-01 + 2.6294063371E-01 2.5479515002E-01 2.4658566641E-01 2.3831842368E-01 + 2.3000138169E-01 2.2164261424E-01 2.1325074818E-01 2.0483426554E-01 + 1.9640202661E-01 1.8796226583E-01 1.7952358496E-01 1.7109391032E-01 + 1.6268131707E-01 1.5429340790E-01 1.4593769932E-01 1.3762146859E-01 + 1.2935174509E-01 1.2113549642E-01 1.1297936087E-01 1.0489002086E-01 + 9.6873806697E-02 8.8937141180E-02 8.1086103072E-02 7.3326875738E-02 + 6.5665315284E-02 5.8107375885E-02 5.0658697293E-02 4.3325002214E-02 + 3.6111704509E-02 2.9024279821E-02 2.2067897231E-02 1.5247756997E-02 + 8.5687605369E-03 2.0357933537E-03 -4.3465338847E-03 -1.0573698191E-02 + -1.6641400948E-02 -2.2545534158E-02 -2.8282130695E-02 -3.3847550008E-02 + -3.9238175856E-02 -4.4450881879E-02 -4.9482425447E-02 -5.4330194591E-02 + -5.8991454332E-02 -6.3464015134E-02 -6.7745741267E-02 -7.1834853213E-02 + -7.5729850131E-02 -7.9429376272E-02 -8.2932569034E-02 -8.6238533552E-02 + -8.9346977884E-02 -9.2257631953E-02 -9.4970633059E-02 -9.7486368456E-02 + -9.9805434405E-02 -1.0192881598E-01 -1.0385763866E-01 -1.0559339191E-01 + -1.0713778485E-01 -1.0849277544E-01 -1.0966058175E-01 -1.1064371231E-01 + -1.1144480595E-01 -1.1206687217E-01 -1.1251304004E-01 -1.1278664884E-01 + -1.1289145238E-01 -1.1283104376E-01 -1.1260956942E-01 -1.1223115511E-01 + -1.1170000690E-01 -1.1102100352E-01 -1.1019842116E-01 -1.0923725367E-01 + -1.0814252573E-01 -1.0691899878E-01 -1.0557229773E-01 -1.0410736434E-01 + -1.0252951690E-01 -1.0084469141E-01 -9.9057801427E-02 -9.7174754141E-02 + -9.5201248785E-02 -9.3142476764E-02 -9.1004738376E-02 -8.8793322640E-02 + -8.6513659143E-02 -8.4172328749E-02 -8.1774089860E-02 -7.9324717856E-02 + -7.6830433429E-02 -7.4295904549E-02 -7.1727011211E-02 -6.9129439674E-02 + -6.6507774304E-02 -6.3867864338E-02 -6.1214800681E-02 -5.8553009801E-02 + -5.5888193228E-02 -5.3224825454E-02 -5.0567091627E-02 -4.7920430241E-02 + -4.5288711188E-02 -4.2675791340E-02 -4.0086736644E-02 -3.7524850345E-02 + -3.4993576159E-02 -3.2497506890E-02 -3.0039436708E-02 -2.7622318805E-02 + -2.5250183653E-02 -2.2925386675E-02 -2.0650325918E-02 -1.8428394421E-02 + -1.6261583887E-02 -1.4151690473E-02 -1.2101412318E-02 -1.0112447259E-02 + -8.1859657208E-03 -6.3239359323E-03 -4.5278147805E-03 -2.7981507313E-03 + -1.1361754499E-03 4.5687176818E-04 1.9810293547E-03 3.4357745313E-03 + 4.8201030841E-03 6.1345722331E-03 7.3791912921E-03 8.5535857656E-03 + 9.6584028716E-03 1.0694210131E-02 1.1661306453E-02 1.2560372392E-02 + 1.3392455269E-02 1.4158414511E-02 1.4859082575E-02 1.5495841458E-02 + 1.6069933377E-02 1.6582577671E-02 1.7035265156E-02 1.7429524025E-02 + 1.7766946306E-02 1.8049179436E-02 1.8277900336E-02 1.8454879979E-02 + 1.8582130007E-02 1.8661321340E-02 1.8694336931E-02 1.8683291291E-02 + 1.8630178487E-02 1.8536767850E-02 1.8405073346E-02 1.8237581457E-02 + 1.8035883926E-02 1.7801943060E-02 1.7538021480E-02 1.7246332179E-02 + 1.6928436493E-02 1.6586319284E-02 1.6222498441E-02 1.5838582041E-02 + 1.5436243384E-02 1.5017439644E-02 1.4584729079E-02 1.4139153224E-02 + 1.3682447181E-02 1.3216673480E-02 1.2743767861E-02 1.2264769402E-02 + 1.1781249039E-02 1.1295299373E-02 1.0808215231E-02 1.0321020089E-02 + 9.8350876254E-03 9.3524541060E-03 8.8738281220E-03 8.4001826460E-03 + 7.9326716292E-03 7.4731907333E-03 7.0219625404E-03 6.5798633383E-03 + 6.1478714926E-03 5.7275007326E-03 5.3187767150E-03 4.9223753836E-03 + 4.5390795888E-03 4.1700175399E-03 3.8150860233E-03 3.4747371118E-03 + 3.1495242456E-03 2.8402713493E-03 2.5467334801E-03 2.2691486469E-03 + 2.0078227902E-03 1.7633456519E-03 1.5353230341E-03 1.3237919611E-03 + 1.1288074571E-03 9.5077794934E-04 7.8915776391E-04 6.4379688060E-04 + 5.1453645719E-04 4.0155030142E-04 3.0423100338E-04 2.2222425673E-04 + 1.5519325798E-04 1.0679059079E-04 7.2726930789E-05 4.9315052014E-05 + 3.4202337633E-05 2.2197575789E-05 1.1904746202E-05 5.2045210825E-06 + 1.3973414112E-06 -5.2237946623E-07 -1.8013058224E-06 -1.9154271305E-06 + -1.2270326155E-06 -1.0670564411E-07 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 0.0000000000E+00 1.1919956725E-03 4.7619438270E-03 1.0691754666E-02 + 1.8951367717E-02 2.9498885227E-02 4.2280758114E-02 5.7232023706E-02 + 7.4276594240E-02 9.3327594922E-02 1.1428775010E-01 1.3704981590E-01 + 1.6149705757E-01 1.8750376936E-01 2.1493583491E-01 2.4365132561E-01 + 2.7350113454E-01 3.0432964315E-01 3.3597541795E-01 3.6827193433E-01 + 4.0104832406E-01 4.3413014392E-01 4.6734016147E-01 5.0049915523E-01 + 5.3342672540E-01 5.6594211200E-01 5.9786501668E-01 6.2901642493E-01 + 6.5921942472E-01 6.8830001864E-01 7.1608792571E-01 7.4241736936E-01 + 7.6712784821E-01 7.9006488649E-01 8.1108076087E-01 8.3003519992E-01 + 8.4679605373E-01 8.6123993101E-01 8.7325280030E-01 8.8273055135E-01 + 8.8957951791E-01 8.9371695570E-01 8.9507147505E-01 8.9358342605E-01 + 8.8920523425E-01 8.8190168531E-01 8.7165015711E-01 8.5844079827E-01 + 8.4227665627E-01 8.2317374456E-01 8.0116103954E-01 7.7628045475E-01 + 7.4858676566E-01 7.1814736788E-01 6.8504216454E-01 6.4936323882E-01 + 6.1121452961E-01 5.7071150784E-01 5.2798066059E-01 4.8315909889E-01 + 4.3639398052E-01 3.8784187980E-01 3.3766838643E-01 2.8604706248E-01 + 2.3315906167E-01 1.7919236705E-01 1.2434070143E-01 6.8803027369E-02 + 1.2782666294E-02 -4.3513685046E-02 -9.9876890441E-02 -1.5609613235E-01 + -2.1195990527E-01 -2.6725692129E-01 -3.2177712278E-01 -3.7531272368E-01 + -4.2765899893E-01 -4.7861530805E-01 -5.2798604626E-01 -5.7558158514E-01 + -6.2121919870E-01 -6.6472397112E-01 -7.0592968210E-01 -7.4467966602E-01 + -7.8082764100E-01 -8.1423850394E-01 -8.4478908790E-01 -8.7236887767E-01 + -8.9688068014E-01 -9.1824124540E-01 -9.3638183516E-01 -9.5124873467E-01 + -9.6280370476E-01 -9.7102437066E-01 -9.7590454432E-01 -9.7745447726E-01 + -9.7570104150E-01 -9.7068781183E-01 -9.6247522132E-01 -9.5114034814E-01 + -9.3677681855E-01 -9.1949458922E-01 -8.9941963728E-01 -8.7669368157E-01 + -8.5147360398E-01 -8.2393055432E-01 -7.9424959799E-01 -7.6262884598E-01 + -7.2927900977E-01 -6.9442179781E-01 -6.5828828022E-01 -6.2111872047E-01 + -5.8316138965E-01 -5.4467149112E-01 -5.0590633086E-01 -4.6712720332E-01 + -4.2859800147E-01 -3.9058156426E-01 -3.5333524637E-01 -3.1711322591E-01 + -2.8216723051E-01 -2.4873175782E-01 -2.1703197613E-01 -1.8728374122E-01 + -1.5968018921E-01 -1.3439271966E-01 -1.1157757280E-01 -9.1360103710E-02 + -7.3832235554E-02 -5.9062109017E-02 -4.7053180661E-02 -3.7747847093E-02 + -3.1052263078E-02 -2.6809896378E-02 -2.4848801716E-02 -2.4968446757E-02 + -2.6969758634E-02 -3.0649561731E-02 -3.5812036001E-02 -4.2291258034E-02 + -4.9914205599E-02 -5.8558933831E-02 -6.8104812818E-02 -7.8455893546E-02 + -8.9544828073E-02 -1.0130091747E-01 -1.1369124765E-01 -1.2667568440E-01 + -1.4023325424E-01 -1.5434519919E-01 -1.6899766506E-01 -1.8418081412E-01 + -1.9988409518E-01 -2.1609813091E-01 -2.3281209895E-01 -2.5001291153E-01 + -2.6768592506E-01 -2.8581314961E-01 -3.0437411463E-01 -3.2334537119E-01 + -3.4270018643E-01 -3.6240952754E-01 -3.8244090763E-01 -4.0275994298E-01 + -4.2332936363E-01 -4.4410996241E-01 -4.6506081035E-01 -4.8613863284E-01 + -5.0729994140E-01 -5.2849831415E-01 -5.4968868653E-01 -5.7082251806E-01 + -5.9185399440E-01 -6.1273354952E-01 -6.3341527563E-01 -6.5384970425E-01 + -6.7399132486E-01 -6.9379189034E-01 -7.1320663028E-01 -7.3218961277E-01 + -7.5069703358E-01 -7.6868630229E-01 -7.8611473603E-01 -8.0294399575E-01 + -8.1913266491E-01 -8.3464738867E-01 -8.4944822493E-01 -8.6350645766E-01 + -8.7678646359E-01 -8.8926168298E-01 -9.0090268147E-01 -9.1168448138E-01 + -9.2158451857E-01 -9.3057937648E-01 -9.3865349522E-01 -9.4578546610E-01 + -9.5196513411E-01 -9.5717731759E-01 -9.6141326271E-01 -9.6466543624E-01 + -9.6692654875E-01 -9.6819608107E-01 -9.6846956057E-01 -9.6775097279E-01 + -9.6604226107E-01 -9.6334871812E-01 -9.5967916988E-01 -9.5504086596E-01 + -9.4944758440E-01 -9.4291163046E-01 -9.3544859907E-01 -9.2707630703E-01 + -9.1781266974E-01 -9.0767931785E-01 -8.9669825468E-01 -8.8489326743E-01 + -8.7228981028E-01 -8.5891490472E-01 -8.4479611300E-01 -8.2996315975E-01 + -8.1444661182E-01 -7.9827713315E-01 -7.8148876956E-01 -7.6411359562E-01 + -7.4618561914E-01 -7.2774179241E-01 -7.0881490569E-01 -6.8944259520E-01 + -6.6966165345E-01 -6.4950654666E-01 -6.2901763751E-01 -6.0822993819E-01 + -5.8717930407E-01 -5.6590810628E-01 -5.4444832947E-01 -5.2283781816E-01 + -5.0111702520E-01 -4.7931710386E-01 -4.5747646104E-01 -4.3563222813E-01 + -4.1381466526E-01 -3.9206181792E-01 -3.7040683279E-01 -3.4887854867E-01 + -3.2751380914E-01 -3.0634144044E-01 -2.8538827343E-01 -2.6468911007E-01 + -2.4426840210E-01 -2.2415036396E-01 -2.0436695439E-01 -1.8493842619E-01 + -1.6588578836E-01 -1.4723742265E-01 -1.2900973273E-01 -1.1121999501E-01 + -9.3892373727E-02 -7.7039886778E-02 -6.0675654763E-02 -4.4819103250E-02 + -2.9480370624E-02 -1.4668143737E-02 -3.9673955145E-04 1.3326117738E-02 + 2.6496268294E-02 3.9104682534E-02 5.1145721544E-02 6.2619626274E-02 + 7.3522596691E-02 8.3850983337E-02 9.3609059025E-02 1.0279791726E-01 + 1.1141611469E-01 1.1947133842E-01 1.2696836363E-01 1.3391021642E-01 + 1.4030546139E-01 1.4616249536E-01 1.5148876674E-01 1.5629364397E-01 + 1.6058835540E-01 1.6438373360E-01 1.6769097926E-01 1.7052296146E-01 + 1.7289267245E-01 1.7481414964E-01 1.7630098986E-01 1.7736754772E-01 + 1.7802959019E-01 1.7830277758E-01 1.7820144971E-01 1.7774155807E-01 + 1.7694221813E-01 1.7581683261E-01 1.7438152132E-01 1.7265489426E-01 + 1.7065386355E-01 1.6839241043E-01 1.6588711980E-01 1.6315930720E-01 + 1.6022078573E-01 1.5708703438E-01 1.5377630771E-01 1.5030624111E-01 + 1.4668806047E-01 1.4293691974E-01 1.3907269177E-01 1.3510689039E-01 + 1.3105150639E-01 1.2692096758E-01 1.2273479110E-01 1.1849932799E-01 + 1.1422681417E-01 1.0993210232E-01 1.0562892683E-01 1.0132357361E-01 + 9.7026624063E-02 9.2752683103E-02 8.8510044909E-02 8.4304815236E-02 + 8.0145778879E-02 7.6046588510E-02 7.2010989413E-02 6.8044637776E-02 + 6.4154481109E-02 6.0352597694E-02 5.6639357789E-02 5.3019648050E-02 + 4.9498995595E-02 4.6086351203E-02 4.2781023311E-02 3.9586485517E-02 + 3.6506809743E-02 3.3548061449E-02 3.0709071800E-02 2.7991893532E-02 + 2.5399075377E-02 2.2934530265E-02 2.0596657362E-02 1.8386310616E-02 + 1.6304609933E-02 1.4353867343E-02 1.2532146202E-02 1.0839334166E-02 + 9.2753477363E-03 7.8412501190E-03 6.5348920543E-03 5.3554112534E-03 + 4.3018836898E-03 3.3741211461E-03 2.5700680758E-03 1.8882181276E-03 + 1.3270632494E-03 9.1967724861E-04 6.3039526964E-04 4.2880211273E-04 + 2.9607577370E-04 1.9119926976E-04 1.0280412506E-04 4.5118178085E-05 + 1.2193178537E-05 -4.4949767497E-06 -1.5499896750E-05 -1.6481889075E-05 + -1.0558384152E-05 -9.1818193541E-07 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 1.3605849050E+01 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 8.7957345917E-01 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 5.9060233804E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.9822026495E-01 + + + + + + 0.0000000000E+00 2.1715094897E-06 8.7564102574E-06 1.9965954979E-05 + 3.6152682474E-05 5.7811088589E-05 8.5578554165E-05 1.2023651890E-04 + 1.6271188688E-04 2.1407864653E-04 2.7555968502E-04 3.4852877423E-04 + 4.3451270306E-04 5.3519352841E-04 6.5241091476E-04 7.8816453067E-04 + 9.4461646851E-04 1.1240936520E-03 1.3290901956E-03 1.5622696772E-03 + 1.8264672873E-03 2.1246918142E-03 2.4601274265E-03 2.8361352149E-03 + 3.2562544526E-03 3.7242035371E-03 4.2438805747E-03 4.8193635718E-03 + 5.4549101991E-03 6.1549570916E-03 6.9241186534E-03 7.7671853387E-03 + 8.6891213818E-03 9.6950619569E-03 1.0790309686E-02 1.1980330651E-02 + 1.3270749561E-02 1.4667344495E-02 1.6176040838E-02 1.7802904518E-02 + 1.9554134694E-02 2.1436055670E-02 2.3455108141E-02 2.5617839781E-02 + 2.7930895154E-02 3.0401004973E-02 3.3034974718E-02 3.5839672635E-02 + 3.8822017219E-02 4.1988963987E-02 4.5347491489E-02 4.8904587415E-02 + 5.2667234235E-02 5.6642392644E-02 6.0836987615E-02 6.5257891453E-02 + 6.9911907561E-02 7.4805754571E-02 7.9946048386E-02 8.5339286328E-02 + 9.0991829396E-02 9.6909884437E-02 1.0309948939E-01 1.0956649185E-01 + 1.1631653551E-01 1.2335504268E-01 1.3068719452E-01 1.3831791740E-01 + 1.4625186601E-01 1.5449340633E-01 1.6304659974E-01 1.7191518898E-01 + 1.8110258286E-01 1.9061184222E-01 2.0044566587E-01 2.1060637725E-01 + 2.2109591298E-01 2.3191581081E-01 2.4306719874E-01 2.5455078491E-01 + 2.6636684836E-01 2.7851523059E-01 2.9099532805E-01 3.0380608560E-01 + 3.1694599083E-01 3.3041306940E-01 3.4420488139E-01 3.5831851864E-01 + 3.7275060309E-01 3.8749728624E-01 4.0255424955E-01 4.1791670600E-01 + 4.3357940267E-01 4.4953662431E-01 4.6578219805E-01 4.8230949907E-01 + 4.9911145737E-01 5.1618056081E-01 5.3350887577E-01 5.5108804818E-01 + 5.6890931531E-01 5.8696351805E-01 6.0524111331E-01 6.2373218122E-01 + 6.4242644857E-01 6.6131331266E-01 6.8038183935E-01 6.9962078570E-01 + 7.1901860499E-01 7.3856348662E-01 7.5824338325E-01 7.7804600062E-01 + 7.9795881841E-01 8.1796910763E-01 8.3806401676E-01 8.5823051450E-01 + 8.7845541180E-01 8.9872542015E-01 9.1902720615E-01 9.3934733768E-01 + 9.5967227284E-01 9.7998856349E-01 1.0002827155E+00 1.0205411900E+00 + 1.0407505661E+00 1.0608974985E+00 1.0809686367E+00 1.1009507982E+00 + 1.1208309662E+00 1.1405961513E+00 1.1602336211E+00 1.1797308514E+00 + 1.1990753747E+00 1.2182551113E+00 1.2372581675E+00 1.2560727701E+00 + 1.2746876527E+00 1.2930916473E+00 1.3112739288E+00 1.3292240805E+00 + 1.3469318026E+00 1.3643873694E+00 1.3815812455E+00 1.3985042707E+00 + 1.4151477579E+00 1.4315031756E+00 1.4475626393E+00 1.4633184333E+00 + 1.4787633540E+00 1.4938905619E+00 1.5086935679E+00 1.5231663992E+00 + 1.5373033174E+00 1.5510991786E+00 1.5645490712E+00 1.5776486137E+00 + 1.5903937343E+00 1.6027808153E+00 1.6148065974E+00 1.6264682312E+00 + 1.6377632344E+00 1.6486895225E+00 1.6592453510E+00 1.6694293898E+00 + 1.6792405909E+00 1.6886783588E+00 1.6977423015E+00 1.7064325290E+00 + 1.7147492655E+00 1.7226932894E+00 1.7302654040E+00 1.7374670092E+00 + 1.7442994544E+00 1.7507647060E+00 1.7568646312E+00 1.7626016985E+00 + 1.7679782717E+00 1.7729972480E+00 1.7776614744E+00 1.7819741950E+00 + 1.7859387338E+00 1.7895585939E+00 1.7928375763E+00 1.7957793520E+00 + 1.7983882016E+00 1.8006678762E+00 1.8026231340E+00 1.8042578257E+00 + 1.8055768864E+00 1.8065845304E+00 1.8072856408E+00 1.8076848775E+00 + 1.8077869473E+00 1.8075969879E+00 1.8071194511E+00 1.8063599331E+00 + 1.8053227930E+00 1.8040134879E+00 1.8024368484E+00 1.8005979067E+00 + 1.7985020188E+00 1.7961537721E+00 1.7935588868E+00 1.7907218588E+00 + 1.7876480501E+00 1.7843425148E+00 1.7808099783E+00 1.7770560691E+00 + 1.7730851293E+00 1.7689025395E+00 1.7645131169E+00 1.7599215406E+00 + 1.7551332461E+00 1.7501524539E+00 1.7449843435E+00 1.7396336057E+00 + 1.7341046645E+00 1.7284028460E+00 1.7225321567E+00 1.7164974461E+00 + 1.7103033959E+00 1.7039541299E+00 1.6974545973E+00 1.6908088787E+00 + 1.6840212866E+00 1.6770965847E+00 1.6700385453E+00 1.6628516524E+00 + 1.6555401646E+00 1.6481078963E+00 1.6405593347E+00 1.6328982877E+00 + 1.6251285960E+00 1.6172546988E+00 1.6092800182E+00 1.6012084730E+00 + 1.5930441679E+00 1.5847904442E+00 1.5764511720E+00 1.5680301195E+00 + 1.5595305660E+00 1.5509562874E+00 1.5423107514E+00 1.5335971532E+00 + 1.5248191424E+00 1.5159799240E+00 1.5070825885E+00 1.4981306331E+00 + 1.4891270390E+00 1.4800747730E+00 1.4709771623E+00 1.4618369983E+00 + 1.4526571051E+00 1.4434406238E+00 1.4341901866E+00 1.4249084611E+00 + 1.4155983915E+00 1.4062624763E+00 1.3969032155E+00 1.3875233491E+00 + 1.3781252617E+00 1.3687112799E+00 1.3592839345E+00 1.3498455112E+00 + 1.3403981608E+00 1.3309442047E+00 1.3214858373E+00 1.3120250364E+00 + 1.3025639175E+00 1.2931045841E+00 1.2836488484E+00 1.2741986288E+00 + 1.2647559292E+00 1.2553224088E+00 1.2458998253E+00 1.2364899982E+00 + 1.2270945182E+00 1.2177149741E+00 1.2083529910E+00 1.1990100960E+00 + 1.1896877214E+00 1.1803873173E+00 1.1711103190E+00 1.1618580261E+00 + 1.1526317456E+00 1.1434327681E+00 1.1342623023E+00 1.1251215259E+00 + 1.1160115815E+00 1.1069335742E+00 1.0978885743E+00 1.0888776093E+00 + 1.0799016351E+00 1.0709616411E+00 1.0620585497E+00 1.0531932098E+00 + 1.0443664647E+00 1.0355791717E+00 1.0268321107E+00 1.0181259360E+00 + 1.0094614527E+00 1.0008393599E+00 9.9226026254E-01 9.8372474481E-01 + 9.7523349765E-01 9.6678708973E-01 9.5838593794E-01 9.5003063110E-01 + 9.4172171037E-01 9.3345961893E-01 9.2524462265E-01 9.1707731750E-01 + 9.0895809901E-01 9.0088724426E-01 8.9286502895E-01 8.8489192614E-01 + 8.7696823614E-01 8.6909407715E-01 8.6126975769E-01 8.5349562740E-01 + 8.4577190083E-01 8.3809854977E-01 8.3047592524E-01 8.2290425909E-01 + 8.1538368960E-01 8.0791405819E-01 8.0049575688E-01 7.9312891078E-01 + 7.8581356861E-01 7.7854952735E-01 7.7133714192E-01 7.6417646865E-01 + 7.5706747626E-01 7.5000993485E-01 7.4300414673E-01 7.3605011734E-01 + 7.2914775745E-01 7.2229679037E-01 7.1549748256E-01 7.0874979619E-01 + 7.0205360805E-01 6.9540856842E-01 6.8881492655E-01 6.8227260825E-01 + 6.7578148165E-01 6.6934109343E-01 6.6295169476E-01 6.5661318132E-01 + 6.5032541029E-01 6.4408787667E-01 6.3790076733E-01 6.3176398132E-01 + 6.2567735246E-01 6.1964040597E-01 6.1365316655E-01 6.0771557906E-01 + 6.0182745854E-01 5.9598838960E-01 5.9019818967E-01 5.8445687244E-01 + 5.7876423828E-01 5.7311996033E-01 5.6752360503E-01 5.6197527611E-01 + 5.5647476340E-01 5.5102182365E-01 5.4561583669E-01 5.4025690926E-01 + 5.3494485906E-01 5.2967943792E-01 5.2446015783E-01 5.1928679085E-01 + 5.1415930019E-01 5.0907743621E-01 5.0404088008E-01 4.9904902244E-01 + 4.9410198714E-01 4.8919952622E-01 4.8434136294E-01 4.7952694941E-01 + 4.7475610424E-01 4.7002873886E-01 4.6534458243E-01 4.6070330844E-01 + 4.5610426374E-01 4.5154756874E-01 4.4703296083E-01 4.4256015140E-01 + 4.3812863507E-01 4.3373810026E-01 4.2938850323E-01 4.2507956700E-01 + 4.2081098975E-01 4.1658212024E-01 4.1239294618E-01 4.0824327443E-01 + 4.0413281782E-01 4.0006121805E-01 3.9602785502E-01 3.9203281933E-01 + 3.8807583962E-01 3.8415662237E-01 3.8027470990E-01 3.7642968540E-01 + 3.7262154596E-01 3.6885001608E-01 3.6511479936E-01 3.6141536736E-01 + 3.5775145919E-01 3.5412299976E-01 3.5052971256E-01 3.4697130130E-01 + 3.4344719454E-01 3.3995723727E-01 3.3650130636E-01 3.3307912693E-01 + 3.2969040551E-01 3.2633455395E-01 3.2301147301E-01 3.1972101645E-01 + 3.1646291342E-01 3.1323687556E-01 3.1004232297E-01 3.0687916303E-01 + 3.0374725124E-01 3.0064632274E-01 2.9757609626E-01 2.9453602411E-01 + 2.9152597269E-01 2.8854582305E-01 2.8559531803E-01 2.8267418512E-01 + 2.7978193216E-01 2.7691833873E-01 2.7408333382E-01 2.7127666938E-01 + 2.6849808297E-01 2.6574716067E-01 2.6302355208E-01 2.6032725424E-01 + 2.5765802930E-01 2.5501562603E-01 2.5239973026E-01 2.4980982278E-01 + 2.4724598545E-01 2.4470799151E-01 2.4219560171E-01 2.3970856424E-01 + 2.3724632943E-01 2.3480890576E-01 2.3239613486E-01 2.3000779008E-01 + 2.2764363309E-01 2.2530325492E-01 2.2298640393E-01 2.2069305439E-01 + 2.1842299263E-01 2.1617599417E-01 2.1395181027E-01 2.1174990097E-01 + 2.0957038110E-01 2.0741305021E-01 2.0527769779E-01 2.0316410323E-01 + 2.0107186178E-01 1.9900079192E-01 1.9695085130E-01 1.9492184341E-01 + 1.9291356241E-01 1.9092579302E-01 1.8895801126E-01 1.8701033219E-01 + 1.8508257842E-01 1.8317455866E-01 1.8128607296E-01 1.7941680534E-01 + 1.7756647011E-01 1.7573509008E-01 1.7392248827E-01 1.7212847969E-01 + 1.7035287127E-01 1.6859527041E-01 1.6685559176E-01 1.6513377150E-01 + 1.6342963917E-01 1.6174301686E-01 1.6007371919E-01 1.5842130432E-01 + 1.5678583317E-01 1.5516717894E-01 1.5356517835E-01 1.5197966125E-01 + 1.5041043357E-01 1.4885707937E-01 1.4731970418E-01 1.4579815874E-01 + 1.4429228745E-01 1.4280192834E-01 1.4132687120E-01 1.3986677081E-01 + 1.3842170754E-01 1.3699153964E-01 1.3557611955E-01 1.3417529384E-01 + 1.3278885628E-01 1.3141649105E-01 1.3005827182E-01 1.2871406463E-01 + 1.2738373017E-01 1.2606712370E-01 1.2476406116E-01 1.2347421844E-01 + 1.2219767949E-01 1.2093431829E-01 1.1968400384E-01 1.1844660022E-01 + 1.1722196165E-01 1.1600972237E-01 1.1480999148E-01 1.1362265090E-01 + 1.1244757799E-01 1.1128464555E-01 1.1013372180E-01 1.0899448620E-01 + 1.0786696983E-01 1.0675110095E-01 1.0564676518E-01 1.0455384397E-01 + 1.0347221453E-01 1.0240162905E-01 1.0134199942E-01 1.0029331681E-01 + 9.9255474932E-02 9.8228363670E-02 9.7211869050E-02 9.6205827489E-02 + 9.5210009780E-02 9.4224478660E-02 9.3249135724E-02 9.2283879059E-02 + 9.1328603222E-02 9.0383199225E-02 8.9447397526E-02 8.8521221200E-02 + 8.7604618042E-02 8.6697494053E-02 8.5799752009E-02 8.4911291446E-02 + 8.4031950265E-02 8.3161557834E-02 8.2300158864E-02 8.1447666942E-02 + 8.0603992714E-02 7.9769043871E-02 7.8942725128E-02 7.8124806665E-02 + 7.7315288050E-02 7.6514137183E-02 7.5721272206E-02 7.4936608565E-02 + 7.4160058997E-02 7.3391518706E-02 7.2630756973E-02 7.1877854460E-02 + 7.1132736410E-02 7.0395325613E-02 6.9665542394E-02 6.8943304597E-02 + 6.8228469607E-02 6.7520910217E-02 6.6820662299E-02 6.6127655565E-02 + 6.5441817485E-02 6.4763073276E-02 6.4091345890E-02 6.3426471859E-02 + 6.2768392543E-02 6.2117114539E-02 6.1472572020E-02 6.0834697111E-02 + 6.0203419881E-02 5.9578668330E-02 5.8960272941E-02 5.8348212097E-02 + 5.7742477641E-02 5.7143008149E-02 5.6549740333E-02 5.5962609029E-02 + 5.5381547189E-02 5.4806391960E-02 5.4237131031E-02 5.3673754498E-02 + 5.3116205248E-02 5.2564424472E-02 5.2018351651E-02 5.1477924552E-02 + 5.0942997929E-02 5.0413544741E-02 4.9889564660E-02 4.9371004763E-02 + 4.8857810578E-02 4.8349926083E-02 + + diff --git a/susyexists/src/__init__.py b/susyexists/src/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/__pycache__/__init__.cpython-310.pyc b/susyexists/src/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..d759392a Binary files /dev/null and b/susyexists/src/__pycache__/__init__.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/compute.cpython-310.pyc b/susyexists/src/__pycache__/compute.cpython-310.pyc new file mode 100644 index 00000000..b6ff8ce7 Binary files /dev/null and b/susyexists/src/__pycache__/compute.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/generate.cpython-310.pyc b/susyexists/src/__pycache__/generate.cpython-310.pyc new file mode 100644 index 00000000..e910714a Binary files /dev/null and b/susyexists/src/__pycache__/generate.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/kpoints.cpython-310.pyc b/susyexists/src/__pycache__/kpoints.cpython-310.pyc new file mode 100644 index 00000000..d29db889 Binary files /dev/null and b/susyexists/src/__pycache__/kpoints.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/model.cpython-310.pyc b/susyexists/src/__pycache__/model.cpython-310.pyc new file mode 100644 index 00000000..4f50d940 Binary files /dev/null and b/susyexists/src/__pycache__/model.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/plots.cpython-310.pyc b/susyexists/src/__pycache__/plots.cpython-310.pyc new file mode 100644 index 00000000..5b671f54 Binary files /dev/null and b/susyexists/src/__pycache__/plots.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/reads.cpython-310.pyc b/susyexists/src/__pycache__/reads.cpython-310.pyc new file mode 100644 index 00000000..129db1cf Binary files /dev/null and b/susyexists/src/__pycache__/reads.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/scaffold.cpython-310.pyc b/susyexists/src/__pycache__/scaffold.cpython-310.pyc new file mode 100644 index 00000000..361cfe82 Binary files /dev/null and b/susyexists/src/__pycache__/scaffold.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/structure.cpython-310.pyc b/susyexists/src/__pycache__/structure.cpython-310.pyc new file mode 100644 index 00000000..ff84b709 Binary files /dev/null and b/susyexists/src/__pycache__/structure.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/utils.cpython-310.pyc b/susyexists/src/__pycache__/utils.cpython-310.pyc new file mode 100644 index 00000000..6d6d5b0d Binary files /dev/null and b/susyexists/src/__pycache__/utils.cpython-310.pyc differ diff --git a/susyexists/src/__pycache__/writes.cpython-310.pyc b/susyexists/src/__pycache__/writes.cpython-310.pyc new file mode 100644 index 00000000..80ea915f Binary files /dev/null and b/susyexists/src/__pycache__/writes.cpython-310.pyc differ diff --git a/susyexists/src/adiabatic.sh b/susyexists/src/adiabatic.sh new file mode 100644 index 00000000..80d7c779 --- /dev/null +++ b/susyexists/src/adiabatic.sh @@ -0,0 +1,88 @@ +#!/bin/zsh + +#### Local testing variables #### +#Path to quantum-espresso +QE=/home/susy/q-e/bin/ +#Number of cores +SLURM_NTASKS=4 + +#Initial degauss value (0 for POSCAR initialization) +initial=0 +#POSCAR file +POSCAR=C.poscar +project_name=Graphene +pw_json=pw.json +#vc-relax k points +vc_relax_k=('1 1 1 0 0 0') +relax_k=('1 1 1 0 0 0') +scf_k=('1 1 1 0 0 0') + + +echo "Espresso Machine is starting" +#Smearing parameters +for sigma in 0.05 +do +echo "Adiabatic automation for $sigma is started" + +#Crystal relaxation +if [ $initial -eq 0 ] +then + echo "Generating crystal relaxation input from POSCAR for $sigma" + python run.py -n $project_name -c vc-relax -j $pw_json -d $sigma -p $POSCAR -k ${vc_relax_k[@]} +else + echo "Generating crystal relaxation input from output for $sigma" + python run.py -n $project_name -c vc-relax -j $pw_json -d $sigma -i ./$project_name/$initial/vc-relax.out -k ${vc_relax_k[@]} +fi + +echo "Calculating crystal relaxation for $sigma" +mpirun -np $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/vc-relax.in > ./$project_name/$sigma/vc-relax.out +echo "Crystal relaxation for $sigma is finished" + +#Atom Relaxation +echo "Generating relaxation input for $sigma" +python run.py -n $project_name -c relax -j $pw_json -d $sigma -k ${relax_k[@]} -l mono +echo "Starting relaxation for $sigma" +mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/relax.in > ./$project_name/$sigma/relax.out +echo "Atom relaxation for $sigma is finished" + +#Scf calculation +echo "Scf input for $sigma is generated" +python run.py -n $project_name -c scf -j $pw_json -d $sigma -k ${scf_k[@]} +echo "Scf calculation for $sigma is started" +mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/scf.in > ./$project_name/$sigma/scf.out +echo "Scf calculation for $sigma is finished" + +#Band calculation +echo "Band calculation input for $sigma is generated" +python run.py -n $project_name -c bands -j $pw_json -d $sigma +echo "Band calculation for $sigma is started" +mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/bands.in > ./$project_name/$sigma/bands.out +echo "Band-pp for $sigma is generated" +python run.py -n $project_name -c bands-pp -j $pw_json -d $sigma +echo "Band-pp calculation $sigma is started" +$QE/bands.x -inp ./$project_name/$sigma/bands-pp.in > ./$project_name/$sigma/bands-pp.out +mkdir ./$project_name/plots/ 2> /dev/null +python ./src/plot_band.py -n $project_name -d $sigma + +echo "Adiabatic automation for $sigma is completed" +##Memorize the last calculation +initial=$sigma +done + +echo "Adiabatic automation is completed" +echo "vc-relax > relax > scf > band" + +# # mkdir dyn +# # mkdir dyn/$sigma/ +# # python run.py -n $project_name -c ph -j $pw_json -d $sigma +# # mpirun -n 256 $QE/ph.x -npool 256 -inp ./inputs/$sigma-ph.in > ./outputs/$sigma-ph.out +# # python run.py -n $project_name -c q2r -j $pw_json -d $sigma +# # $QE/q2r.x < ./inputs/$sigma-q2r.in > ./outputs/$sigma-q2r.out +# # python run.py -n $project_name -c matdyn -j $pw_json -d $sigma +# # $QE/matdyn.x < ./inputs/$sigma-matdyn.in > ./outputs/$sigma-matdyn.out +# # python run.py -n $project_name -c plotband -j $pw_json -d $sigma +# # cd ./dyn/$sigma/ +# # $QE/plotband.x < $sigma-plotband.in > $sigma-plotband.out +# # cd ../.. +# # bash ph.sh $QE $sigma +# python ph_plot.py -j $pw_json -d $sigma diff --git a/susyexists/src/compute.py b/susyexists/src/compute.py new file mode 100644 index 00000000..9024bd8d --- /dev/null +++ b/susyexists/src/compute.py @@ -0,0 +1,20 @@ +import subprocess + +def run_pw(project_id,job_id,calculation,num_core): + if calculation == 'bands-pp': + p = subprocess.Popen(f"mpirun -np {num_core} bands.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p.wait() + else: + p = subprocess.Popen(f"mpirun -np {num_core} pw.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p.wait() + +def run_ph(project_id,job_id,calculation,num_core): + if calculation == 'ph': + p = subprocess.Popen(f"mpirun -np {num_core} ph.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p.wait() + if calculation == 'q2r': + p = subprocess.Popen(f"mpirun -np {num_core} q2r.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p.wait() + if calculation == 'matdyn': + p = subprocess.Popen(f"mpirun -np {num_core} matdyn.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p.wait() \ No newline at end of file diff --git a/susyexists/src/generate.py b/susyexists/src/generate.py new file mode 100644 index 00000000..0bde9041 --- /dev/null +++ b/susyexists/src/generate.py @@ -0,0 +1,176 @@ +from . import scaffold +from . import reads +from . import utils +import os +import sys + + +def pw_input(project_id, calculation,config=False, degauss=None, job_id=None, initial_guess=None, k_points=None, poscar=None, layer=None, lattice_constant=False,atomic_positions=False,pseudo=False): + + #Check file name, if it is None, uses degauss instead + if (not job_id): + if (degauss): + job_id = degauss + else: + # sys.stdout.writelines("No file name \n") + # print("No file name") + raise Exception("Define a job_id") + + #Default config + if config==False: + config = utils.configure_pw() + + #Create directory for input files + try: + os.makedirs(f'./Projects/') + except: + pass + try: + os.makedirs(f'./Projects/{project_id}') + os.makedirs(f'./Projects/{project_id}/{job_id}') + except: + try: + os.makedirs(f'./Projects/{project_id}/{job_id}') + except: + pass + + + # Set parameters from input + config["file_path"] = f"./Projects/{project_id}/{job_id}/{calculation}.in" + + #If degauss is given explicitly use it instead + if(degauss!=None): + config["system"]["degauss"] = degauss + config["control"]["outdir"] = f"./Projects/{project_id}/{job_id}/" + # nat = int(config["system"]['nat']) + + + + + if calculation == 'vc-relax': + # Import initial cell and atom parameters + if poscar != None: + cell, atoms = reads.read_poscar(f'{poscar}') + elif initial_guess != None: + cell, atoms = reads.read_vc_relax(f"{initial_guess}") + else: + try: + cell, atoms = config['cell_parameters'], config['atomic_positions'] + except: + raise Exception("PLease enter atomic position and lattice constants") + + elif calculation == 'relax': + if poscar != None: + cell, atoms = reads.read_poscar(f'{poscar}') + try: + cell, atoms = reads.read_vc_relax(f"./Projects/{project_id}/{job_id}/vc-relax.out") + except: + try: + cell, atoms = config['cell_parameters'], config['atomic_positions'] + except: + raise Exception("PLease enter atomic position and lattice constants") + + + else: + if poscar != None: + cell, atoms = reads.read_poscar(f'{poscar}') + try: + cell, atoms = reads.read_vc_relax(f"./Projects/{project_id}/{job_id}/vc-relax.out") + try: + atoms = reads.read_relax(f"./Projects/{project_id}/{job_id}/relax.out") + except: + pass + except: + try: + cell, atoms = config['cell_parameters'], config['atomic_positions'] + except: + raise Exception("PLease enter atomic position and lattice constants") + + if(layer=='mono'): + atoms = utils.make_monolayer(atoms) + + if k_points != None: + config['k_points'] = k_points + + if(lattice_constant): + cell=lattice_constant + if(atomic_positions): + atoms=atomic_positions + + + + + #Check for pseudopotentials + if pseudo==False: + config['atomic_species']=utils.default_pseudo(atoms) + + config["control"]['prefix'] = job_id + config["system"]['nat'] = len(atoms) + #check types of atoms + try: + config["system"]['ntyp'] + except: + config["system"]['ntyp'] = utils.atom_type(atoms) + + #check ibrav + try: + config["system"]['ibrav'] + except: + config["system"]['ibrav'] = 0 + config['atomic_positions'] = atoms + config['cell_parameters'] = cell + config["control"]['calculation'] = calculation + + if calculation == 'bands-pp': + scaffold.bands_pp(config) + else: + scaffold.pw(config) + return + + +def ph_input(project_id,calculation,job_id='default',config=False): + #Default config + if config==False: + config = utils.configure_ph() + # Set parameters from input + config["file_path"] = f"./Projects/{project_id}/{job_id}/{calculation}.in" + if calculation == 'ph': + config["inputph"]["outdir"] = f"./Projects/{project_id}/{job_id}/" + config["inputph"]['prefix'] = job_id + config["inputph"]["fildyn"]= f'./Projects/{project_id}/{job_id}/{job_id}.dyn' + scaffold.ph(config) + elif calculation == 'q2r': + config['input']['fildyn'] = f'./Projects/{project_id}/{job_id}/{job_id}.dyn' + config['input']['flfrc'] = f'./Projects/{project_id}/{job_id}/{job_id}.fc' + scaffold.q2r(config) + elif calculation == 'matdyn': + config['input']['flfrq'] = f'./Projects/{project_id}/{job_id}/{job_id}.freq' + config['input']['flfrc'] = f'./Projects/{project_id}/{job_id}/{job_id}.fc' + scaffold.matdyn(config) + elif calculation == 'plotband': + scaffold.plotband(config) + elif calculation == "ph_plot": + scaffold.ph_plot(config) + + +def runner(project_name,iteration,file_names,calculation,qe_path,ncore): + pre = f'''QE={qe_path} +SLURM_NTASKS={ncore} +project_name={project_name} + ''' + # print(pre) + post =f''' +echo Starting {iteration} calculation +for file_name in {" ".join(file_names)} +do +echo $file_name is started +mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$file_name/{calculation}.in > ./$project_name/$file_name/{calculation}.out +echo $file_name is done +done +echo All {iteration} calculations are completed + ''' + # print(post) + with open(f"./{iteration}.sh", 'w') as file: + file.write(pre) + file.write(post) + return \ No newline at end of file diff --git a/susyexists/src/kpoints.py b/susyexists/src/kpoints.py new file mode 100644 index 00000000..d302d879 --- /dev/null +++ b/susyexists/src/kpoints.py @@ -0,0 +1,35 @@ + +point_coordinate = {'K':[0.33333333333,0.3333333333,0],'M':[0,0.5,0],'G':[0,0,0]} + +def band_points (points): + point_list =[] + for point in points: + coordinate = symmetry_coordinate(point) + point_list.append(coordinate) + return point_list + +def symmetry_coordinate(point): + point = point.upper() + coordinate = point_coordinate[point] + return coordinate + +# def band_input(points,num_points): +# coordinates = band_points(points) +# parameter = [] +# for j,i in enumerate(coordinates): +# input_line = {'x':str(i[0]),'y':str(i[1]),'z':str(i[2]),'number':str(num_points),'label':f" ! {points[j].upper()}"} +# parameter.append(input_line) +# return parameter + + +def band_input(path,points,num_points): + parameter = [] + for k,i in enumerate(path): + for j in points: + if i.upper() == j[0].upper(): + if k == len(path)-1: + input_line = {'x':str(j[1]),'y':str(j[2]),'z':str(j[3]),'number':str(1),'label':f" ! {j[0].upper()}"} + else: + input_line = {'x':str(j[1]),'y':str(j[2]),'z':str(j[3]),'number':str(num_points),'label':f" ! {j[0].upper()}"} + parameter.append(input_line) + return parameter diff --git a/susyexists/src/model.py b/susyexists/src/model.py new file mode 100644 index 00000000..0cfc6b05 --- /dev/null +++ b/susyexists/src/model.py @@ -0,0 +1,142 @@ +from . import utils +from . import reads +from . import generate +from . import compute +from . import kpoints +from . import plots +from . import structure +class pw: + def __init__(self,project_id): + self.project_id = project_id + self.config = utils.configure('pw') + self.atom = False + self.lattice = False + self.calculation=False + self.job_id = 'results' + self.path = False + self.poscar= False + + def from_poscar(self,directory): + self.poscar=directory + lattice, atom = reads.read_poscar(directory) + self.config['atomic_positions'] = atom + self.config['cell_parameters'] = lattice + + def from_json(self,data=False,path=False): + lattice, atom = reads.read_json(data=data,path=path) + self.config['atomic_positions'] = atom + self.config['cell_parameters'] = lattice + + def set_calculation(self,calculation_type): + self.calculation = calculation_type + self.config['control']['calculation'] = calculation_type + + + def create_input(self,layer="False"): + generate.pw_input(project_id=self.project_id,calculation=self.calculation,job_id=self.job_id, config=self.config,layer=layer) + + def calculate(self, num_core=1): + compute.run_pw(self.project_id,self.job_id,self.calculation,num_core) + def band_points(self,path,number): + self.path=path + points = self.get_points() + k_path = kpoints.band_input(path,points,number) + self.config['k_points_bands'] = k_path + + def ecutwfc(self,number): + self.config['system']['ecutwfc'] = number + def conv_thr(self,number): + self.config['electrons']['conv_thr']=number + + def k_points(self,number): + if type(number) == int : + self.config['k_points']=f'{number} {number} {number} 0 0 0' + elif len(number) == 3: + self.config['k_points']=f'{number[0]} {number[1]} {number[2]} 0 0 0' + else: + raise Exception("K points can be either a number or an array with 3 enteries") + + def plot_electron(self,ylim=False,show=False,save=False): + plots.plot_electron(self,ylim,show,save) + + def nbnd(self,number): + self.config['system']['nbnd']=number + + def get_nbnd(self): + return int(reads.read_num_bands(self)) + + def mixing_mode(self,value): + self.config['electrons']['mixing_mode']=value + def smearing(self,value): + self.config['system']['smearing'] = value + def degauss(self,value): + self.config['system']['degauss'] = value + + def get_primitive(self,file='vasp-ase'): + lattice,atoms,kpoints = structure.primitive(self.poscar,file) + self.config['atomic_positions'] = atoms + self.config['cell_parameters']=lattice + + def get_points(self,file='vasp-ase'): + lattice,atoms,kpoints = structure.primitive(self.poscar,file) + self.points=kpoints + return kpoints + + def vc_relax(self,num_core=1): #Crystal optimization + self.set_calculation(calculation_type='vc-relax') #set calculation + self.create_input() #create input + self.calculate(num_core) #run calculation + + def relax(self,num_core=1,layer=False): #Atomic optimization + self.set_calculation(calculation_type='relax') #set calculation + self.create_input(layer=layer) #create mono-layer input + self.calculate(num_core) #run calculation + + def scf(self,num_core=1): #Scf calculation + self.set_calculation(calculation_type='scf') #set calculation + self.create_input() #create input + self.calculate(num_core) #run calculation + def bands(self,path,num_points,num_core): #Band calculation + self.band_points(path,num_points) #define path + self.set_calculation(calculation_type='bands') #set calculation + self.create_input() #create input + self.calculate(num_core) #run calculations + self.set_calculation('bands-pp') #set calculaion + self.create_input() #create input + self.calculate( ) #run calculation + def test(self,parameter_name,conv_thr,start,end,step,num_core,debug=False,out=False): + result = utils.test_parameter(self=self,parameter_name=parameter_name,conv_thr=conv_thr,start=start,end=end,step=step,num_core=num_core,debug=debug,out=out) + # if parameter=='ecutwfc': + # result = utils.test_ecutwfc(self=self,start=start,end=end,step=step,num_core=num_core,debug=debug) + # elif parameter=='kpoints': + # result = utils.test_k(self=self,start=start,end=end,step=step,num_core=num_core,debug=debug) + return result + +class ph: + def __init__(self,project_id): + self.project_id = project_id + self.config = utils.configure('ph') + self.job_id = 'results' + self.calculation = False + def create_input(self,job_id='results'): + # self.set_calculation(self.calculation) + generate.ph_input(project_id=self.project_id,calculation=self.calculation,job_id=self.job_id, config=self.config) + def set_calculation(self,calculation): + self.calculation=calculation + self.config = utils.configure(calculation) + def calculate(self, num_core=1): + compute.run_ph(self.project_id,self.job_id,self.calculation,num_core) + def set_q(self,nq1=2,nq2=2,nq3=2): + self.config['inputph']['nq1']=nq1 + self.config['inputph']['nq2']=nq2 + self.config['inputph']['nq3']=nq3 + def set_path(self, path,number,poscar=True): + model = pw(project_id=self.project_id ) + if (poscar): + model.from_poscar(directory=f"{self.project_id}.poscar") + model.band_points(path,number) + kpt = model.config['k_points_bands'] + self.config['k_points_bands']=kpt + def plot(self): + plots.plot_phonon(self) + diff --git a/susyexists/src/ph_plot.py b/susyexists/src/ph_plot.py new file mode 100644 index 00000000..ca97a254 --- /dev/null +++ b/susyexists/src/ph_plot.py @@ -0,0 +1,36 @@ +prefix = "0.0057" +labels = ['Γ',"M","K",'Γ'] + + +import numpy as np +import matplotlib.pyplot as plt + +def Symmetries(fstring): + f = open(fstring, 'r') + x = np.zeros(0) + for i in f: + if "high-symmetry" in i: + x = np.append(x, float(i.split()[-1])) + f.close() + return x + +freq = np.loadtxt("./{}.freq.gp".format(prefix)) +load_sym = Symmetries("./plotband.out") +sym = load_sym/max(load_sym) +ph_path = freq.T[0]/max(freq.T[0]) +cm2mev = 0.124 + +fig = plt.figure(figsize=(7,6)) +# colors = ["blue","orange","green","red","purple","teal"] +for i in sym[:-1]: + plt.axvline(i,linestyle="--",color="black") +for i in range(1,len(freq.T)): + plt.plot(ph_path,freq.T[i]*cm2mev,linewidth=2,color="blue") +plt.xticks(sym,labels,fontsize=15) +# plt.axhline(0,color="black") +plt.title(f"{prefix}") +plt.ylim(0,) +plt.xlim(0,ph_path[-1]) +plt.ylabel("ω (meV)",fontsize=15) +plt.savefig('phonon_band.png') +plt.show() \ No newline at end of file diff --git a/susyexists/src/plot_band.py b/susyexists/src/plot_band.py new file mode 100644 index 00000000..4a06770a --- /dev/null +++ b/susyexists/src/plot_band.py @@ -0,0 +1,57 @@ +import argparse +import numpy as np +import matplotlib.pyplot as plt + + +ap = argparse.ArgumentParser() +ap.add_argument("-n", "--name", required=True, + help="Project name") +ap.add_argument("-d", "--degauss", required=True, help="Degauss value") +args = vars(ap.parse_args()) + +project_name = args['name'] +degauss = args['degauss'] + + +def read_efermi(path): + lines = open(path, 'r').readlines() + e_fermi = 0 + for i in lines: + if "the Fermi energy is" in i: + e_fermi = float(i.split()[-2]) + return e_fermi + +def Symmetries(fstring): + f = open(fstring, 'r') + x = np.zeros(0) + for i in f: + if "high-symmetry" in i: + x = np.append(x, float(i.split()[-1])) + f.close() + return x + +sym = Symmetries(f'./{project_name}/{degauss}/bands-pp.out') + + +temp_file = open(f'./{project_name}/{degauss}/scf.out', 'r').readlines() +for i in range(len(temp_file)): + if len(temp_file[i].split())>2: + if temp_file[i].split()[0]=='the': + fermi=temp_file[i].split()[-2] + +fig = plt.figure(figsize=(8,6)) +data =np.loadtxt(f'./{project_name}/{degauss}/bands.dat.gnu') + +k = np.unique(data[:, 0]) +bands = np.reshape(data[:, 1], (-1, len(k))) +for band in range(len(bands)): + plt.plot(k, bands[band, :]-float(fermi),c='black') +plt.xticks(sym,['G','M','K','G']) +plt.axvline(sym[1],c='black') +plt.axvline(sym[2],c='black') +plt.axhline(0,c='red') +plt.ylim(-10,10) +plt.xlim(sym[0],sym[-1]) +plt.savefig(f'./{project_name}/plots/band_{degauss}.png') +# plt.show() + \ No newline at end of file diff --git a/susyexists/src/plot_sigma_energy.py b/susyexists/src/plot_sigma_energy.py new file mode 100644 index 00000000..105f2dd4 --- /dev/null +++ b/susyexists/src/plot_sigma_energy.py @@ -0,0 +1,33 @@ + +import os +import numpy as np +import matplotlib.pyplot as plt +out_files = os.listdir('./results/') + +total_energy = [] +e_fermi = [] +for prefix in out_files: + temp_file = open(f'./results/{prefix}/scf.out', 'r').readlines() + for i in range(len(temp_file)): + if len(temp_file[i].split())>2: + if temp_file[i].split()[0]=='!': + temp_en=temp_file[i].split()[4] + # if temp_file[i].split()[0]=='the': + # temp_fermi=temp_file[i].split()[-2] + total_energy.append([float(temp_en),float(prefix)]) + # e_fermi.append([float(temp_fermi),float(file[:-13])]) + +tot_en = np.array(total_energy) +tot_en = tot_en[tot_en[:, 1].argsort()] + + +# e_f = np.array(e_fermi) +# e_f = e_f[e_f[:, 1].argsort()] + +# fig = plt.figure(figsize=(8,6)) +plt.plot(tot_en.T[1],tot_en.T[0]) +# plt.ylabel('Total Energy [Ry]',fontsize=20) +# plt.xlabel('Smearing Value [Ry]',fontsize=20) +# plt.xticks(fontsize=20) +# plt.yticks(fontsize=20) +plt.savefig('total_sigma.png') diff --git a/susyexists/src/plots.py b/susyexists/src/plots.py new file mode 100644 index 00000000..dc95069c --- /dev/null +++ b/susyexists/src/plots.py @@ -0,0 +1,50 @@ +import numpy as np +import matplotlib.pyplot as plt +from . import reads + +def plot_electron(self,ylim=False,show=False,save=False): + sym = reads.read_symmetries(f'./Projects/{self.project_id}/{self.job_id}/bands-pp.out') + fermi = reads.read_efermi(f'./Projects/{self.project_id}/{self.job_id}/scf.out') + fig = plt.figure(figsize=(8,6)) + data = np.loadtxt(f'./Projects/{self.project_id}/{self.job_id}/bands.dat.gnu') + k = np.unique(data[:, 0]) + bands = np.reshape(data[:, 1], (-1, len(k))) + for band in range(len(bands)): + plt.plot(k, bands[band, :]-float(fermi),c='black') + plt.xticks(sym,self.path) + for i in range(1,len(sym)-1): + plt.axvline(sym[i],c='black') + plt.axhline(0,c='red') + plt.ylim(ylim[0],ylim[1]) + plt.xlim(sym[0],sym[-1]) + if save==True: + plt.savefig(f'./Projects/{self.project_id}/{self.job_id}/band.png') + if show==True: + return fig + + +def plot_phonon(self): + sym = [] + point = [0] + for k,i in enumerate(self.config['k_points_bands']): + sym.append(i['label'].split()[1]) + if k!=len(self.config['k_points_bands'])-1: + point.append(point[k]+int(i['number'])) + freq = np.loadtxt(f"./Projects/{self.project_id}/{self.job_id}/{self.job_id}.freq.gp") + ph_path = freq.T[0]/max(freq.T[0]) + cm2mev = 0.124 + fig = plt.figure(figsize=(7,6)) + + for i in range(1,len(freq.T)): + plt.plot(ph_path,freq.T[i]*cm2mev,linewidth=2,color="blue") + # print(point) + tick = [ ph_path[i] for i in point ] + for i in tick[1:-1]: + plt.axvline(i,linestyle="--",color="black") + plt.xticks(tick,sym,fontsize=15) + plt.ylim(0,) + plt.xlim(0,ph_path[-1]) + plt.ylabel("ω (meV)",fontsize=15) + plt.savefig('phonon_band.png') + plt.show() + diff --git a/susyexists/src/reads.py b/susyexists/src/reads.py new file mode 100644 index 00000000..e55c5354 --- /dev/null +++ b/susyexists/src/reads.py @@ -0,0 +1,114 @@ +import numpy as np +import json + +def read_pp(paths): + elements = [] + wavefunction = [] + chargedensity = [] + for path in paths: + pp = {"Element":"","Wavefunction":50,"Chargedensity:":200} + with open(path, 'r') as data: + data = data.read().split() + for i in range(200): + if data[i] =="Element:": + # print(str(f"Element: {data[i+1]}")) + pp["Element"]=data[i+1] + if data[i] =="wavefunctions:": + # print(f"Wave function cutoff: {float(data[i+1])}") + pp["Wavefunction"]=data[i+1] + if data[i] =="density:": + # print(f"Charge density cutoff: {float(data[i+1])}") + pp["Chargedensity"]=data[i+1] + + elements.append(pp['Element']) + wavefunction.append(float(pp['Wavefunction'])) + chargedensity.append(float(pp['Chargedensity'])) + chargedensity.sort() + wavefunction.sort() + return(elements,wavefunction[-1]*1.5,chargedensity[-1]*1.5) + + +def read_poscar(path): + data = open(path, 'r').readlines() + cell =[] + for i in data[2:5]: + line=i.split() + cell.append(line) + atoms= [] + for i in data[8:]: + line=(i.split()) + position=line[:3] + atom = [line[-1]] + atoms.append(atom+position) + return(cell,atoms) + + +def read_vc_relax(path): + vc_relax = open(path, 'r').readlines() + begin = 0 + end = 0 + for i in range(len(vc_relax)): + if vc_relax[i] == 'Begin final coordinates\n': + begin = i + if vc_relax[i] == 'End final coordinates\n': + end = i + cell = np.array([i.split() + for i in vc_relax[begin+5:begin+8]]).astype(float) + atoms = np.array([i.split() for i in vc_relax[begin+10:end]]) + return(cell, atoms) + +def read_relax(path): + data = open(path, 'r').readlines() + begin = 0 + end = 0 + for i in range(len(data)): + if data[i] == 'Begin final coordinates\n': + begin = i + if data[i] == 'End final coordinates\n': + end = i + atoms = np.array([i.split() for i in data[begin+3:end]]) + return atoms + +def read_symmetries(fstring): + f = open(fstring, 'r') + x = np.zeros(0) + for i in f: + if "high-symmetry" in i: + x = np.append(x, float(i.split()[-1])) + f.close() + return x + +def read_efermi(path): + lines = open(path, 'r').readlines() + e_fermi = 0 + for i in lines: + if "the Fermi energy is" in i: + e_fermi = float(i.split()[-2]) + return e_fermi + +def read_num_bands(self): + directory = f"./Projects/{self.project_id}/{self.job_id}/scf.out" + lines = open(directory, 'r').readlines() + number = 0 + for i in lines: + if " number of Kohn-Sham states" in i: + number = float(i.split()[-1]) + return number + + +def read_json(data=False,path=False): + if (path): + with open(path) as f: + data = f.read() + crystal = json.loads(data) + atoms = [] + cell = np.array(crystal['lattice']['matrix'],dtype=str) + for i in range(len(crystal['sites'])): + element = crystal['sites'][i]['species'][0]['element'] + coordinate = crystal['sites'][i]['abc'] + atoms.append([element,str(coordinate[0]),str(coordinate[1]),str(coordinate[2])]) + # atoms.append(element) + # coordinate = crystal['sites'][i]['abc'] + # positions[i]={element:coordinate} + return cell,atoms + diff --git a/susyexists/src/run.py b/susyexists/src/run.py new file mode 100644 index 00000000..84082c30 --- /dev/null +++ b/susyexists/src/run.py @@ -0,0 +1,58 @@ +import sys +import argparse +import json +from src import generate + +# Construct the argument parser +ap = argparse.ArgumentParser() + +# Add the arguments to the parser +ap.add_argument("-n", "--name", required=True, + help="Project name") +ap.add_argument("-c", "--calculation", required=True, + help="Type of calculation") +ap.add_argument("-j", "--json", required=True, + help="JSON file") +ap.add_argument("-d", "--degauss", required=False, + help="Degauss value") +ap.add_argument("-k", "--kpoints", nargs='+', required=False, + help="K points") +ap.add_argument("-i", "--initial", required=False, + help="Initial guess path") +ap.add_argument("-p", "--poscar", required=False, + help="Poscar path") +ap.add_argument("-l", "--layer", required=False, + help="Layered materials") + + + +args = vars(ap.parse_args()) + +project_id = args['name'] +# Type of calculation +calculation = args['calculation'] +# Degauss parameter +degauss = args['degauss'] +parameter = args['json'] +# K points + +if args['kpoints'] != None: + k_points = ' '.join(args['kpoints']) +else: + k_points = None + +layer = args["layer"] + + +initial = args['initial'] +poscar = args['poscar'] +# print(f"Initial path: {initial}") +# print(f"Initial path: {poscar}") + +with open(f'{parameter}') as f: + data = f.read() + config = json.loads(data) + + +generate.pw_input(project_id=project_id,calculation=calculation,config=config,degauss=degauss, k_points=k_points, + initial_guess=initial, poscar=poscar,layer=layer) diff --git a/susyexists/src/scaffold.py b/susyexists/src/scaffold.py new file mode 100644 index 00000000..98e9d9aa --- /dev/null +++ b/susyexists/src/scaffold.py @@ -0,0 +1,126 @@ +import numpy as np +import pandas as pd +from . import reads +from . import writes +from . import utils +import json + +def pw(parameters): + with open(parameters['file_path'], 'w') as file: + for i,j in parameters.items(): + try: + if(type(j)==dict): + file.write(f"&{i.upper()} \n") + for k,l in j.items(): + try: + float(l) + file.write(f"{k} = {l} \n") + except: + try: + json.loads(l) + file.write(f"{k} = .{l}. \n") + except: + if(bool(l)): + file.write(f"{k} = '{l}' \n") + file.write("/ \n") + except: + pass + writes.write_atom_species(parameters['file_path'], parameters['atomic_species']) + writes.write_atom_positions(parameters['file_path'],parameters['atomic_positions']) + writes.write_cell_parameters(parameters['file_path'], parameters['cell_parameters']) + if parameters["control"]['calculation']=='bands': + writes.write_k_points_bands(parameters['file_path'], parameters['k_points_bands']) + else: + writes.write_k_points(parameters['file_path'], parameters['k_points']) + return + + +def bands_pp(parameters): + filedata = f""" +&bands +outdir = '{parameters["control"]['outdir']}' +prefix = '{parameters["control"]['prefix']}' +filband = '{parameters["control"]['outdir']}bands.dat' +/ +""" + with open(parameters['file_path'], 'w') as file: + file.write(filedata) + return + + +def ph(parameters): + with open(parameters['file_path'], 'w') as file: + for i,j in parameters.items(): + try: + if(type(j)==dict): + file.write(f"&{i.upper()} \n") + for k,l in j.items(): + try: + float(l) + file.write(f"{k} = {l} \n") + except: + try: + json.loads(l) + file.write(f"{k} = .{l}. \n") + except: + if(bool(l)): + file.write(f"{k} = '{l}' \n") + file.write("/ \n") + except: + pass + return + +def q2r(parameters): + with open(parameters['file_path'], 'w') as file: + for i,j in parameters.items(): + try: + if(type(j)==dict): + file.write(f"&{i.upper()} \n") + for k,l in j.items(): + try: + float(l) + file.write(f"{k} = {l} \n") + except: + try: + json.loads(l) + file.write(f"{k} = .{l}. \n") + except: + if(bool(l)): + file.write(f"{k} = '{l}' \n") + file.write("/ \n") + except: + pass + return + +def matdyn(parameters): + with open(parameters['file_path'], 'w') as file: + for i,j in parameters.items(): + try: + if(type(j)==dict): + file.write(f"&{i.upper()} \n") + for k,l in j.items(): + try: + float(l) + file.write(f"{k} = {l} \n") + except: + try: + json.loads(l) + file.write(f"{k} = .{l}. \n") + except: + if(bool(l)): + file.write(f"{k} = '{l}' \n") + file.write("/ \n") + except: + pass + writes.write_k_points_matdyn(parameters['file_path'], parameters['k_points_bands']) + return + +def plotband(parameters): + filedata = f""" +{parameters['prefix']}.freq +0 550 +{parameters['prefix']}.xmgr +""" + with open(f"./dyn/{parameters['prefix']}/{parameters['prefix']}-plotband.in", 'w') as file: + file.write(filedata) + return \ No newline at end of file diff --git a/susyexists/src/seekpath/__init__.py b/susyexists/src/seekpath/__init__.py new file mode 100644 index 00000000..318ea751 --- /dev/null +++ b/susyexists/src/seekpath/__init__.py @@ -0,0 +1,57 @@ +""" +The seekpath module contains routines to get automatically the +path in a 3D Brillouin zone to plot band structures. + +Author: Giovanni Pizzi, PSI (2016-2023) + +Licence: MIT License, see LICENSE.txt file +""" + +__version__ = "2.1.0" +__author__ = "Giovanni Pizzi, PSI" +__copyright__ = ( + "Copyright (c), 2016-2023, Giovanni Pizzi, PAUL SCHERRER INSTITUT " + "(Laboratory for Materials Simulations), EPFL " + "(Theory and Simulation of Materials (THEOS) and National Centre " + "for Computational Design and Discovery of Novel Materials " + "(NCCR MARVEL)), Switzerland." +) +__credits__ = ["Yoyo Hinuma", "Jae-Mo Lihm"] +__license__ = "MIT license" +__paper__ = ( + "Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, " + "Band structure diagram paths based on crystallography, " + "Comp. Mat. Sci. 128, 140 (2017). DOI: 10.1016/j.commatsci.2016.10.015" +) + + +class SupercellWarning(UserWarning): + """ + A warning issued when the cell is an undistorted supercell of a smaller + unit cell, and the kpoint path for a non-standardized cell (i.e., for the + original cell) is requested. + """ + + pass + + +from .getpaths import ( + get_path, + get_explicit_k_path, + get_path_orig_cell, + get_explicit_k_path_orig_cell, +) + +from .hpkot import EdgeCaseWarning, SymmetryDetectionError +from .brillouinzone import brillouinzone + +__all__ = ( + "get_path", + "get_explicit_k_path", + "get_path_orig_cell", + "get_explicit_k_path_orig_cell", + "EdgeCaseWarning", + "SymmetryDetectionError", + "SupercellWarning", + "brillouinzone" +) diff --git a/susyexists/src/seekpath/__pycache__/__init__.cpython-310.pyc b/susyexists/src/seekpath/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..547382e4 Binary files /dev/null and b/susyexists/src/seekpath/__pycache__/__init__.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/__pycache__/getpaths.cpython-310.pyc b/susyexists/src/seekpath/__pycache__/getpaths.cpython-310.pyc new file mode 100644 index 00000000..949e713a Binary files /dev/null and b/susyexists/src/seekpath/__pycache__/getpaths.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/brillouinzone/__init__.py b/susyexists/src/seekpath/brillouinzone/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/brillouinzone/__pycache__/__init__.cpython-310.pyc b/susyexists/src/seekpath/brillouinzone/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..1cb966de Binary files /dev/null and b/susyexists/src/seekpath/brillouinzone/__pycache__/__init__.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/brillouinzone/__pycache__/brillouinzone.cpython-310.pyc b/susyexists/src/seekpath/brillouinzone/__pycache__/brillouinzone.cpython-310.pyc new file mode 100644 index 00000000..6a4a9368 Binary files /dev/null and b/susyexists/src/seekpath/brillouinzone/__pycache__/brillouinzone.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/brillouinzone/brillouinzone.py b/susyexists/src/seekpath/brillouinzone/brillouinzone.py new file mode 100644 index 00000000..d0535985 --- /dev/null +++ b/susyexists/src/seekpath/brillouinzone/brillouinzone.py @@ -0,0 +1,343 @@ +"""Module to compute the Brillouin zone of a crystal.""" +from collections import defaultdict + +import numpy as np +from scipy.spatial import Voronoi, ConvexHull, Delaunay + + +def get_missing_point(tr, p1, p2): + """ + tr is a list of 3 indices (the indices of the vertices of a given triangle). + p1 and p2 must be in the tr list, the third index is returned. + + ValueError is raised if more than one entry is not among p1 and p2, + or if all points are among p1 and p2 (e.g. a point repeated twice) + """ + missing = None + for vertex in tr: + if vertex not in (p1, p2): + if missing is not None: + raise ValueError("Two missing points found...") + missing = vertex + + if missing is None: + raise ValueError("No missing points!") + + return missing + + +def are_coplanar(v1, v2, v3): + """ + v1, v2, v3: 3D vectors. + Return True if they are coplanar, False otherwise + """ + return float(abs(np.dot(np.cross(v1, v2), v3))) < 1.0e-6 + + +def get_BZ(b1, b2, b3): + """ + Get the faces of the BZ given the three vectors b1,b2,b3. + Return both triangular faces (oriented) and flat faces (if your + plotting library prefers these - these are not oriented for the + time being) + """ + ret_data = {} + + supercell_size = 3 # Is this enough? + + # G-vectors + points3d = [] + central_idx = None + for i in range(-supercell_size, supercell_size + 1): + for j in range(-supercell_size, supercell_size + 1): + for k in range(-supercell_size, supercell_size + 1): + if i == 0 and j == 0 and k == 0: + central_idx = len(points3d) + points3d.append(i * np.array(b1) + j * np.array(b2) + k * np.array(b3)) + + # Get Voronois + vor3d = Voronoi(np.array(points3d)) + # Get the vertices of the central" Voronoi( around the origin G=0) + central_voronoi_3d = np.array( + [vor3d.vertices[idx] for idx in vor3d.regions[vor3d.point_region[central_idx]]] + ) + + # Get the convex hull of these points (all triangular faces) + hull = ConvexHull(central_voronoi_3d) + + ## REORIENT TRIANGLES + ## NOTE! TODO: I should do the same for faces + ret_data["triangles_vertices"] = hull.points.tolist() + ## Naive one + # ret_data['triangles'] = hull.simplices.tolist() + ## Instead, I orient them all + ret_data["triangles"] = [] + for simplex in hull.simplices: + points = np.array([hull.points[i] for i in simplex]) + center = points.sum(axis=0) / float(len(points)) + + # Get normal vector (with direction!) + normal = np.cross(center - points[1], center - points[0]) + # Normalize, then rescale to a small value + normal = normal / np.linalg.norm(normal) + max_length = np.sqrt((points**2).sum(axis=1).max()) + normal /= max_length + normal *= 1.0e-4 + point_up = center + normal + point_down = center - normal + delaunay = Delaunay(hull.points) + is_up_inside = delaunay.find_simplex(point_up) >= 0 + is_down_inside = delaunay.find_simplex(point_down) >= 0 + + if is_up_inside and not is_down_inside: + correct_orientation = True + elif not is_up_inside and is_down_inside: + correct_orientation = False + else: + inside_outside_string = "inside" if is_up_inside else "outside" + print( + "WARNING! Both vectors are {}..." + " not changing orientation".format(inside_outside_string) + ) + correct_orientation = True + + if correct_orientation: + ret_data["triangles"].append(simplex.tolist()) + else: + ret_data["triangles"].append(simplex[::-1].tolist()) + + # print hull.area, hull.volume + + # Get edge-sharing faces + # edges has as key a tuple (sorted) with the indices of the two vertices of + # the shared edge; the value are the indices of the triangles + edges = defaultdict(list) + for simplex_idx, simplex in enumerate(hull.simplices): + edges[tuple(sorted([simplex[0], simplex[1]]))].append(simplex_idx) + edges[tuple(sorted([simplex[1], simplex[2]]))].append(simplex_idx) + edges[tuple(sorted([simplex[2], simplex[0]]))].append(simplex_idx) + # convert to dictionary of lists (from defaultdict of sets) + edges = dict(edges) + + ### Create now the list of faces, merging the triangles that share an + ### edge and are coplanar. Note: this works only if up to two triangles + ### must be merged; if three or more, this will not produce the expected + ### result + # print edges + + # Store merge operations to perform + merge_with = defaultdict(set) + + # List of found simplices that have been merged; will be used at the + # end to add the triangles that have not been merged, if any + merged_simplices = [] + for (p1, p2), triangles in edges.items(): + # I do it many times, but it's the easiest way (and anyway it's + # a set, so it should be fast: I add a point to be merged with + # itself + merge_with[triangles[0]].add(triangles[0]) + merge_with[triangles[1]].add(triangles[1]) + + if len(triangles) != 2: + # An edge shared by less (or more) than 2 triangles? + print("Warning!", p1, p2, triangles) + continue + else: + # Check if two triangles are coplanar: get the other two + # vertices that are not on the shared edge + otherpoint0 = get_missing_point(hull.simplices[triangles[0]], p1, p2) + otherpoint1 = get_missing_point(hull.simplices[triangles[1]], p1, p2) + # The actual vector coordinates + otherpoint0_p = hull.points[otherpoint0] + otherpoint1_p = hull.points[otherpoint1] + p1_p = hull.points[p1] + p2_p = hull.points[p2] + + # Check if they are coplanar + if are_coplanar(p2_p - p1_p, otherpoint0_p - p1_p, otherpoint1_p - p1_p): + merge_with[triangles[0]].add(triangles[1]) + merge_with[triangles[1]].add(triangles[0]) + + # PROBLEM TO SOLVE: we have to put together all groups + ## E.g. we have now: + # 0: [0, 3] + # 1: [1, 2, 3] + # 2: [1, 2] + # 3: [0, 1, 3] + ## We should get instead for all [0,1,2,3] + # So we have to do a pass to merge them all + # The algorithm below is probably wrong (actually, it is only + # probably inefficient) + + # for k, v in merge_with.items(): + # print "{}: {}".format(k, list(v)) + + # Iterate untile convergence - not sure this is correct + has_changed = True + while has_changed: + has_changed = False + # Add the missing ones + for tr in range(len(hull.simplices)): + for other1 in merge_with[tr]: + for other2 in merge_with[tr]: + if other1 not in merge_with[other2]: + has_changed = True + merge_with[other2].add(other1) + if other2 not in merge_with[other1]: + has_changed = True + merge_with[other1].add(other2) + + # convert to dict, and most importantly convert to list and sort + merge_with = {k: sorted(v) for k, v in merge_with.items()} + + # Assign to the smallest integer idx + merge_group = {k: v[0] for k, v in merge_with.items()} + + groups = defaultdict(list) + # I create a reverse index + for k, v in merge_group.items(): + groups[v].append(k) + + # List of faces (elements are lists of vertex ids) + faces = [] + + for group in groups.values(): + if len(group) == 1: + faces.append( + [hull.points[point_idx] for point_idx in hull.simplices[group[0]]] + ) + else: + # Get all points + all_points_idx = sorted( + set(np.concatenate([hull.simplices[g] for g in group])) + ) + + all_points_coords = [hull.points[point_idx] for point_idx in all_points_idx] + # Find projection in 2D: I first choose a first vector (between + # two points v1; I find the orthogonal vector to the plane b; + # I find a second vector v2 orthogonal to v1 and on the plane + # (<=> orthogonal to v1 and b); I normalize v1 and v2; + # I get the components of the vectors w.r.t. v1 and v2 + # NOTE: there is at least 1 triangle => at least 3 points + v1 = all_points_coords[1] - all_points_coords[0] + temp_v2 = all_points_coords[2] - all_points_coords[0] + b = np.cross(v1, temp_v2) + v2 = np.cross(v1, b) + # Normalize + v1 = v1 / np.linalg.norm(v1) + v2 = v2 / np.linalg.norm(v2) + # get components + x = [np.dot(point, v1) for point in all_points_coords] + y = [np.dot(point, v2) for point in all_points_coords] + # 2. do convexhull in 2D + hull_face2d = ConvexHull(np.array([x, y]).T) + # 3. get point indices of convex hull, convert back to original + # 3D indices + # 2dhull.vertices contains the segments, but with ids in the + # smaller subset. We want the indices in the initial set: + actual_points_idx = [ + all_points_idx[subset_idx] for subset_idx in hull_face2d.vertices + ] + # 4. add to faces list + faces.append( + [hull.points[point_idx].tolist() for point_idx in actual_points_idx] + ) + + ret_data["faces"] = faces + return ret_data + + +if __name__ == "__main__": + from pylab import figure, show + from mpl_toolkits.mplot3d.art3d import Poly3DCollection + + # draw a vector + from matplotlib.patches import FancyArrowPatch + from mpl_toolkits.mplot3d import proj3d + + class Arrow3D(FancyArrowPatch): + def __init__(self, xs, ys, zs, *args, **kwargs): + FancyArrowPatch.__init__(self, (0, 0), (0, 0), *args, **kwargs) + self._verts3d = xs, ys, zs + + def draw(self, renderer): + xs3d, ys3d, zs3d = self._verts3d + xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M) + self.set_positions((xs[0], ys[0]), (xs[1], ys[1])) + FancyArrowPatch.draw(self, renderer) + + ##SC + # faces_data = get_BZ(b1 = [1,0,0], b2 = [0,1,0], b3 = [0,0,1]) + ##BCC + # faces_data = get_BZ(b1 = [1,1,0], b2 = [1,0,1], b3 = [0,1,1]) + ##FCC + faces_data = get_BZ(b1=[1, 1, -1], b2=[1, -1, 1], b3=[-1, 1, 1]) + + import json + + print(json.dumps(faces_data)) + + faces_coords = faces_data["faces"] + + faces_count = defaultdict(int) + for face in faces_coords: + faces_count[len(face)] += 1 + + for num_sides in sorted(faces_count.keys()): + print("{} faces: {}".format(num_sides, faces_count[num_sides])) + + fig = figure() + ax = fig.add_subplot(111, projection="3d") + ax.add_collection3d( + Poly3DCollection( + faces_coords, linewidth=1, alpha=0.9, edgecolor="k", facecolor="#ccccff" + ) + ) + + # draw origin + ax.scatter([0], [0], [0], color="g", s=100) + + axes_length = 2 + # Add axes + ax.add_artist( + Arrow3D( + (0, axes_length), + (0, 0), + (0, 0), + mutation_scale=20, + lw=1, + arrowstyle="-|>", + color="k", + ) + ) + ax.add_artist( + Arrow3D( + (0, 0), + (0, axes_length), + (0, 0), + mutation_scale=20, + lw=1, + arrowstyle="-|>", + color="k", + ) + ) + ax.add_artist( + Arrow3D( + (0, 0), + (0, 0), + (0, axes_length), + mutation_scale=20, + lw=1, + arrowstyle="-|>", + color="k", + ) + ) + + ## Reset limits + ax.set_xlim(-1, 1) + ax.set_ylim(-1, 1) + ax.set_zlim(-1, 1) + ax.axis("off") + ax.view_init(elev=0, azim=60) + + show() diff --git a/susyexists/src/seekpath/getpaths.py b/susyexists/src/seekpath/getpaths.py new file mode 100644 index 00000000..bd3b21b8 --- /dev/null +++ b/susyexists/src/seekpath/getpaths.py @@ -0,0 +1,608 @@ +""" +This module contains the main functions to get a path and an explicit path. +""" +import numpy as np +import warnings +from . import SupercellWarning + + +def get_explicit_from_implicit( # pylint: disable=too-many-locals + seekpath_output, reference_distance +): + """ + Given the output of ``get_path`` by seekpath, compute an "explicit" path, + i.e. instead of just giving the endpoints and their coordinates, compute + a full list of kpoints + + :param seekpath_output: a dictionary, the output of ``seekpath.get_path`` + + :param reference_distance: a reference target distance between neighboring + k-points in the path, in units of 1/ang. The actual value will be as + close as possible to this value, to have an integer number of points in + each path. + """ + retdict = {} + + kpoints_rel = [] + kpoints_labels = [] + kpoints_linearcoord = [] + previous_linearcoord = 0.0 + segments = [] + for start_label, stop_label in seekpath_output["path"]: + start_coord = np.array(seekpath_output["point_coords"][start_label]) + stop_coord = np.array(seekpath_output["point_coords"][stop_label]) + start_coord_abs = np.dot( + start_coord, seekpath_output["reciprocal_primitive_lattice"] + ) + stop_coord_abs = np.dot( + stop_coord, seekpath_output["reciprocal_primitive_lattice"] + ) + segment_length = np.linalg.norm(stop_coord_abs - start_coord_abs) + num_points = max(2, int(segment_length / reference_distance)) + segment_linearcoord = np.linspace(0.0, segment_length, num_points) + segment_start = len(kpoints_labels) + for i in range(num_points): + # Skip the first point if it's the same as the last one of + # the previous segment + if i == 0: + if kpoints_labels: + if kpoints_labels[-1] == start_label: + segment_start -= 1 + continue + + kpoints_rel.append( + start_coord + + (stop_coord - start_coord) * float(i) / float(num_points - 1) + ) + if i == 0: + kpoints_labels.append(start_label) + elif i == num_points - 1: + kpoints_labels.append(stop_label) + else: + kpoints_labels.append("") + kpoints_linearcoord.append(previous_linearcoord + segment_linearcoord[i]) + previous_linearcoord += segment_length + segment_end = len(kpoints_labels) + segments.append((segment_start, segment_end)) + + retdict["kpoints_rel"] = np.array(kpoints_rel) + retdict["kpoints_linearcoord"] = np.array(kpoints_linearcoord) + retdict["kpoints_labels"] = kpoints_labels + retdict["kpoints_abs"] = np.dot( + retdict["kpoints_rel"], seekpath_output["reciprocal_primitive_lattice"] + ) + retdict["segments"] = segments + + return retdict + + +def get_path( + structure, + with_time_reversal=True, + recipe="hpkot", + threshold=1.0e-7, + symprec=1e-05, + angle_tolerance=-1.0, +): + r""" + Return the kpoint path information for band structure given a + crystal structure, using the paths from the chosen recipe/reference. + + If you use this module, please cite the paper of the corresponding + recipe (see parameter below). + + :param structure: The crystal structure for which we want to obtain + the suggested path. It should be a tuple in the format + accepted by spglib: ``(cell, positions, numbers)``, where + (if N is the number of atoms): + + - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice + vector, ...) + - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates + in scaled coordinates (i.e., w.r.t. the cell vectors) + - ``numbers`` is a length-:math:`N` list with integers identifying uniquely + the atoms in the cell (e.g., the Z number of the atom, but + any other positive non-zero integer will work - e.g. if you + want to distinguish two Carbon atoms, you can set one number + to 6 and the other to 1006) + + :param with_time_reversal: if False, and the group has no inversion + symmetry, additional lines are returned as described in the HPKOT + paper. + + :param recipe: choose the reference publication that defines the special + points and paths. + Currently, the following value is implemented: + + - ``hpkot``: HPKOT paper: + Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure + diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017). + DOI: 10.1016/j.commatsci.2016.10.015 + + :param threshold: the threshold to use to verify if we are in + and edge case (e.g., a tetragonal cell, but ``a==c``). For instance, + in the tI lattice, if ``abs(a-c) < threshold``, a + :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued. + Note that depending on the bravais lattice, the meaning of the + threshold is different (angle, length, ...) + + :param symprec: the symmetry precision used internally by SPGLIB + + :param angle_tolerance: the angle_tolerance used internally by SPGLIB + + + :return: a dictionary with the following + keys: + + - ``point_coords``: a dictionary with label -> float coordinates + - ``path``: a list of length-2 tuples, with the labels of the starting + and ending point of each label section + - ``has_inversion_symmetry``: True or False, depending on whether the + input crystal structure has inversion symmetry or not. + - ``augmented_path``: if True, it means that the path was + augmented with the :math:`-k` points (this happens if both + has_inversion_symmetry is False, and the user set + with_time_reversal=False in the input) + - ``bravais_lattice``: the Bravais lattice string (like ``cP``, ``tI``, ...) + - ``bravais_lattice_extended``: the specific case used to define labels and + coordinates (like ``cP1``, ``tI2``, ...) + - ``cont_lattice``: three real-space vectors for the crystallographic + conventional cell (``conv_lattice[0,:]`` is the first vector) + - ``conv_positions``: fractional coordinates of atoms in the + crystallographic conventional cell + - ``conv_types``: list of integer types of the atoms in the crystallographic + conventional cell (typically, the atomic numbers) + - ``primitive_lattice``: three real-space vectors for the crystallographic + primitive cell (``primitive_lattice[0,:]`` is the first vector) + - ``primitive_positions``: fractional coordinates of atoms in the + crystallographic primitive cell + - ``primitive_types``: list of integer types of the atoms in the + crystallographic primitive cell (typically, the atomic numbers) + - ``reciprocal_primitive_lattice``: reciprocal-cell vectors for the + primitive cell (vectors are rows: ``reciprocal_primitive_lattice[0,:]`` + is the first vector) + - ``primitive_transformation_matrix``: the transformation matrix :math:`P` between + the conventional and the primitive cell + - ``inverse_primitive_transformation_matrix``: the inverse of the matrix :math:`P` + (the determinant is integer and gives the ratio in volume between + the conventional and primitive cells) + - ``volume_original_wrt_conv``: volume ratio of the user-provided cell + with respect to the the crystallographic conventional cell + - ``volume_original_wrt_prim``: volume ratio of the user-provided cell + with respect to the the crystalloraphic primitive cell + + :note: An :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued for + edge cases (e.g. if ``a==b==c`` for + orthorhombic systems). In this case, still one of the valid cases + is picked. + """ + if recipe == "hpkot": + from . import hpkot + + res = hpkot.get_path( + structure=structure, + with_time_reversal=with_time_reversal, + threshold=threshold, + symprec=symprec, + angle_tolerance=angle_tolerance, + ) + + else: + raise ValueError( + "value for 'recipe' not recognized. The only value " + "currently accepted is 'hpkot'." + ) + return res + + +def get_explicit_k_path( + structure, + with_time_reversal=True, + reference_distance=0.025, + recipe="hpkot", + threshold=1.0e-7, + symprec=1e-05, + angle_tolerance=-1.0, +): + r""" + Return the kpoint path for band structure (in scaled and absolute + coordinates), given a crystal structure, + using the paths proposed in the various publications (see description + of the 'recipe' input parameter). + Note that the k-path typically refers to a different unit cell + (e.g., the primitive one with some transformation matrix to comply with + the conventions in the case of the HPKOT paper). So, one should use the + crystal cell provided in output for all calculations, rather than the + input 'structure'. + + If you use this module, please cite the paper of the corresponding + recipe (see parameter below). + + :param structure: The crystal structure for which we want to obtain + the suggested path. It should be a tuple in the format + accepted by spglib: (cell, positions, numbers), where + (if N is the number of atoms): + + - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice + vector, ...) + - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates + in scaled coordinates (i.e., w.r.t. the cell vectors) + - ``numbers`` is a length-:math:`N` list with integers identifying uniquely + the atoms in the cell (e.g., the Z number of the atom, but + any other positive non-zero integer will work - e.g. if you + want to distinguish two Carbon atoms, you can set one number + to 6 and the other to 1006) + + :param with_time_reversal: if False, and the group has no inversion + symmetry, additional lines are returned. + + :param reference_distance: a reference target distance between neighboring + k-points in the path, in units of 1/ang. The actual value will be as + close as possible to this value, to have an integer number of points in + each path. + + :param recipe: choose the reference publication that defines the special + points and paths. + Currently, the following value is implemented: + + - ``hpkot``: HPKOT paper: + Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure + diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017). + DOI: 10.1016/j.commatsci.2016.10.015 + + :param threshold: the threshold to use to verify if we are in + and edge case (e.g., a tetragonal cell, but ``a==c``). For instance, + in the tI lattice, if ``abs(a-c) < threshold``, a + :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued. + Note that depending on the bravais lattice, the meaning of the + threshold is different (angle, length, ...) + + :param symprec: the symmetry precision used internally by SPGLIB + + :param angle_tolerance: the angle_tolerance used internally by SPGLIB + + .. versionchanged:: 1.8 + The key ``segments`` has been renamed ``explicit_segments`` + for consistency. + + :return: a dictionary with a number of keys. They are the same as + ``get_path``, plus a few ones: + + - ``explicit_kpoints_abs``: List of the kpoints along the specific path in + absolute (Cartesian) coordinates. The two endpoints are always + included, independently of the length. + - ``explicit_kpoints_rel``: List of the kpoints along the specific path in + relative (fractional) coordinates (same length as + explicit_kpoints_abs). + - ``explicit_kpoints_labels``: list of strings with kpoints labels. It has + the same length as explicit_kpoints_abs and explicit_kpoints_rel. + Empty if the point is not a special point. + - ``explicit_kpoints_linearcoord``: array of floats, giving the coordinate + at which to plot the corresponding point. + - ``explicit_segments``: a list of length-2 tuples, with the start and end + index of each segment. **Note**! The indices are supposed to be + used as follows: the labels for the i-th segment are given by:: + + segment_indices = explicit_segments[i] + segment_labels = explicit_kpoints_labels[slice(*segment_indices)] + + This means, in particular, that if you want the label of the start + and end points, you should do:: + + start_label = explicit_kpoints_labels[segment_indices[0]] + stop_label = explicit_kpoints_labels[segment_indices[1]-1] + + (note the minus one!) + + Also, note that if + ``explicit_segments[i-1][1] == explicit_segments[i][0] + 1`` it means + that the point was calculated only once, and it belongs to both + paths. Instead, if + ``explicit_segments[i-1][1] == explicit_segments[i][0]``, then + this is a 'break' point in the path (e.g., ``explicit_segments[i-1][1]`` + is the X point, and ``explicit_segments[i][0]`` is the R point, + and typically in a graphical representation they are shown at the + same coordinate, with a label ``R|X``). + """ + if recipe == "hpkot": + from . import hpkot + + res = hpkot.get_path( + structure=structure, + with_time_reversal=with_time_reversal, + threshold=threshold, + symprec=symprec, + angle_tolerance=angle_tolerance, + ) + + else: + raise ValueError( + "value for 'recipe' not recognized. The only value " + "currently accepted is 'hpkot'." + ) + + explicit_res = get_explicit_from_implicit( + res, reference_distance=reference_distance + ) + for k, v in explicit_res.items(): + res["explicit_{}".format(k)] = v + return res + + +def get_path_orig_cell( + structure, + with_time_reversal=True, + recipe="hpkot", + threshold=1.0e-7, + symprec=1e-05, + angle_tolerance=-1.0, +): + r""" + Return the kpoint path information for band structure given a + crystal structure, using the paths from the chosen recipe/reference. + The original unit cell (i.e., the one provided in input by the user) is used. + Standardization or symmetrization of the input unit cell is not performed. + + If the provided unit cell is a supercell of a smaller primitive cell, + return the standard k path of the smaller primitive cell in the basis + of the supercell reciprocal lattice vectors. In this case, the k-point + labels lose their meaning as the corresponding k-points are not at the + high-symmetry points of the first BZ of the given supercell. A + :py:exc:`~seekpath.SupercellWarning` is issued. + + If you use this module, please cite the paper of the corresponding + recipe (see parameter below). + + :param structure: The crystal structure for which we want to obtain + the suggested path. It should be a tuple in the format + accepted by spglib: ``(cell, positions, numbers)``, where + (if N is the number of atoms): + + - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice + vector, ...) + - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates + in scaled coordinates (i.e., w.r.t. the cell vectors) + - ``numbers`` is a length-:math:`N` list with integers identifying uniquely + the atoms in the cell (e.g., the Z number of the atom, but + any other positive non-zero integer will work - e.g. if you + want to distinguish two Carbon atoms, you can set one number + to 6 and the other to 1006) + + :param with_time_reversal: if False, and the group has no inversion + symmetry, additional lines are returned as described in the HPKOT + paper. + + :param recipe: choose the reference publication that defines the special + points and paths. + Currently, the following value is implemented: + + - ``hpkot``: HPKOT paper: + Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure + diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017). + DOI: 10.1016/j.commatsci.2016.10.015 + + :param threshold: the threshold to use to verify if we are in + and edge case (e.g., a tetragonal cell, but ``a==c``). For instance, + in the tI lattice, if ``abs(a-c) < threshold``, a + :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued. + Note that depending on the bravais lattice, the meaning of the + threshold is different (angle, length, ...) + + :param symprec: the symmetry precision used internally by SPGLIB + + :param angle_tolerance: the angle_tolerance used internally by SPGLIB + + + :return: a dictionary with the following + keys: + + - ``point_coords``: a dictionary with label -> float coordinates + - ``path``: a list of length-2 tuples, with the labels of the starting + and ending point of each label section + input crystal structure has inversion symmetry or not. + - ``augmented_path``: if True, it means that the path was + augmented with the :math:`-k` points (this happens if both + has_inversion_symmetry is False, and the user set + with_time_reversal=False in the input) + - ``is_supercell``: True if the input unit cell is a supercell of + a smaller primitive cell. + + :note: An :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued for + edge cases (e.g. if ``a==b==c`` for + orthorhombic systems). In this case, still one of the valid cases + is picked. + """ + + res = get_path( + structure=structure, + with_time_reversal=with_time_reversal, + threshold=threshold, + symprec=symprec, + angle_tolerance=angle_tolerance, + recipe=recipe, + ) + + is_supercell = abs(res["volume_original_wrt_prim"] - 1) > 0.1 + + if is_supercell: + warnings.warn( + "The provided cell is a supercell: the returned k-path is the " + "standard k-path of the associated primitive cell in the basis of " + "the supercell reciprocal lattice.", + SupercellWarning, + ) + + # points in the output of get_path are in scaled coordinates of the + # standardized primitive lattice + points_scaled_standard = res["point_coords"] + + # Convert points from scaled coordinates of the standardiced primitive + # lattice to Cartesian coordinates + points_cartesian = {} + for pointname, coords in points_scaled_standard.items(): + points_cartesian[pointname] = coords @ np.array( + res["reciprocal_primitive_lattice"] + ) + + # Rotate points in Cartesian space + for pointname, coords in points_cartesian.items(): + points_cartesian[pointname] = coords @ res["rotation_matrix"] + + # Convert points from Cartesian coordinates to the scaled coordinates + # of the original lattice + points_scaled_original = {} + cell_orig = np.array(structure[0]) + for pointname, coords in points_cartesian.items(): + points_scaled_original[pointname] = list(coords @ cell_orig.T / np.pi / 2) + + res_orig = { + "point_coords": points_scaled_original, + "path": res["path"], + "augmented_path": res["augmented_path"], + "is_supercell": is_supercell, + "has_inversion_symmetry": res["has_inversion_symmetry"], + "bravais_lattice": res["bravais_lattice"], + "bravais_lattice_extended": res["bravais_lattice_extended"], + "spacegroup_number": res["spacegroup_number"], + "spacegroup_international": res["spacegroup_international"], + } + + return res_orig + + +def get_explicit_k_path_orig_cell( + structure, + with_time_reversal=True, + reference_distance=0.025, + recipe="hpkot", + threshold=1.0e-7, + symprec=1e-05, + angle_tolerance=-1.0, +): + r""" + Return the kpoint path for band structure (in scaled and absolute + coordinates), given a crystal structure, + using the paths proposed in the various publications (see description + of the 'recipe' input parameter) for the given unit cell. + Standardization or symmetrization of the input unit cell is not performed. + + If the provided unit cell is a supercell of a smaller primitive cell, + return the standard k path of the smaller primitive cell in the basis + of the supercell reciprocal lattice vectors. In this case, the k-point + labels lose their meaning as the corresponding k-points are not at the + high-symmetry points of the first BZ of the given supercell. A + :py:exc:`~seekpath.SupercellWarning` is issued. + + If you use this module, please cite the paper of the corresponding + recipe (see parameter below). + + :param structure: The crystal structure for which we want to obtain + the suggested path. It should be a tuple in the format + accepted by spglib: (cell, positions, numbers), where + (if N is the number of atoms): + + - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice + vector, ...) + - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates + in scaled coordinates (i.e., w.r.t. the cell vectors) + - ``numbers`` is a length-:math:`N` list with integers identifying uniquely + the atoms in the cell (e.g., the Z number of the atom, but + any other positive non-zero integer will work - e.g. if you + want to distinguish two Carbon atoms, you can set one number + to 6 and the other to 1006) + + :param with_time_reversal: if False, and the group has no inversion + symmetry, additional lines are returned. + + :param reference_distance: a reference target distance between neighboring + k-points in the path, in units of 1/ang. The actual value will be as + close as possible to this value, to have an integer number of points in + each path. + + :param recipe: choose the reference publication that defines the special + points and paths. + Currently, the following value is implemented: + + - ``hpkot``: HPKOT paper: + Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure + diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017). + DOI: 10.1016/j.commatsci.2016.10.015 + + :param threshold: the threshold to use to verify if we are in + and edge case (e.g., a tetragonal cell, but ``a==c``). For instance, + in the tI lattice, if ``abs(a-c) < threshold``, a + :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued. + Note that depending on the bravais lattice, the meaning of the + threshold is different (angle, length, ...) + + :param symprec: the symmetry precision used internally by SPGLIB + + :param angle_tolerance: the angle_tolerance used internally by SPGLIB + + .. versionchanged:: 1.8 + The key ``segments`` has been renamed ``explicit_segments`` + for consistency. + + :return: a dictionary with a number of keys. They are the same as + ``get_path_orig_cell``, plus a few ones: + + - ``explicit_kpoints_abs``: List of the kpoints along the specific path in + absolute (Cartesian) coordinates. The two endpoints are always + included, independently of the length. + - ``explicit_kpoints_rel``: List of the kpoints along the specific path in + relative (fractional) coordinates (same length as + explicit_kpoints_abs). + - ``explicit_kpoints_labels``: list of strings with kpoints labels. It has + the same length as explicit_kpoints_abs and explicit_kpoints_rel. + Empty if the point is not a special point. + - ``explicit_kpoints_linearcoord``: array of floats, giving the coordinate + at which to plot the corresponding point. + - ``explicit_segments``: a list of length-2 tuples, with the start and end + index of each segment. **Note**! The indices are supposed to be + used as follows: the labels for the i-th segment are given by:: + + segment_indices = explicit_segments[i] + segment_labels = explicit_kpoints_labels[slice(*segment_indices)] + + This means, in particular, that if you want the label of the start + and end points, you should do:: + + start_label = explicit_kpoints_labels[segment_indices[0]] + stop_label = explicit_kpoints_labels[segment_indices[1]-1] + + (note the minus one!) + + Also, note that if + ``explicit_segments[i-1][1] == explicit_segments[i][0] + 1`` it means + that the point was calculated only once, and it belongs to both + paths. Instead, if + ``explicit_segments[i-1][1] == explicit_segments[i][0]``, then + this is a 'break' point in the path (e.g., ``explicit_segments[i-1][1]`` + is the X point, and ``explicit_segments[i][0]`` is the R point, + and typically in a graphical representation they are shown at the + same coordinate, with a label ``R|X``). + """ + from .hpkot.tools import get_reciprocal_cell_rows + + res = get_path_orig_cell( + structure=structure, + with_time_reversal=with_time_reversal, + threshold=threshold, + symprec=symprec, + angle_tolerance=angle_tolerance, + recipe=recipe, + ) + + # Set reciprocal_primitive_lattice as the reciprocal lattice of the original + # cell. To be used only in the get_explicit_from_implicit function. + res["reciprocal_primitive_lattice"] = get_reciprocal_cell_rows(structure[0]) + + explicit_res = get_explicit_from_implicit( + res, reference_distance=reference_distance + ) + + res.pop("reciprocal_primitive_lattice") + + for k, v in explicit_res.items(): + res["explicit_{}".format(k)] = v + return res diff --git a/susyexists/src/seekpath/hpkot/__init__.py b/susyexists/src/seekpath/hpkot/__init__.py new file mode 100644 index 00000000..5ac1f765 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/__init__.py @@ -0,0 +1,521 @@ +""" +The seekpath.hpkot module contains routines to get automatically the +path in a 3D Brillouin zone to plot band structures according to the +HPKOT paper (see references below). + +Author: Giovanni Pizzi, PSI + +Licence: MIT License, see LICENSE.txt + +.. note:: the list of point coordinates and example POSCAR files in + the band_path_data subfolder have been provided by Yoyo Hinuma, + Kyoto University, Japan. The POSCARs have been retrieved from + the Materials Project (http://materialsproject.org). +""" + + +class EdgeCaseWarning(RuntimeWarning): + """ + A warning issued when the cell is an edge case (e.g. orthorhombic + symmetry, but ``a==b==c``. + """ + + pass + + +class SymmetryDetectionError(Exception): + """ + Error raised if spglib could not detect the symmetry. + """ + + pass + + +def get_path( + structure, + with_time_reversal=True, + threshold=1.0e-7, + symprec=1e-05, + angle_tolerance=-1.0, +): + r""" + Return the kpoint path information for band structure given a + crystal structure, using the paths from the chosen recipe/reference. + + If you use this module, please cite the paper of the corresponding + recipe (see parameter below). + + :param structure: The crystal structure for which we want to obtain + the suggested path. It should be a tuple in the format + accepted by spglib: ``(cell, positions, numbers)``, where + (if N is the number of atoms): + + - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice + vector, ...) + - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates + in scaled coordinates (i.e., w.r.t. the cell vectors) + - ``numbers`` is a length-:math:`N` list with integers identifying uniquely + the atoms in the cell (e.g., the Z number of the atom, but + any other positive non-zero integer will work - e.g. if you + want to distinguish two Carbon atoms, you can set one number + to 6 and the other to 1006) + + :param with_time_reversal: if False, and the group has no inversion + symmetry, additional lines are returned as described in the HPKOT + paper. + + :param recipe: choose the reference publication that defines the special + points and paths. + Currently, the following value is implemented: + + - ``hpkot``: HPKOT paper: + Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure + diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017). + DOI: 10.1016/j.commatsci.2016.10.015 + + :param threshold: the threshold to use to verify if we are in + and edge case (e.g., a tetragonal cell, but ``a==c``). For instance, + in the tI lattice, if ``abs(a-c) < threshold``, a + :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued. + Note that depending on the bravais lattice, the meaning of the + threshold is different (angle, length, ...) + + :param symprec: the symmetry precision used internally by SPGLIB + + :param angle_tolerance: the angle_tolerance used internally by SPGLIB + + + :return: a dictionary with the following + keys: + + - ``point_coords``: a dictionary with label -> float coordinates + - ``path``: a list of length-2 tuples, with the labels of the starting + and ending point of each label section + - ``has_inversion_symmetry``: True or False, depending on whether the + input crystal structure has inversion symmetry or not. + - ``augmented_path``: if True, it means that the path was + augmented with the :math:`-k` points (this happens if both + has_inversion_symmetry is False, and the user set + with_time_reversal=False in the input) + - ``bravais_lattice``: the Bravais lattice string (like ``cP``, ``tI``, ...) + - ``bravais_lattice_extended``: the specific case used to define labels and + coordinates (like ``cP1``, ``tI2``, ...) + - ``cont_lattice``: three real-space vectors for the crystallographic + conventional cell (``conv_lattice[0,:]`` is the first vector) + - ``conv_positions``: fractional coordinates of atoms in the + crystallographic conventional cell + - ``conv_types``: list of integer types of the atoms in the crystallographic + conventional cell (typically, the atomic numbers) + - ``primitive_lattice``: three real-space vectors for the crystallographic + primitive cell (``primitive_lattice[0,:]`` is the first vector) + - ``primitive_positions``: fractional coordinates of atoms in the + crystallographic primitive cell + - ``primitive_types``: list of integer types of the atoms in the + crystallographic primitive cell (typically, the atomic numbers) + - ``reciprocal_primitive_lattice``: reciprocal-cell vectors for the + primitive cell (vectors are rows: ``reciprocal_primitive_lattice[0,:]`` + is the first vector) + - ``primitive_transformation_matrix``: the transformation matrix :math:`P` between + the conventional and the primitive cell + - ``inverse_primitive_transformation_matrix``: the inverse of the matrix :math:`P` + (the determinant is integer and gives the ratio in volume between + the conventional and primitive cells) + - ``rotation_matrix``: rotation matrix in Cartesian space from the input + cell to the standardized cell + - ``volume_original_wrt_conv``: volume ratio of the user-provided cell + with respect to the the crystallographic conventional cell + - ``volume_original_wrt_prim``: volume ratio of the user-provided cell + with respect to the the crystallographic primitive cell + + :note: An :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued for + edge cases (e.g. if ``a==b==c`` for + orthorhombic systems). In this case, still one of the valid cases + is picked. + """ + import copy + from math import sqrt + import warnings + + import numpy as np + + from .tools import ( + check_spglib_version, + extend_kparam, + eval_expr, + eval_expr_simple, + get_cell_params, + get_path_data, + get_reciprocal_cell_rows, + get_real_cell_from_reciprocal_rows, + ) + from .spg_mapping import get_spgroup_data, get_primitive + + # I check if the SPGlib version is recent enough (raises ValueError) + # otherwise + spglib = check_spglib_version() + + structure_internal = ( + np.array(structure[0]), + np.array(structure[1]), + np.array(structure[2]), + ) + + # Symmetry analysis by SPGlib, get crystallographic lattice, + # and cell parameters for this lattice + dataset = spglib.get_symmetry_dataset( + structure_internal, symprec=symprec, angle_tolerance=angle_tolerance + ) + if dataset is None: + raise SymmetryDetectionError( + "Spglib could not detect the symmetry of the system" + ) + conv_lattice = dataset["std_lattice"] + conv_positions = dataset["std_positions"] + conv_types = dataset["std_types"] + a, b, c, cosalpha, cosbeta, cosgamma = get_cell_params(conv_lattice) + spgrp_num = dataset["number"] + # This is the transformation from the original to the crystallographic + # conventional (called std in spglib) + # Lattice^{crystallographic_bravais} = L^{original} * transf_matrix + transf_matrix = dataset["transformation_matrix"] + volume_conv_wrt_original = np.linalg.det(transf_matrix) + + # Get the properties of the spacegroup, needed to get the bravais_lattice + properties = get_spgroup_data()[spgrp_num] + bravais_lattice = "{}{}".format(properties[0], properties[1]) + has_inv = properties[2] + + # Implement all different extended Bravais lattices + if bravais_lattice == "cP": + if spgrp_num >= 195 and spgrp_num <= 206: + ext_bravais = "cP1" + elif spgrp_num >= 207 and spgrp_num <= 230: + ext_bravais = "cP2" + else: + raise ValueError( + "Internal error! should be cP, but the " + "spacegroup number is not in the correct range" + ) + elif bravais_lattice == "cF": + if spgrp_num >= 195 and spgrp_num <= 206: + ext_bravais = "cF1" + elif spgrp_num >= 207 and spgrp_num <= 230: + ext_bravais = "cF2" + else: + raise ValueError( + "Internal error! should be cF, but the " + "spacegroup number is not in the correct range" + ) + elif bravais_lattice == "cI": + ext_bravais = "cI1" + elif bravais_lattice == "tP": + ext_bravais = "tP1" + elif bravais_lattice == "tI": + if abs(c - a) < threshold: + warnings.warn("tI lattice, but a almost equal to c", EdgeCaseWarning) + if c <= a: + ext_bravais = "tI1" + else: + ext_bravais = "tI2" + elif bravais_lattice == "oP": + ext_bravais = "oP1" + elif bravais_lattice == "oF": + if abs(1.0 / (a**2) - (1.0 / (b**2) + 1.0 / (c**2))) < threshold: + warnings.warn( + "oF lattice, but 1/a^2 almost equal to 1/b^2 + 1/c^2", EdgeCaseWarning + ) + if abs(1.0 / (c**2) - (1.0 / (a**2) + 1.0 / (b**2))) < threshold: + warnings.warn( + "oF lattice, but 1/c^2 almost equal to 1/a^2 + 1/b^2", EdgeCaseWarning + ) + if 1.0 / (a**2) > 1.0 / (b**2) + 1.0 / (c**2): + ext_bravais = "oF1" + elif 1.0 / (c**2) > 1.0 / (a**2) + 1.0 / (b**2): + ext_bravais = "oF2" + else: # 1/a^2, 1/b^2, 1/c^2 edges of a triangle + ext_bravais = "oF3" + elif bravais_lattice == "oI": + # Sort a,b,c, first is the largest + sorted_vectors = sorted([(c, 1, "c"), (b, 3, "b"), (a, 2, "a")])[::-1] + if abs(sorted_vectors[0][0] - sorted_vectors[1][0]) < threshold: + warnings.warn( + "oI lattice, but the two longest vectors {} and {} " + "have almost the same length".format( + sorted_vectors[0][2], sorted_vectors[1][2] + ), + EdgeCaseWarning, + ) + ext_bravais = "{}{}".format(bravais_lattice, sorted_vectors[0][1]) + elif bravais_lattice == "oC": + if abs(b - a) < threshold: + warnings.warn("oC lattice, but a almost equal to b", EdgeCaseWarning) + if a <= b: + ext_bravais = "oC1" + else: + ext_bravais = "oC2" + elif bravais_lattice == "oA": + if abs(b - c) < threshold: + warnings.warn("oA lattice, but b almost equal to c", EdgeCaseWarning) + if b <= c: + ext_bravais = "oA1" + else: + ext_bravais = "oA2" + elif bravais_lattice == "hP": + if spgrp_num in [ + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 151, + 153, + 157, + 159, + 160, + 161, + 162, + 163, + ]: + ext_bravais = "hP1" + else: + ext_bravais = "hP2" + elif bravais_lattice == "hR": + if abs(sqrt(3.0) * a - sqrt(2.0) * c) < threshold: + warnings.warn( + "hR lattice, but sqrt(3)a almost equal to sqrt(2)c", EdgeCaseWarning + ) + if sqrt(3.0) * a <= sqrt(2.0) * c: + ext_bravais = "hR1" + else: + ext_bravais = "hR2" + elif bravais_lattice == "mP": + ext_bravais = "mP1" + elif bravais_lattice == "mC": + if abs(b - a * sqrt(1.0 - cosbeta**2)) < threshold: + warnings.warn( + "mC lattice, but b almost equal to a*sin(beta)", EdgeCaseWarning + ) + if b < a * sqrt(1.0 - cosbeta**2): + ext_bravais = "mC1" + else: + if ( + abs(-a * cosbeta / c + a**2 * (1.0 - cosbeta**2) / b**2 - 1.0) + < threshold + ): + warnings.warn( + "mC lattice, but -a*cos(beta)/c + " + "a^2*sin(beta)^2/b^2 almost equal to 1", + EdgeCaseWarning, + ) + if -a * cosbeta / c + a**2 * (1.0 - cosbeta**2) / b**2 <= 1.0: + # 12-face + ext_bravais = "mC2" + else: + ext_bravais = "mC3" + elif bravais_lattice == "aP": + # First step: cell that is Niggli reduced in reciprocal space + # I use the default eps here, this could be changed + reciprocal_cell_orig = get_reciprocal_cell_rows(conv_lattice) + ## This is Niggli-reduced + reciprocal_cell2 = spglib.niggli_reduce(reciprocal_cell_orig) + real_cell2 = get_real_cell_from_reciprocal_rows(reciprocal_cell2) + # TODO: get transformation matrix? + + ka2, kb2, kc2, coskalpha2, coskbeta2, coskgamma2 = get_cell_params( + reciprocal_cell2 + ) + + conditions = np.array( + [ + abs(kb2 * kc2 * coskalpha2), + abs(kc2 * ka2 * coskbeta2), + abs(ka2 * kb2 * coskgamma2), + ] + ) + M2_matrices = [ + np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0]]), + np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]), + np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), + ] + # TODO: manage edge cases + smallest_condition = np.argsort(conditions)[0] + M2 = M2_matrices[smallest_condition] + # First change of vectors to have |ka3 kb3 cosgamma3| smallest + real_cell3 = np.dot(np.array(real_cell2).T, M2).T + reciprocal_cell3 = get_reciprocal_cell_rows(real_cell3) + ka3, kb3, kc3, coskalpha3, coskbeta3, coskgamma3 = get_cell_params( + reciprocal_cell3 + ) + if abs(coskalpha3) < threshold: + warnings.warn( + "aP lattice, but the k_alpha3 angle is almost equal " "to 90 degrees", + EdgeCaseWarning, + ) + if abs(coskbeta3) < threshold: + warnings.warn( + "aP lattice, but the k_beta3 angle is almost equal " "to 90 degrees", + EdgeCaseWarning, + ) + if abs(coskgamma3) < threshold: + warnings.warn( + "aP lattice, but the k_gamma3 angle is almost equal " "to 90 degrees", + EdgeCaseWarning, + ) + # Make them all-acute or all-obtuse with the additional conditions + # explained in HPKOT + # Note: cos > 0 => angle < 90deg + if coskalpha3 > 0.0 and coskbeta3 > 0.0 and coskgamma3 > 0.0: # 1a + M3 = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + elif coskalpha3 <= 0.0 and coskbeta3 <= 0.0 and coskgamma3 <= 0.0: # 1b + M3 = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + elif coskalpha3 > 0.0 and coskbeta3 <= 0.0 and coskgamma3 <= 0.0: # 2a + M3 = np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]]) + elif coskalpha3 <= 0.0 and coskbeta3 > 0.0 and coskgamma3 > 0.0: # 2b + M3 = np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]]) + elif coskalpha3 <= 0.0 and coskbeta3 > 0.0 and coskgamma3 <= 0.0: # 3a + M3 = np.array([[-1, 0, 0], [0, 1, 0], [0, 0, -1]]) + elif coskalpha3 > 0.0 and coskbeta3 <= 0.0 and coskgamma3 > 0.0: # 3b + M3 = np.array([[-1, 0, 0], [0, 1, 0], [0, 0, -1]]) + elif coskalpha3 <= 0.0 and coskbeta3 <= 0.0 and coskgamma3 > 0.0: # 4a + M3 = np.array([[-1, 0, 0], [0, -1, 0], [0, 0, 1]]) + elif coskalpha3 > 0.0 and coskbeta3 > 0.0 and coskgamma3 <= 0.0: # 4b + M3 = np.array([[-1, 0, 0], [0, -1, 0], [0, 0, 1]]) + else: + raise ValueError( + "Problem identifying M3 matrix in aP lattice!" + "Sign of cosines: cos(kalpha3){}0, " + "cos(kbeta3){}0, cos(kgamma3){}0".format( + ">=" if coskalpha3 >= 0 else "<", + ">=" if coskbeta3 >= 0 else "<", + ">=" if coskgamma3 >= 0 else "<", + ) + ) + + real_cell_final = np.dot(real_cell3.T, M3).T + reciprocal_cell_final = get_reciprocal_cell_rows(real_cell_final) + ka, kb, kc, coskalpha, coskbeta, coskgamma = get_cell_params( + reciprocal_cell_final + ) + + if coskalpha <= 0.0 and coskbeta <= 0.0 and coskgamma <= 0.0: + # all-obtuse + ext_bravais = "aP2" + elif coskalpha >= 0.0 and coskbeta >= 0.0 and coskgamma >= 0.0: + # all-acute + ext_bravais = "aP3" + else: + raise ValueError( + "Unexpected aP triclinic lattice, it neither " + "all-obtuse nor all-acute! Sign of cosines: cos(kalpha){}0, " + "cos(kbeta){}0, cos(kgamma){}0".format( + ">=" if coskalpha >= 0 else "<", + ">=" if coskbeta >= 0 else "<", + ">=" if coskgamma >= 0 else "<", + ) + ) + + # Get absolute positions + conv_pos_abs = np.dot(conv_positions, conv_lattice) + # Replace conv_lattice with the new conv_lattice + conv_lattice = np.array(real_cell_final) + # Store the relative coords with respect to the new vectors + # TODO: decide if we want to do %1. for the fractional coordinates + conv_positions = np.dot(conv_pos_abs, np.linalg.inv(conv_lattice)) + # TODO: implement the correct one (probably we need the matrix + # out from niggli, and then we can combine it with M2 and M3??) + # We set it to None for the time being to avoid confusion + transformation_matrix = None + + else: + raise ValueError( + "Unknown type '{}' for spacegroup {}".format( + bravais_lattice, dataset["number"] + ) + ) + + # NOTE: we simply use spglib.find_primitive, because the + # find_primitive of spglib follows a different convention for mC + # and oA as explained in the HPKOT paper + (prim_lattice, prim_pos, prim_types), (P, invP), conv_prim_mapping = get_primitive( + structure=(conv_lattice, conv_positions, conv_types), + bravais_lattice=bravais_lattice, + ) + + # Get the path data (k-parameters definitions, defition of the points, + # suggested path) + kparam_def, points_def, path = get_path_data(ext_bravais) + + # Get the actual numerical values of the k-parameters + # Note: at each step, I pass kparam and store the new + # parameter in the same dictionary. This allows to have + # some parameters defined implicitly in terms of previous + # parameters, as far as they are returned in the + kparam = {} + for kparam_name, kparam_expr in kparam_def: + kparam[kparam_name] = eval_expr( + kparam_expr, a, b, c, cosalpha, cosbeta, cosgamma, kparam + ) + + # Extend kparam with additional simple expressions (like 1-a, ...) + kparam_extended = extend_kparam(kparam) + + # Now I have evaluated all needed kparams; I can compute the actual + # coordinates of the relevant kpoints, using eval_expr_simple + points = {} + for pointname, coords_def in points_def.items(): + coords = [eval_expr_simple(_, kparam_extended) for _ in coords_def] + points[pointname] = coords + + # If there is no inversion symmetry nor time-reversal symmetry, add + # additional path + if not has_inv and not with_time_reversal: + augmented_path = True + else: + augmented_path = False + + if augmented_path: + for pointname, coords in list(points.items()): + if pointname == "GAMMA": + continue + points["{}'".format(pointname)] = [-coords[0], -coords[1], -coords[2]] + old_path = copy.deepcopy(path) + for start_p, end_p in old_path: + if start_p == "GAMMA": + new_start_p = start_p + else: + new_start_p = "{}'".format(start_p) + if end_p == "GAMMA": + new_end_p = end_p + else: + new_end_p = "{}'".format(end_p) + path.append((new_start_p, new_end_p)) + + return { + "point_coords": points, + "path": path, + "has_inversion_symmetry": has_inv, + "augmented_path": augmented_path, + "bravais_lattice": bravais_lattice, + "bravais_lattice_extended": ext_bravais, + "conv_lattice": conv_lattice, + "conv_positions": conv_positions, + "conv_types": conv_types, + "primitive_lattice": prim_lattice, + "primitive_positions": prim_pos, + "primitive_types": prim_types, + "reciprocal_primitive_lattice": get_reciprocal_cell_rows(prim_lattice), + # The following: between conv and primitive, see docstring of + # spg_mapping.get_P_matrix + "inverse_primitive_transformation_matrix": invP, + "primitive_transformation_matrix": P, + # For the time being disabled, not valid for aP lattices + # (for which we would need the transformation matrix from niggli) + #'transformation_matrix': transf_matrix, + "volume_original_wrt_conv": volume_conv_wrt_original, + "volume_original_wrt_prim": volume_conv_wrt_original * np.linalg.det(invP), + "spacegroup_number": dataset["number"], + "spacegroup_international": dataset["international"], + "rotation_matrix": dataset["std_rotation_matrix"], + } diff --git a/susyexists/src/seekpath/hpkot/__pycache__/__init__.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..d1e22b84 Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/__init__.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/hpkot/__pycache__/spg_db.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/spg_db.cpython-310.pyc new file mode 100644 index 00000000..33dc2830 Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/spg_db.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/hpkot/__pycache__/spg_mapping.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/spg_mapping.cpython-310.pyc new file mode 100644 index 00000000..80dab1e2 Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/spg_mapping.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/hpkot/__pycache__/tools.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/tools.cpython-310.pyc new file mode 100644 index 00000000..0177e6a2 Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/tools.cpython-310.pyc differ diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_inversion new file mode 100644 index 00000000..f7b8cf83 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_inversion @@ -0,0 +1,12 @@ +aP2Y BPOSCAR-0675402 + 1.0 + -1.2489688500000000 2.4101964100000002 -1.1084066800000001 + -3.8805945199999998 -0.4578071300000000 0.1425430700000000 + -1.4313846100000001 2.5585931100000003 3.3956427200000006 + Cu Ag O + 1 1 2 +Direct + 0.5000000000000000 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.1691864300000000 0.3370706700000000 0.2835515499999998 + 0.8308135699999999 0.6629293300000000 0.7164484500000001 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_noinversion new file mode 100644 index 00000000..a63bde43 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_noinversion @@ -0,0 +1,12 @@ +aP2N BPOSCAR-0676400 + 1.0 + 0.2232003000000002 3.9509284600000001 0.1087184900000000 + 0.3371022500000000 0.0885412800000000 4.1905891500000001 + 4.5153270699999997 0.1789567900000000 0.3161373900000000 + Tl N O + 1 1 2 +Direct + 0.9926416100000000 0.9866600400000000 0.0201893400000000 + 0.4692735300000002 0.4346563700000002 0.5762333700000000 + 0.3840447300000002 0.4084731400000002 0.3183778200000001 + 0.6540401400000000 0.6702104500000001 0.5851994800000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP2/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP2/path.txt new file mode 100644 index 00000000..96037614 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/path.txt @@ -0,0 +1,7 @@ +GAMMA X +Y GAMMA +GAMMA Z +R GAMMA +GAMMA T +U GAMMA +GAMMA V diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP2/points.txt new file mode 100644 index 00000000..b21ff5e5 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/points.txt @@ -0,0 +1,8 @@ +GAMMA 0 0 0 +Z 0 0 1/2 +Y 0 1/2 0 +X 1/2 0 0 +V 1/2 1/2 0 +U 1/2 0 1/2 +T 0 1/2 1/2 +R 1/2 1/2 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_inversion new file mode 100644 index 00000000..034e6db2 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_inversion @@ -0,0 +1,14 @@ +aP3Y BPOSCAR-0642822 + 1.0 + 2.0626889899999998 2.6083333300000002 -2.0959087400000000 + 1.9072983399999999 2.9395872999999999 1.8656656300000001 + 6.5783827900000000 -3.2025691800000007 1.4025826200000000 + Ca C + 2 4 +Direct + 0.2293290750000000 0.9643429050000000 0.7541443700000001 + 0.7706709250000001 0.0356570950000000 0.2458556299999999 + 0.1294345049999998 0.4304467199999998 0.0623625850000001 + 0.8705654950000002 0.5695532800000003 0.9376374149999998 + 0.4456382749999998 0.6359233099999999 0.4306348850000002 + 0.5543617250000001 0.3640766900000001 0.5693651149999999 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_noinversion new file mode 100644 index 00000000..46982b54 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_noinversion @@ -0,0 +1,12 @@ +aP3N BPOSCAR-0635393 + 1.0 + -1.9233544500000015 -3.4958872399999996 1.3364586999999970 + 1.9624998199999997 -2.5383092100000000 2.8008223899999996 + -2.9663797300000017 3.7162808800000002 6.3732958999999996 + Ca P I + 2 1 1 +Direct + 0.6536658899999999 0.7085705400000003 0.3177989800000001 + 0.3133405799999996 0.3342418600000008 0.6846297399999999 + 0.9818335000000000 0.0236059500000002 0.5000213100000001 + 0.0511600299999996 0.9335816500000002 0.9975499799999996 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP3/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP3/path.txt new file mode 100644 index 00000000..3923ed87 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/path.txt @@ -0,0 +1,7 @@ +GAMMA X +Y GAMMA +GAMMA Z +R_2 GAMMA +GAMMA T_2 +U_2 GAMMA +GAMMA V_2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP3/points.txt new file mode 100644 index 00000000..f572b7dd --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/points.txt @@ -0,0 +1,9 @@ +GAMMA 0 0 0 +Z 0 0 1/2 +Y 0 1/2 0 +Y_2 0 -1/2 0 +X 1/2 0 0 +V_2 1/2 -1/2 0 +U_2 -1/2 0 1/2 +T_2 0 -1/2 1/2 +R_2 -1/2 -1/2 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_inversion new file mode 100644 index 00000000..b96b2f42 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_inversion @@ -0,0 +1,96 @@ +cF1Y BPOSCAR-0019863 + 1.0 + 10.8589940276984667 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 10.8589940276984667 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 10.8589940276984667 + N O K Cu Pb + 24 48 8 4 4 +Direct + 0.8008872400000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.1991127600000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.8008872400000000 + 0.0000000000000000 0.0000000000000000 0.1991127600000000 + 0.0000000000000000 0.8008872400000000 0.0000000000000000 + 0.1991127600000000 0.0000000000000000 0.0000000000000000 + 0.8008872400000000 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.6991127600000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.3008872400000000 + 0.0000000000000000 0.5000000000000000 0.6991127600000000 + 0.0000000000000000 0.3008872400000000 0.5000000000000000 + 0.1991127600000000 0.5000000000000000 0.5000000000000000 + 0.3008872400000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.1991127600000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.3008872400000000 + 0.5000000000000000 0.0000000000000000 0.6991127600000000 + 0.5000000000000000 0.8008872400000000 0.5000000000000000 + 0.6991127600000000 0.0000000000000000 0.5000000000000000 + 0.3008872400000000 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.6991127600000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.8008872400000000 + 0.5000000000000000 0.5000000000000000 0.1991127600000000 + 0.5000000000000000 0.3008872400000000 0.0000000000000000 + 0.6991127600000000 0.5000000000000000 0.0000000000000000 + 0.0992918700000000 0.2589942300000000 0.0000000000000000 + 0.2589942300000000 0.0000000000000000 0.9007081299999999 + 0.7410057700000000 0.0000000000000000 0.0992918700000000 + 0.7410057700000000 0.0000000000000000 0.9007081299999999 + 0.2589942300000000 0.0000000000000000 0.0992918700000000 + 0.0000000000000000 0.9007081299999999 0.2589942300000000 + 0.0992918700000000 0.7410057700000000 0.0000000000000000 + 0.9007081299999999 0.7410057700000000 0.0000000000000000 + 0.0000000000000000 0.0992918700000000 0.7410057700000000 + 0.0000000000000000 0.9007081299999999 0.7410057700000000 + 0.9007081299999999 0.2589942300000000 0.0000000000000000 + 0.0000000000000000 0.0992918700000000 0.2589942300000000 + 0.0992918700000000 0.7589942300000000 0.5000000000000000 + 0.2589942300000000 0.5000000000000000 0.4007081300000000 + 0.7410057700000000 0.5000000000000000 0.5992918700000001 + 0.7410057700000000 0.5000000000000000 0.4007081300000000 + 0.2589942300000000 0.5000000000000000 0.5992918700000001 + 0.0000000000000000 0.4007081300000000 0.7589942300000000 + 0.0992918700000000 0.2410057700000000 0.5000000000000000 + 0.9007081299999999 0.2410057700000000 0.5000000000000000 + 0.0000000000000000 0.5992918700000001 0.2410057700000000 + 0.0000000000000000 0.4007081300000000 0.2410057700000000 + 0.9007081299999999 0.7589942300000000 0.5000000000000000 + 0.0000000000000000 0.5992918700000001 0.7589942300000000 + 0.5992918700000001 0.2589942300000000 0.5000000000000000 + 0.7589942300000000 0.0000000000000000 0.4007081300000000 + 0.2410057700000000 0.0000000000000000 0.5992918700000001 + 0.2410057700000000 0.0000000000000000 0.4007081300000000 + 0.7589942300000000 0.0000000000000000 0.5992918700000001 + 0.5000000000000000 0.9007081299999999 0.7589942300000000 + 0.5992918700000001 0.7410057700000000 0.5000000000000000 + 0.4007081300000000 0.7410057700000000 0.5000000000000000 + 0.5000000000000000 0.0992918700000000 0.2410057700000000 + 0.5000000000000000 0.9007081299999999 0.2410057700000000 + 0.4007081300000000 0.2589942300000000 0.5000000000000000 + 0.5000000000000000 0.0992918700000000 0.7589942300000000 + 0.5992918700000001 0.7589942300000000 0.0000000000000000 + 0.7589942300000000 0.5000000000000000 0.9007081299999999 + 0.2410057700000000 0.5000000000000000 0.0992918700000000 + 0.2410057700000000 0.5000000000000000 0.9007081299999999 + 0.7589942300000000 0.5000000000000000 0.0992918700000000 + 0.5000000000000000 0.4007081300000000 0.2589942300000000 + 0.5992918700000001 0.2410057700000000 0.0000000000000000 + 0.4007081300000000 0.2410057700000000 0.0000000000000000 + 0.5000000000000000 0.5992918700000001 0.7410057700000000 + 0.5000000000000000 0.4007081300000000 0.7410057700000000 + 0.4007081300000000 0.7589942300000000 0.0000000000000000 + 0.5000000000000000 0.5992918700000001 0.2589942300000000 + 0.7500000000000000 0.2500000000000000 0.2500000000000000 + 0.2500000000000000 0.7500000000000000 0.7500000000000000 + 0.7500000000000000 0.7500000000000000 0.7500000000000000 + 0.2500000000000000 0.2500000000000000 0.2500000000000000 + 0.2500000000000000 0.2500000000000000 0.7500000000000000 + 0.7500000000000000 0.7500000000000000 0.2500000000000000 + 0.2500000000000000 0.7500000000000000 0.2500000000000000 + 0.7500000000000000 0.2500000000000000 0.7500000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_noinversion new file mode 100644 index 00000000..e3c6e445 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_noinversion @@ -0,0 +1,96 @@ +cF1N BPOSCAR-0608162 + 1.0 + 10.5257053675443810 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 10.5257053675443810 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 10.5257053675443810 + K Cu Pb N O + 8 4 4 24 48 +Direct + 0.7500000000000000 0.2500000000000000 0.2500000000000000 + 0.2500000000000000 0.7500000000000000 0.7500000000000000 + 0.7500000000000000 0.7500000000000000 0.7500000000000000 + 0.2500000000000000 0.2500000000000000 0.2500000000000000 + 0.2500000000000000 0.2500000000000000 0.7500000000000000 + 0.7500000000000000 0.7500000000000000 0.2500000000000000 + 0.2500000000000000 0.7500000000000000 0.2500000000000000 + 0.7500000000000000 0.2500000000000000 0.7500000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.0000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.7997519249999998 + 0.0000000000000000 0.2002480750000002 0.0000000000000000 + 0.2002480750000002 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.7997519249999998 0.0000000000000000 + 0.7997519249999998 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.2002480750000002 + 0.0000000000000000 0.5000000000000000 0.2997519249999998 + 0.0000000000000000 0.7002480750000002 0.5000000000000000 + 0.2002480750000002 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.2997519249999998 0.5000000000000000 + 0.7997519249999998 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.7002480750000002 + 0.5000000000000000 0.0000000000000000 0.2997519249999998 + 0.5000000000000000 0.2002480750000002 0.5000000000000000 + 0.7002480750000002 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.7997519249999998 0.5000000000000000 + 0.2997519249999998 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.7002480750000002 + 0.5000000000000000 0.5000000000000000 0.7997519249999998 + 0.5000000000000000 0.7002480750000002 0.0000000000000000 + 0.7002480750000002 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.2997519249999998 0.0000000000000000 + 0.2997519249999998 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.2002480750000002 + 0.1009603100000000 0.7627072449999998 0.4840792550000000 + 0.9840792550000000 0.8990396900000001 0.7372927550000002 + 0.7372927550000002 0.0159207450000000 0.1009603100000000 + 0.9840792550000000 0.1009603100000000 0.2627072449999998 + 0.0159207450000000 0.8990396900000001 0.2627072449999998 + 0.2627072449999998 0.0159207450000000 0.8990396900000001 + 0.8990396900000001 0.2372927550000002 0.4840792550000000 + 0.1009603100000000 0.2372927550000002 0.5159207450000000 + 0.7372927550000002 0.9840792550000000 0.8990396900000001 + 0.2627072449999998 0.9840792550000000 0.1009603100000000 + 0.8990396900000001 0.7627072449999998 0.5159207450000000 + 0.0159207450000000 0.1009603100000000 0.7372927550000002 + 0.1009603100000000 0.2627072449999998 0.9840792550000000 + 0.9840792550000000 0.3990396900000000 0.2372927550000002 + 0.7372927550000002 0.5159207450000000 0.6009603099999999 + 0.9840792550000000 0.6009603099999999 0.7627072449999998 + 0.0159207450000000 0.3990396900000000 0.7627072449999998 + 0.2627072449999998 0.5159207450000000 0.3990396900000000 + 0.8990396900000001 0.7372927550000002 0.9840792550000000 + 0.1009603100000000 0.7372927550000002 0.0159207450000000 + 0.7372927550000002 0.4840792550000000 0.3990396900000000 + 0.2627072449999998 0.4840792550000000 0.6009603099999999 + 0.8990396900000001 0.2627072449999998 0.0159207450000000 + 0.0159207450000000 0.6009603099999999 0.2372927550000002 + 0.6009603099999999 0.7627072449999998 0.9840792550000000 + 0.4840792550000000 0.8990396900000001 0.2372927550000002 + 0.2372927550000002 0.0159207450000000 0.6009603099999999 + 0.4840792550000000 0.1009603100000000 0.7627072449999998 + 0.5159207450000000 0.8990396900000001 0.7627072449999998 + 0.7627072449999998 0.0159207450000000 0.3990396900000000 + 0.3990396900000000 0.2372927550000002 0.9840792550000000 + 0.6009603099999999 0.2372927550000002 0.0159207450000000 + 0.2372927550000002 0.9840792550000000 0.3990396900000000 + 0.7627072449999998 0.9840792550000000 0.6009603099999999 + 0.3990396900000000 0.7627072449999998 0.0159207450000000 + 0.5159207450000000 0.1009603100000000 0.2372927550000002 + 0.6009603099999999 0.2627072449999998 0.4840792550000000 + 0.4840792550000000 0.3990396900000000 0.7372927550000002 + 0.2372927550000002 0.5159207450000000 0.1009603100000000 + 0.4840792550000000 0.6009603099999999 0.2627072449999998 + 0.5159207450000000 0.3990396900000000 0.2627072449999998 + 0.7627072449999998 0.5159207450000000 0.8990396900000001 + 0.3990396900000000 0.7372927550000002 0.4840792550000000 + 0.6009603099999999 0.7372927550000002 0.5159207450000000 + 0.2372927550000002 0.4840792550000000 0.8990396900000001 + 0.7627072449999998 0.4840792550000000 0.1009603100000000 + 0.3990396900000000 0.2627072449999998 0.5159207450000000 + 0.5159207450000000 0.6009603099999999 0.7372927550000002 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF1/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF1/path.txt new file mode 100644 index 00000000..3b22a840 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/path.txt @@ -0,0 +1,7 @@ +GAMMA X +X U +K GAMMA +GAMMA L +L W +W X +X W_2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF1/points.txt new file mode 100644 index 00000000..b5b6d65c --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/points.txt @@ -0,0 +1,7 @@ +GAMMA 0 0 0 +X 1/2 0 1/2 +L 1/2 1/2 1/2 +W 1/2 1/4 3/4 +W_2 3/4 1/4 1/2 +K 3/8 3/8 3/4 +U 5/8 1/4 5/8 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_inversion new file mode 100644 index 00000000..f2b50ba5 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_inversion @@ -0,0 +1,16 @@ +cF2Y BPOSCAR-0000451 + 1.0 + 4.9126411092111697 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 4.9126411092111697 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.9126411092111697 + B Zr + 4 4 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_noinversion new file mode 100644 index 00000000..c3401699 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_noinversion @@ -0,0 +1,16 @@ +cF2N BPOSCAR-0008222 + 1.0 + 5.0670397789115720 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.0670397789115720 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.0670397789115720 + O Ag + 4 4 +Direct + 0.7500000000000000 0.7500000000000000 0.2500000000000000 + 0.7500000000000000 0.2500000000000000 0.7500000000000000 + 0.2500000000000000 0.7500000000000000 0.7500000000000000 + 0.2500000000000000 0.2500000000000000 0.2500000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF2/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF2/path.txt new file mode 100644 index 00000000..166303c6 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/path.txt @@ -0,0 +1,6 @@ +GAMMA X +X U +K GAMMA +GAMMA L +L W +W X diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF2/points.txt new file mode 100644 index 00000000..b5b6d65c --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/points.txt @@ -0,0 +1,7 @@ +GAMMA 0 0 0 +X 1/2 0 1/2 +L 1/2 1/2 1/2 +W 1/2 1/4 3/4 +W_2 3/4 1/4 1/2 +K 3/8 3/8 3/4 +U 5/8 1/4 5/8 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_inversion new file mode 100644 index 00000000..b9a01c7a --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_inversion @@ -0,0 +1,16 @@ +cI1Y BPOSCAR-0570334 + 1.0 + 5.2123498899999996 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.2123498899999996 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.2123498899999996 + Si W + 2 6 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_noinversion new file mode 100644 index 00000000..1a32a011 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_noinversion @@ -0,0 +1,18 @@ +cI1N BPOSCAR-0001818 + 1.0 + 5.5951250842907712 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.5951250842907712 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.5951250842907712 + F Si + 8 2 +Direct + 0.1632964950000000 0.8367035050000000 0.1632964950000000 + 0.8367035050000000 0.1632964950000000 0.1632964950000000 + 0.1632964950000000 0.1632964950000000 0.8367035050000000 + 0.8367035050000000 0.8367035050000000 0.8367035050000000 + 0.6632964950000000 0.3367035050000000 0.6632964950000000 + 0.3367035050000000 0.6632964950000000 0.6632964950000000 + 0.6632964950000000 0.6632964950000000 0.3367035050000000 + 0.3367035050000000 0.3367035050000000 0.3367035050000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cI1/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cI1/path.txt new file mode 100644 index 00000000..8232a4aa --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/path.txt @@ -0,0 +1,6 @@ +GAMMA H +H N +N GAMMA +GAMMA P +P H +P N diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cI1/points.txt new file mode 100644 index 00000000..c0e19ba3 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/points.txt @@ -0,0 +1,4 @@ +GAMMA 0 0 0 +H 1/2 -1/2 1/2 +P 1/4 1/4 1/4 +N 0 0 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_inversion new file mode 100644 index 00000000..4de47947 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_inversion @@ -0,0 +1,19 @@ +cP1Y BPOSCAR-0022597 + 1.0 + 6.0025823999999988 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 6.0025823999999988 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 6.0025823999999988 + N O Rb Cd + 3 6 1 1 +Direct + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.7075126700000000 + 0.0000000000000000 0.7075126700000000 0.5000000000000000 + 0.0000000000000000 0.2924873300000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.2924873300000000 + 0.2924873300000000 0.5000000000000000 0.0000000000000000 + 0.7075126700000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_noinversion new file mode 100644 index 00000000..871566e6 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_noinversion @@ -0,0 +1,16 @@ +cP1N BPOSCAR-0008675 + 1.0 + 5.3233224500000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.3233224500000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.3233224500000000 + Pd Hg + 4 4 +Direct + 0.1525474800000000 0.3474525200000000 0.6525474800000000 + 0.3474525200000000 0.6525474800000000 0.1525474800000000 + 0.6525474800000000 0.1525474800000000 0.3474525200000000 + 0.8474525200000000 0.8474525200000000 0.8474525200000000 + 0.8435654299999999 0.6564345700000001 0.3435654300000000 + 0.6564345700000001 0.3435654300000000 0.8435654299999999 + 0.3435654300000000 0.8435654299999999 0.6564345700000001 + 0.1564345700000000 0.1564345700000000 0.1564345700000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP1/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP1/path.txt new file mode 100644 index 00000000..f21622d6 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/path.txt @@ -0,0 +1,7 @@ +GAMMA X +X M +M GAMMA +GAMMA R +R X +R M +M X_1 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP1/points.txt new file mode 100644 index 00000000..f6555f79 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/points.txt @@ -0,0 +1,5 @@ +GAMMA 0 0 0 +R 1/2 1/2 1/2 +M 1/2 1/2 0 +X 0 1/2 0 +X_1 1/2 0 0 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_inversion new file mode 100644 index 00000000..059f8430 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_inversion @@ -0,0 +1,10 @@ +cP2Y BPOSCAR-0000284 + 1.0 + 2.8531242500000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 2.8531242500000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 2.8531242500000000 + Al Co + 1 1 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_noinversion new file mode 100644 index 00000000..0564edcc --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_noinversion @@ -0,0 +1,13 @@ +cP2N BPOSCAR-0571436 + 1.0 + 6.6864277300000010 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 6.6864277300000010 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 6.6864277300000010 + Sn I + 1 4 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.2339031900000000 0.7660968100000000 0.7660968100000000 + 0.7660968100000000 0.2339031900000000 0.7660968100000000 + 0.7660968100000000 0.7660968100000000 0.2339031900000000 + 0.2339031900000000 0.2339031900000000 0.2339031900000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP2/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP2/path.txt new file mode 100644 index 00000000..b3a1d072 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/path.txt @@ -0,0 +1,6 @@ +GAMMA X +X M +M GAMMA +GAMMA R +R X +R M diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP2/points.txt new file mode 100644 index 00000000..f6555f79 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/points.txt @@ -0,0 +1,5 @@ +GAMMA 0 0 0 +R 1/2 1/2 1/2 +M 1/2 1/2 0 +X 0 1/2 0 +X_1 1/2 0 0 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_inversion new file mode 100644 index 00000000..8afe117a --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_inversion @@ -0,0 +1,15 @@ +hP1Y BPOSCAR-0000882 + 1.0 + 5.1132522679799095 0.0000000000000000 0.0000000000000000 + -2.5566261339899548 4.4282063600289971 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.7497088850000004 + O Ti + 1 6 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.6684051500000000 0.6684051500000000 0.7391580200000001 + 0.6684051500000000 0.0000000000000000 0.2608419799999999 + 0.0000000000000000 0.6684051500000000 0.2608419799999999 + 0.3315948500000000 0.3315948500000000 0.2608419799999999 + 0.3315948500000000 0.0000000000000000 0.7391580200000001 + 0.0000000000000000 0.3315948500000000 0.7391580200000001 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_noinversion new file mode 100644 index 00000000..322b2660 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_noinversion @@ -0,0 +1,13 @@ +hP1N BPOSCAR-0574250 + 1.0 + 7.3838276686181779 0.0000000000000000 0.0000000000000000 + -3.6919138343090889 6.3945823381897675 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.2679669400000000 + In Si Te + 1 1 3 +Direct + 0.6666666666666667 0.3333333333333333 0.4633006600000000 + 0.0000000000000000 0.0000000000000000 0.2766757500000000 + 0.0544849066666666 0.3550765733333332 0.2667378600000000 + 0.6449234266666668 0.6994083333333334 0.2667378600000000 + 0.3005916666666666 0.9455150933333334 0.2667378600000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP1/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP1/path.txt new file mode 100644 index 00000000..79f24e7c --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/path.txt @@ -0,0 +1,10 @@ +GAMMA M +M K +K GAMMA +GAMMA A +A L +L H +H A +L M +H K +K H_2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP1/points.txt new file mode 100644 index 00000000..43bbe684 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/points.txt @@ -0,0 +1,7 @@ +GAMMA 0 0 0 +A 0 0 1/2 +K 1/3 1/3 0 +H 1/3 1/3 1/2 +H_2 1/3 1/3 -1/2 +M 1/2 0 0 +L 1/2 0 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_inversion new file mode 100644 index 00000000..9a797bfc --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_inversion @@ -0,0 +1,11 @@ +hP2Y BPOSCAR-0001103 + 1.0 + 4.0893356498319466 0.0000000000000000 0.0000000000000000 + -2.0446678249159733 3.5414685573558113 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 3.7962176799999998 + Si Lu + 2 1 +Direct + 0.3333333333333333 0.6666666666666667 0.5000000000000000 + 0.6666666666666667 0.3333333333333333 0.5000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_noinversion new file mode 100644 index 00000000..98f58ab6 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_noinversion @@ -0,0 +1,10 @@ +hP2N BPOSCAR-0000219 + 1.0 + 3.2446419509649993 0.0000000000000000 0.0000000000000000 + -1.6223209754824996 2.8099423557203922 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 3.2005169000000002 + P Mo + 1 1 +Direct + 0.3333333333333333 0.6666666666666667 0.5000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP2/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP2/path.txt new file mode 100644 index 00000000..cde9b1e8 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/path.txt @@ -0,0 +1,9 @@ +GAMMA M +M K +K GAMMA +GAMMA A +A L +L H +H A +L M +H K diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP2/points.txt new file mode 100644 index 00000000..43bbe684 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/points.txt @@ -0,0 +1,7 @@ +GAMMA 0 0 0 +A 0 0 1/2 +K 1/3 1/3 0 +H 1/3 1/3 1/2 +H_2 1/3 1/3 -1/2 +M 1/2 0 0 +L 1/2 0 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_inversion new file mode 100644 index 00000000..e84faae2 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_inversion @@ -0,0 +1,14 @@ +hR1Y BPOSCAR-0020132 + 1.0 + 3.7622432546763140 0.0000000000000000 0.0000000000000000 + -1.8811216273381570 3.2581982337663353 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 13.5138670706735571 + In Hg + 3 3 +Direct + 0.6666666666666667 0.3333333333333333 0.8333333333333333 + 0.3333333333333333 0.6666666666666666 0.1666666666666666 + 0.0000000000000000 0.0000000000000000 0.4999999999999999 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.6666666666666666 0.3333333333333333 0.3333333333333333 + 0.3333333333333333 0.6666666666666666 0.6666666666666666 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_noinversion new file mode 100644 index 00000000..187f70e9 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_noinversion @@ -0,0 +1,14 @@ +hR1N BPOSCAR-0022895 + 1.0 + 4.3089558515497082 0.0000000000000000 0.0000000000000000 + -2.1544779257748541 3.7316652312276553 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 10.2486516858249015 + Cu I + 3 3 +Direct + 0.0000000000000000 0.0000000000000000 0.2797794000000000 + 0.6666666666666666 0.3333333333333333 0.6131127333333333 + 0.3333333333333333 0.6666666666666666 0.9464460666666666 + 0.0000000000000000 0.0000000000000000 0.0252206000000002 + 0.6666666666666666 0.3333333333333333 0.3585539333333334 + 0.3333333333333333 0.6666666666666666 0.6918872666666668 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR1/k_vector_parameters.txt new file mode 100644 index 00000000..b8d379ae --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/k_vector_parameters.txt @@ -0,0 +1,3 @@ +D a*a/4/c/c +Y 5/6-2*D +N 1/3+D diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR1/path.txt new file mode 100644 index 00000000..22c5fa65 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/path.txt @@ -0,0 +1,7 @@ +GAMMA T +T H_2 +H_0 L +L GAMMA +GAMMA S_0 +S_2 F +F GAMMA diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR1/points.txt new file mode 100644 index 00000000..6700f97f --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/points.txt @@ -0,0 +1,20 @@ +GAMMA 0 0 0 +T 1/2 1/2 1/2 +L 1/2 0 0 +L_2 0 -1/2 0 +L_4 0 0 -1/2 +F 1/2 0 1/2 +F_2 1/2 1/2 0 +S_0 N -N 0 +S_2 1-N 0 N +S_4 N 0 -N +S_6 1-N N 0 +H_0 1/2 -1+Y 1-Y +H_2 Y 1-Y 1/2 +H_4 Y 1/2 1-Y +H_6 1/2 1-Y -1+Y +M_0 N -1+Y N +M_2 1-N 1-Y 1-N +M_4 Y N N +M_6 1-N 1-N 1-Y +M_8 N N -1+Y diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion new file mode 100644 index 00000000..009897b4 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion @@ -0,0 +1,38 @@ +Mn1 O3 S1 +1.0 + 7.9120001793 0.0000000000 0.0000000000 + -2.6073387350 7.4700422728 0.0000000000 + -2.6073387350 -3.6716632672 6.5054146993 + Mn S O + 6 6 18 +Direct + 0.365300000 0.186100006 0.681429982 + 0.634700000 0.813899994 0.318570018 + 0.681429982 0.365300000 0.186100006 + 0.318570018 0.634700000 0.813899994 + 0.186100006 0.681429982 0.365300000 + 0.813899994 0.318570018 0.634700000 + 0.355500013 0.024850000 0.210030004 + 0.644500017 0.975149989 0.789969981 + 0.210030004 0.355500013 0.024850000 + 0.789969981 0.644500017 0.975149989 + 0.024850000 0.210030004 0.355500013 + 0.975149989 0.789969981 0.644500017 + 0.553499997 0.230100006 0.340499997 + 0.446500003 0.769899964 0.659500003 + 0.340499997 0.553499997 0.230100006 + 0.659500003 0.446500003 0.769899964 + 0.230100006 0.340499997 0.553499997 + 0.769899964 0.659500003 0.446500003 + 0.310099989 0.979699969 0.372500002 + 0.689900041 0.020300001 0.627499998 + 0.372500002 0.310099989 0.979699969 + 0.627499998 0.689900041 0.020300001 + 0.979699969 0.372500002 0.310099989 + 0.020300001 0.627499998 0.689900041 + 0.412699997 0.867799997 0.119000003 + 0.587300003 0.132200003 0.880999982 + 0.119000003 0.412699997 0.867799997 + 0.880999982 0.587300003 0.132200003 + 0.867799997 0.119000003 0.412699997 + 0.132200003 0.880999982 0.587300003 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion_alternate new file mode 100644 index 00000000..db06b38d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion_alternate @@ -0,0 +1,20 @@ +hR2Y BPOSCAR-0559435 + 1.0 + 5.5166617143778431 0.0000000000000000 0.0000000000000000 + -2.7583308571889216 4.7775691887362246 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 6.5087155299999999 + F Co + 9 3 +Direct + 0.8333333333333333 0.6666666666666666 0.1666666666666666 + 0.6666666666666666 0.8333333333333333 0.8333333333333334 + 0.8333333333333333 0.1666666666666667 0.1666666666666666 + 0.4999999999999999 0.0000000000000000 0.5000000000000000 + 0.3333333333333332 0.1666666666666666 0.1666666666666666 + 0.4999999999999999 0.5000000000000000 0.5000000000000000 + 0.1666666666666666 0.3333333333333332 0.8333333333333333 + 0.0000000000000000 0.4999999999999999 0.5000000000000000 + 0.1666666666666666 0.8333333333333333 0.8333333333333333 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.6666666666666666 0.3333333333333333 0.3333333333333333 + 0.3333333333333333 0.6666666666666666 0.6666666666666666 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_noinversion new file mode 100644 index 00000000..fd324549 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_noinversion @@ -0,0 +1,17 @@ +hR2N BPOSCAR-0035308 + 1.0 + 6.1618161492568841 0.0000000000000000 0.0000000000000000 + -3.0809080746284421 5.3362893187056679 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.8124574132877891 + C Cu N + 3 3 3 +Direct + 0.0000000000000000 0.0000000000000000 0.3778850299999999 + 0.6666666666666666 0.3333333333333333 0.7112183633333332 + 0.3333333333333333 0.6666666666666666 0.0445516966666666 + 0.0000000000000000 0.0000000000000000 0.0002308800000000 + 0.6666666666666666 0.3333333333333333 0.3335642133333334 + 0.3333333333333333 0.6666666666666666 0.6668975466666667 + 0.0000000000000000 0.0000000000000000 0.6218840800000001 + 0.6666666666666666 0.3333333333333333 0.9552174133333334 + 0.3333333333333333 0.6666666666666666 0.2885507466666666 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR2/k_vector_parameters.txt new file mode 100644 index 00000000..de20aaae --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/k_vector_parameters.txt @@ -0,0 +1,3 @@ +Z 1/6-c*c/9/a/a +H 1/2-2*Z +N 1/2+Z diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR2/path.txt new file mode 100644 index 00000000..9c59e332 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/path.txt @@ -0,0 +1,5 @@ +GAMMA L +L T +T P_0 +P_2 GAMMA +GAMMA F diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR2/points.txt new file mode 100644 index 00000000..0e8a46f0 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/points.txt @@ -0,0 +1,9 @@ +GAMMA 0 0 0 +T 1/2 -1/2 1/2 +P_0 H -1+H H +P_2 H H H +R_0 1-H -H -H +M 1-N -N 1-N +M_2 N -1+N -1+N +L 1/2 0 0 +F 1/2 -1/2 0 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion new file mode 100644 index 00000000..7859e5fb --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion @@ -0,0 +1,16 @@ +Cu1 O1 +1.0 + 4.6529998779 0.0000000000 0.0000000000 + 0.0000000000 3.4100000858 0.0000000000 + -0.8413048067 0.0000000000 5.0382405853 + Cu O + 4 4 +Direct + 0.250000000 0.250000000 0.000000000 + 0.750000000 0.750000000 0.000000000 + 0.750000000 0.250000000 0.500000000 + 0.250000000 0.750000000 0.500000000 + 0.000000000 0.583999991 0.250000000 + 0.000000000 0.416000009 0.750000000 + 0.500000000 0.083999991 0.250000000 + 0.500000000 0.916000009 0.750000000 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion_alternate new file mode 100644 index 00000000..453c5039 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion_alternate @@ -0,0 +1,14 @@ +mC1Y BPOSCAR-0023219 + 1.0 + 7.6917654295426541 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 3.4925583779989822 0.0000000000000000 + -3.3889674554441087 0.0000000000000000 6.1941827927435229 + Cu Br + 2 4 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.9906259350000000 0.5000000000000000 0.7580006699999999 + 0.0093740650000000 0.5000000000000000 0.2419993300000000 + 0.4906259350000000 0.0000000000000000 0.7580006699999999 + 0.5093740650000000 0.0000000000000000 0.2419993300000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion new file mode 100644 index 00000000..4180a7e7 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion @@ -0,0 +1,16 @@ +Cu1 O1 +1.0 + 4.6890001297 0.0000000000 0.0000000000 + 0.0000000000 3.4200000763 0.0000000000 + -0.8528750994 0.0000000000 5.0586070453 + Cu O + 4 4 +Direct + 0.250000000 0.231999993 0.000000000 + 0.250000000 0.768000007 0.500000000 + 0.750000000 0.731999993 0.000000000 + 0.750000000 0.268000007 0.500000000 + 0.972999990 0.412999988 0.233999997 + 0.972999990 0.587000012 0.733999968 + 0.472999990 0.912999988 0.233999997 + 0.472999990 0.087000012 0.733999968 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion_alternate new file mode 100644 index 00000000..37f23abb --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion_alternate @@ -0,0 +1,14 @@ +mC1N BPOSCAR-0632403 + 1.0 + 5.9523730992692938 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.9315452334996053 0.0000000000000000 + -0.1322263448500317 0.0000000000000000 4.9936063923993803 + Cd Cl + 2 4 +Direct + 0.0000000000000000 0.8435554000000002 0.0000000000000000 + 0.5000000000000000 0.3435554000000002 0.0000000000000000 + 0.2512113300000000 0.0819644100000003 0.7285905800000003 + 0.7487886699999999 0.0819644100000003 0.2714094199999996 + 0.7512113300000001 0.5819644100000003 0.7285905800000003 + 0.2487886700000000 0.5819644100000003 0.2714094199999996 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC1/k_vector_parameters.txt new file mode 100644 index 00000000..85e248ae --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/k_vector_parameters.txt @@ -0,0 +1,4 @@ +Z (2+a/c*cosbeta)/4/sinbeta/sinbeta +H 1/2-2*Z*c*cosbeta/a +S 3/4-b*b/4/a/a/sinbeta/sinbeta +P S-(3/4-S)*a*cosbeta/c diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC1/path.txt new file mode 100644 index 00000000..afd2c6ca --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/path.txt @@ -0,0 +1,9 @@ +GAMMA C +C_2 Y_2 +Y_2 GAMMA +GAMMA M_2 +M_2 D +D_2 A +A GAMMA +L_2 GAMMA +GAMMA V_2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC1/points.txt new file mode 100644 index 00000000..40664dfe --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/points.txt @@ -0,0 +1,16 @@ +GAMMA 0 0 0 +Y_2 -1/2 1/2 0 +Y_4 1/2 -1/2 0 +A 0 0 1/2 +M_2 -1/2 1/2 1/2 +V 1/2 0 0 +V_2 0 1/2 0 +L_2 0 1/2 1/2 +C 1-S 1-S 0 +C_2 -1+S S 0 +C_4 S -1+S 0 +D -1+P P 1/2 +D_2 1-P 1-P 1/2 +E -1+Z 1-Z 1-H +E_2 -Z Z H +E_4 Z -Z 1-H diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion new file mode 100644 index 00000000..bb3b7a1f --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion @@ -0,0 +1,16 @@ +Cr1 S1 +1.0 + 3.8259999752 0.0000000000 0.0000000000 + 0.0000000000 5.9130001068 0.0000000000 + -1.2243633483 0.0000000000 5.9646339479 + Cr S + 4 4 +Direct + 0.000000000 0.000000000 0.000000000 + 0.000000000 0.000000000 0.500000000 + 0.500000000 0.500000000 0.000000000 + 0.500000000 0.500000000 0.500000000 + 0.000000000 0.319999993 0.250000000 + 0.000000000 0.680000007 0.750000000 + 0.500000000 0.819999993 0.250000000 + 0.500000000 0.180000007 0.750000000 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion_alternate new file mode 100644 index 00000000..070fa4c3 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion_alternate @@ -0,0 +1,20 @@ +mC2Y BPOSCAR-0849598 + 1.0 + 2.8361602316236882 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 4.9041675669748317 0.0000000000000000 + -0.2930545685024968 0.0000000000000000 10.6463836915664292 + Co O + 4 8 +Direct + 0.2500000000000000 0.7500000000000000 0.0000000000000000 + 0.7500000000000000 0.7500000000000000 0.5000000000000000 + 0.7500000000000000 0.2500000000000000 0.0000000000000000 + 0.2500000000000000 0.2500000000000000 0.5000000000000000 + 0.7573757500000002 0.9163308999999999 0.0906554850000001 + 0.2426242499999998 0.9163308999999999 0.4093445149999999 + 0.7426242499999998 0.5836691000000001 0.9093445150000000 + 0.2573757500000002 0.5836691000000001 0.5906554850000001 + 0.2573757500000002 0.4163308999999999 0.0906554850000001 + 0.7426242499999998 0.4163308999999999 0.4093445149999999 + 0.2426242499999998 0.0836691000000000 0.9093445150000000 + 0.7573757500000002 0.0836691000000000 0.5906554850000001 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_noinversion new file mode 100644 index 00000000..694a10bb --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_noinversion @@ -0,0 +1,14 @@ +mC2N BPOSCAR-0684604 + 1.0 + 4.4543676407916521 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.9441566239106152 0.0000000000000000 + -2.0649512746343106 0.0000000000000000 4.5288322975994166 + Cu S + 2 4 +Direct + 0.0000000000000000 0.2823929850000000 0.0000000000000000 + 0.5000000000000000 0.7823929850000000 0.0000000000000000 + 0.0646265024999999 0.9926399325000000 0.7196481600000000 + 0.9353734975000000 0.9926399325000000 0.2803518400000000 + 0.5646265024999999 0.4926399324999999 0.7196481600000000 + 0.4353734975000001 0.4926399324999999 0.2803518400000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC2/k_vector_parameters.txt new file mode 100644 index 00000000..a5ce1c6d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/k_vector_parameters.txt @@ -0,0 +1,6 @@ +Z (a*a/b/b+(1+a/c*cosbeta)/sinbeta/sinbeta)/4 +M (1+a*a/b/b)/4 +D -a*c*cosbeta/2/b/b +X 1/2-2*Z*c*cosbeta/a +P 1+Z-2*M +S X-2*D diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC2/path.txt new file mode 100644 index 00000000..15c24804 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/path.txt @@ -0,0 +1,6 @@ +GAMMA Y +Y M +M A +A GAMMA +L_2 GAMMA +GAMMA V_2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC2/points.txt new file mode 100644 index 00000000..4e04590d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/points.txt @@ -0,0 +1,16 @@ +GAMMA 0 0 0 +Y 1/2 1/2 0 +A 0 0 1/2 +M 1/2 1/2 1/2 +V_2 0 1/2 0 +L_2 0 1/2 1/2 +F -1+P 1-P 1-S +F_2 1-P P S +F_4 P 1-P 1-S +H -Z Z X +H_2 Z 1-Z 1-X +H_4 Z -Z 1-X +G -M M D +G_2 M 1-M -D +G_4 M -M -D +G_6 1-M M D diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_inversion new file mode 100644 index 00000000..2a305566 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_inversion @@ -0,0 +1,14 @@ +mC3Y BPOSCAR-0755333 + 1.0 + 4.9221728169717158 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.0500784999999997 0.0000000000000000 + -1.9363348593869576 0.0000000000000000 3.8443169378737232 + Hg O + 2 4 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.5244409400000001 0.0000000000000000 0.6825487000000000 + 0.4755590600000000 0.0000000000000000 0.3174513000000000 + 0.0244409400000000 0.5000000000000000 0.6825487000000000 + 0.9755590600000000 0.5000000000000000 0.3174513000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_noinversion new file mode 100644 index 00000000..9c80651e --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_noinversion @@ -0,0 +1,16 @@ +mC3N BPOSCAR-0546787 + 1.0 + 6.0503027690559161 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.8058162443484527 0.0000000000000000 + -1.3412847479118257 0.0000000000000000 3.9837269517466511 + O K N + 4 2 2 +Direct + 0.9204877800000000 0.6856527500000000 0.4000303300000000 + 0.9204877800000000 0.3143472500000000 0.4000303300000000 + 0.4204877800000000 0.1856527500000000 0.4000303300000000 + 0.4204877800000000 0.8143472500000000 0.4000303300000000 + 0.9924952600000000 0.0000000000000000 0.9494725800000000 + 0.4924952600000000 0.5000000000000000 0.9494725800000000 + 0.4988838949999999 0.0000000000000000 0.5567151100000001 + 0.9988838949999999 0.5000000000000000 0.5567151100000001 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC3/k_vector_parameters.txt new file mode 100644 index 00000000..cf4a2b4a --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/k_vector_parameters.txt @@ -0,0 +1,7 @@ +Z (a*a/b/b+(1+a/c*cosbeta)/sinbeta/sinbeta)/4 +R 1-Z*b*b/a/a +E 1/2-2*Z*c*cosbeta/a +F E/2+a*a/4/b/b+a*c*cosbeta/2/b/b +U 2*F-Z +W c/2/a/cosbeta*(1-4*U+a*a*sinbeta*sinbeta/b/b) +D -1/4+W/2-Z*c*cosbeta/a diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC3/path.txt new file mode 100644 index 00000000..226205e3 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/path.txt @@ -0,0 +1,7 @@ +GAMMA A +A I_2 +I M_2 +M_2 GAMMA +GAMMA Y +L_2 GAMMA +GAMMA V_2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC3/points.txt new file mode 100644 index 00000000..961f7071 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/points.txt @@ -0,0 +1,19 @@ +GAMMA 0 0 0 +Y 1/2 1/2 0 +A 0 0 1/2 +M_2 -1/2 1/2 1/2 +V 1/2 0 0 +V_2 0 1/2 0 +L_2 0 1/2 1/2 +I -1+R R 1/2 +I_2 1-R 1-R 1/2 +K -U U W +K_2 -1+U 1-U 1-W +K_4 1-U U W +H -Z Z E +H_2 Z 1-Z 1-E +H_4 Z -Z 1-E +N -F F D +N_2 F 1-F -D +N_4 F -F -D +N_6 1-F F D diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_inversion new file mode 100644 index 00000000..ac3ca189 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_inversion @@ -0,0 +1,12 @@ +mP1Y BPOSCAR-0001048 + 1.0 + 2.9385939922724953 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 4.0149254499999998 0.0000000000000000 + -0.9809144665664697 0.0000000000000000 4.6621998437406615 + Ti Ni + 2 2 +Direct + 0.6102526299999999 0.7500000000000000 0.7841075399999999 + 0.3897473700000002 0.2500000000000000 0.2158924600000000 + 0.9374365400000000 0.7500000000000000 0.3284379699999999 + 0.0625634599999999 0.2500000000000000 0.6715620300000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion new file mode 100644 index 00000000..e3a2c043 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion @@ -0,0 +1,20 @@ +Au1 Te2 +1.0 + 8.7600002289 0.0000000000 0.0000000000 + 0.0000000000 4.4099998474 0.0000000000 + -5.8507873475 0.0000000000 8.2940207180 + Au Te + 4 8 +Direct + 0.748300016 0.493800014 0.124300003 + 0.748300016 0.506199956 0.624300003 + 0.246000007 0.994099975 0.873099983 + 0.246000007 0.005900000 0.373099983 + 0.935100019 0.986199975 0.572799981 + 0.935100019 0.013800000 0.072799981 + 0.558499992 0.052000001 0.674700022 + 0.558499992 0.948000014 0.174700022 + 0.057500001 0.446399987 0.420899987 + 0.057500001 0.553600013 0.920899987 + 0.436300009 0.558499992 0.323500007 + 0.436300009 0.441500008 0.823500037 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion_alternate new file mode 100644 index 00000000..bd01116a --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion_alternate @@ -0,0 +1,13 @@ +mP1N BPOSCAR-0037036 + 1.0 + 4.3191896229634406 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 3.7277627610011685 0.0000000000000000 + -0.2651497979729798 0.0000000000000000 5.7104711285392602 + Bi O + 2 3 +Direct + 0.0435174299999992 0.0000000000000000 0.0357734900000000 + 0.4811621599999999 0.5000000000000000 0.4800676200000000 + 0.5036851999999993 0.0000000000000000 0.2121958200000000 + 0.2902936299999997 0.0000000000000000 0.6861861600000001 + 0.0393416099999997 0.5000000000000000 0.2647768900000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mP1/k_vector_parameters.txt new file mode 100644 index 00000000..de426841 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/k_vector_parameters.txt @@ -0,0 +1,2 @@ +Y (1+a/c*cosbeta)/2/sinbeta/sinbeta +N 1/2+Y*c*cosbeta/a diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mP1/path.txt new file mode 100644 index 00000000..b7acaf7b --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/path.txt @@ -0,0 +1,10 @@ +GAMMA Z +Z D +D B +B GAMMA +GAMMA A +A E +E Z +Z C_2 +C_2 Y_2 +Y_2 GAMMA diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mP1/points.txt new file mode 100644 index 00000000..049122e0 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/points.txt @@ -0,0 +1,18 @@ +GAMMA 0 0 0 +Z 0 1/2 0 +B 0 0 1/2 +B_2 0 0 -1/2 +Y 1/2 0 0 +Y_2 -1/2 0 0 +C 1/2 1/2 0 +C_2 -1/2 1/2 0 +D 0 1/2 1/2 +D_2 0 1/2 -1/2 +A -1/2 0 1/2 +E -1/2 1/2 1/2 +H -Y 0 1-N +H_2 -1+Y 0 N +H_4 -Y 0 -N +M -Y 1/2 1-N +M_2 -1+Y 1/2 N +M_4 -Y 1/2 -N diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oA1/POSCAR_noinversion new file mode 100644 index 00000000..3143baaf --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/POSCAR_noinversion @@ -0,0 +1,14 @@ +oA1N BPOSCAR-0632475 + 1.0 + 3.5372412112199783 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 3.1790663357329523 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 9.9032878682703824 + Nb S + 2 4 +Direct + 0.0000000000000000 0.0000000000000000 0.0309652399999998 + 0.0000000000000000 0.5000000000000000 0.5309652399999998 + 0.0000000000000000 0.5000000000000000 0.8489601849999999 + 0.5000000000000000 0.5000000000000000 0.1263269549999999 + 0.0000000000000000 0.0000000000000000 0.3489601849999999 + 0.5000000000000000 0.0000000000000000 0.6263269549999999 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA1/k_vector_parameters.txt new file mode 100644 index 00000000..65033af5 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/k_vector_parameters.txt @@ -0,0 +1 @@ +X (1+b*b/c/c)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA1/path.txt new file mode 100644 index 00000000..1d8637f2 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/path.txt @@ -0,0 +1,11 @@ +GAMMA Y +Y C_0 +SIGMA_0 GAMMA +GAMMA Z +Z A_0 +E_0 T +T Y +GAMMA S +S R +R Z +Z T diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA1/points.txt new file mode 100644 index 00000000..49efa4b4 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/points.txt @@ -0,0 +1,10 @@ +GAMMA 0 0 0 +Y -1/2 1/2 0 +T -1/2 1/2 1/2 +Z 0 0 1/2 +S 0 1/2 0 +R 0 1/2 1/2 +SIGMA_0 X X 0 +C_0 -X 1-X 0 +A_0 X X 1/2 +E_0 -X 1-X 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oA2/POSCAR_noinversion new file mode 100644 index 00000000..dcbbdf14 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/POSCAR_noinversion @@ -0,0 +1,16 @@ +oA2N BPOSCAR-0776563 + 1.0 + 3.0969165300000001 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 8.3989907800000001 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.9027343099999996 + Cr O + 2 6 +Direct + 0.0000000000000000 0.0000000000000000 0.8606000400000000 + 0.0000000000000000 0.5000000000000000 0.3606000400000000 + 0.5000000000000000 0.0000000000000000 0.0421212999999999 + 0.0000000000000000 0.8482551199999999 0.6657793299999999 + 0.0000000000000000 0.1517448800000001 0.6657793299999999 + 0.5000000000000000 0.5000000000000000 0.5421212999999999 + 0.0000000000000000 0.3482551199999998 0.1657793300000000 + 0.0000000000000000 0.6517448800000001 0.1657793300000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA2/k_vector_parameters.txt new file mode 100644 index 00000000..18b16f55 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/k_vector_parameters.txt @@ -0,0 +1 @@ +X (1+c*c/b/b)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA2/path.txt new file mode 100644 index 00000000..ad5a6ef5 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/path.txt @@ -0,0 +1,11 @@ +GAMMA Y +Y F_0 +DELTA_0 GAMMA +GAMMA Z +Z B_0 +G_0 T +T Y +GAMMA S +S R +R Z +Z T diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA2/points.txt new file mode 100644 index 00000000..41f61b23 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/points.txt @@ -0,0 +1,15 @@ +GAMMA 0 0 0 +Y 1/2 1/2 0 +T 1/2 1/2 1/2 +T_2 1/2 1/2 -1/2 +Z 0 0 1/2 +Z_2 0 0 -1/2 +S 0 1/2 0 +R 0 1/2 1/2 +R_2 0 1/2 -1/2 +DELTA_0 -X X 0 +F_0 X 1-X 0 +B_0 -X X 1/2 +B_2 -X X -1/2 +G_0 X 1-X 1/2 +G_2 X 1-X -1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_inversion new file mode 100644 index 00000000..024f69f7 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_inversion @@ -0,0 +1,12 @@ +oC1Y BPOSCAR-0022558 + 1.0 + 3.6793989900000006 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 4.1535798599999998 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 3.8236792350000002 + Si Ti + 2 2 +Direct + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_noinversion new file mode 100644 index 00000000..17a251ce --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_noinversion @@ -0,0 +1,16 @@ +oC1N BPOSCAR-0571636 + 1.0 + 4.4114352315552399 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 12.4398762544664478 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.5441456599999999 + In Cl + 4 4 +Direct + 0.5000000000000000 0.1136209299999999 0.7500967299999999 + 0.5000000000000000 0.8863790700000000 0.2500967299999999 + 0.0000000000000000 0.6136209300000000 0.7500967299999999 + 0.0000000000000000 0.3863790700000001 0.2500967299999999 + 0.0000000000000000 0.8444605049999999 0.7659032699999999 + 0.0000000000000000 0.1555394950000001 0.2659032699999999 + 0.5000000000000000 0.3444605049999999 0.7659032699999999 + 0.5000000000000000 0.6555394950000001 0.2659032699999999 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC1/k_vector_parameters.txt new file mode 100644 index 00000000..7ded452d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/k_vector_parameters.txt @@ -0,0 +1 @@ +X (1+a*a/b/b)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC1/path.txt new file mode 100644 index 00000000..1d8637f2 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/path.txt @@ -0,0 +1,11 @@ +GAMMA Y +Y C_0 +SIGMA_0 GAMMA +GAMMA Z +Z A_0 +E_0 T +T Y +GAMMA S +S R +R Z +Z T diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC1/points.txt new file mode 100644 index 00000000..49efa4b4 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/points.txt @@ -0,0 +1,10 @@ +GAMMA 0 0 0 +Y -1/2 1/2 0 +T -1/2 1/2 1/2 +Z 0 0 1/2 +S 0 1/2 0 +R 0 1/2 1/2 +SIGMA_0 X X 0 +C_0 -X 1-X 0 +A_0 X X 1/2 +E_0 -X 1-X 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_inversion new file mode 100644 index 00000000..cf6d0445 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_inversion @@ -0,0 +1,16 @@ +oC2Y BPOSCAR-0027639 + 1.0 + 8.4287740423760944 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.4132319855084452 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 8.8163600399999993 + Br I + 4 4 +Direct + 0.0000000000000000 0.7990394399999999 0.2500000000000000 + 0.0000000000000000 0.2009605600000000 0.7500000000000000 + 0.5000000000000000 0.2990394400000000 0.2500000000000000 + 0.5000000000000000 0.7009605600000001 0.7500000000000000 + 0.0000000000000000 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.0000000000000000 + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.0000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_noinversion new file mode 100644 index 00000000..13087ec2 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_noinversion @@ -0,0 +1,24 @@ +oC2N BPOSCAR-0560008 + 1.0 + 9.0059756537376536 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.5869779485260906 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.9891349099999998 + P N F + 4 4 8 +Direct + 0.0000000000000000 0.8668441500000000 0.5046977300000000 + 0.0000000000000000 0.1331558500000000 0.0046977300000000 + 0.5000000000000000 0.3668441500000000 0.5046977300000000 + 0.5000000000000000 0.6331558500000000 0.0046977300000000 + 0.0000000000000000 0.9118570800000000 0.1953748200000000 + 0.0000000000000000 0.0881429200000000 0.6953748200000001 + 0.5000000000000000 0.4118570800000000 0.1953748200000000 + 0.5000000000000000 0.5881429200000000 0.6953748200000001 + 0.1317217700000000 0.3063995400000000 0.0694637200000000 + 0.8682782300000000 0.6936004600000001 0.5694637200000000 + 0.8682782300000000 0.3063995400000000 0.0694637200000000 + 0.1317217700000000 0.6936004600000001 0.5694637200000000 + 0.6317217700000000 0.8063995399999999 0.0694637200000000 + 0.3682782300000000 0.1936004600000000 0.5694637200000000 + 0.3682782300000000 0.8063995399999999 0.0694637200000000 + 0.6317217700000000 0.1936004600000000 0.5694637200000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC2/k_vector_parameters.txt new file mode 100644 index 00000000..50668952 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/k_vector_parameters.txt @@ -0,0 +1 @@ +X (1+b*b/a/a)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC2/path.txt new file mode 100644 index 00000000..ad5a6ef5 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/path.txt @@ -0,0 +1,11 @@ +GAMMA Y +Y F_0 +DELTA_0 GAMMA +GAMMA Z +Z B_0 +G_0 T +T Y +GAMMA S +S R +R Z +Z T diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC2/points.txt new file mode 100644 index 00000000..41f61b23 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/points.txt @@ -0,0 +1,15 @@ +GAMMA 0 0 0 +Y 1/2 1/2 0 +T 1/2 1/2 1/2 +T_2 1/2 1/2 -1/2 +Z 0 0 1/2 +Z_2 0 0 -1/2 +S 0 1/2 0 +R 0 1/2 1/2 +R_2 0 1/2 -1/2 +DELTA_0 -X X 0 +F_0 X 1-X 0 +B_0 -X X 1/2 +B_2 -X X -1/2 +G_0 X 1-X 1/2 +G_2 X 1-X -1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_inversion new file mode 100644 index 00000000..3fe3cbfa --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_inversion @@ -0,0 +1,20 @@ +oF1Y BPOSCAR-0614565 + 1.0 + 2.7462061222599123 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 7.2623585400000694 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 11.4917672794962744 + Cu O + 4 8 +Direct + 0.5000000000000000 0.5000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.6021200900000001 + 0.5000000000000000 0.5000000000000000 0.8978799099999999 + 0.0000000000000000 0.0000000000000000 0.1021200900000001 + 0.5000000000000000 0.0000000000000000 0.3978799099999999 + 0.5000000000000000 0.5000000000000000 0.1021200900000001 + 0.0000000000000000 0.5000000000000000 0.3978799099999999 + 0.5000000000000000 0.0000000000000000 0.6021200900000001 + 0.0000000000000000 0.0000000000000000 0.8978799099999999 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_noinversion new file mode 100644 index 00000000..e897f485 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_noinversion @@ -0,0 +1,16 @@ +oF1N BPOSCAR-0685145 + 1.0 + 2.5153398345521460 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 6.0450801374370702 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.3398312607247256 + B N + 4 4 +Direct + 0.0000000000000000 0.0000000000000000 0.0004411600000001 + 0.0000000000000000 0.5000000000000000 0.5004411600000001 + 0.5000000000000000 0.0000000000000000 0.5004411600000001 + 0.5000000000000000 0.5000000000000000 0.0004411600000001 + 0.0000000000000000 0.0000000000000000 0.6665199100000001 + 0.0000000000000000 0.5000000000000000 0.1665199100000000 + 0.5000000000000000 0.0000000000000000 0.1665199100000000 + 0.5000000000000000 0.5000000000000000 0.6665199100000001 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF1/k_vector_parameters.txt new file mode 100644 index 00000000..875b14c1 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/k_vector_parameters.txt @@ -0,0 +1,2 @@ +J (1+a*a/b/b-a*a/c/c)/4 +H (1+a*a/b/b+a*a/c/c)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF1/path.txt new file mode 100644 index 00000000..c8f9040d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/path.txt @@ -0,0 +1,9 @@ +GAMMA Y +Y T +T Z +Z GAMMA +GAMMA SIGMA_0 +U_0 T +Y C_0 +A_0 Z +GAMMA L diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF1/points.txt new file mode 100644 index 00000000..60da6b08 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/points.txt @@ -0,0 +1,9 @@ +GAMMA 0 0 0 +T 1 1/2 1/2 +Z 1/2 1/2 0 +Y 1/2 0 1/2 +SIGMA_0 0 H H +U_0 1 1-H 1-H +A_0 1/2 1/2+J J +C_0 1/2 1/2-J 1-J +L 1/2 1/2 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oF2/POSCAR_noinversion new file mode 100644 index 00000000..e58b6557 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/POSCAR_noinversion @@ -0,0 +1,32 @@ +oF2N BPOSCAR-0569272 + 1.0 + 10.4292567500000608 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 21.2694236321398442 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.5880580299681384 + Cs Se + 16 8 +Direct + 0.1729328200000002 0.5632488700000001 0.9531259500000002 + 0.8270671799999998 0.4367511299999999 0.9531259500000002 + 0.0770671799999998 0.3132488700000001 0.7031259500000002 + 0.9229328200000002 0.6867511299999999 0.7031259500000002 + 0.1729328200000002 0.0632488700000001 0.4531259500000002 + 0.8270671799999998 0.9367511299999998 0.4531259500000002 + 0.0770671799999998 0.8132488700000001 0.2031259500000002 + 0.9229328200000002 0.1867511299999999 0.2031259500000002 + 0.6729328200000002 0.5632488700000001 0.4531259500000002 + 0.3270671799999998 0.4367511299999999 0.4531259500000002 + 0.5770671799999998 0.3132488700000001 0.2031259500000002 + 0.4229328200000002 0.6867511299999999 0.2031259500000002 + 0.6729328200000002 0.0632488700000001 0.9531259500000002 + 0.3270671799999998 0.9367511299999998 0.9531259500000002 + 0.5770671799999998 0.8132488700000001 0.7031259500000002 + 0.4229328200000002 0.1867511299999999 0.7031259500000002 + 0.0000000000000000 0.5000000000000000 0.4701481000000003 + 0.7500000000000000 0.7500000000000000 0.2201481000000003 + 0.0000000000000000 0.0000000000000000 0.9701481000000002 + 0.7500000000000000 0.2500000000000000 0.7201481000000003 + 0.5000000000000000 0.5000000000000000 0.9701481000000002 + 0.2500000000000000 0.7500000000000000 0.7201481000000003 + 0.5000000000000000 0.0000000000000000 0.4701481000000003 + 0.2500000000000000 0.2500000000000000 0.2201481000000003 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF2/k_vector_parameters.txt new file mode 100644 index 00000000..6b9898da --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/k_vector_parameters.txt @@ -0,0 +1,2 @@ +J (1+c*c/a/a-c*c/b/b)/4 +K (1+c*c/a/a+c*c/b/b)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF2/path.txt new file mode 100644 index 00000000..bddd09d0 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/path.txt @@ -0,0 +1,9 @@ +GAMMA T +T Z +Z Y +Y GAMMA +GAMMA LAMBDA_0 +Q_0 Z +T G_0 +H_0 Y +GAMMA L diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF2/points.txt new file mode 100644 index 00000000..684f82a4 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/points.txt @@ -0,0 +1,9 @@ +GAMMA 0 0 0 +T 0 1/2 1/2 +Z 1/2 1/2 1 +Y 1/2 0 1/2 +LAMBDA_0 K K 0 +Q_0 1-K 1-K 1 +G_0 1/2-J 1-J 1/2 +H_0 1/2+J J 1/2 +L 1/2 1/2 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_inversion new file mode 100644 index 00000000..9855c66e --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_inversion @@ -0,0 +1,40 @@ +oF3Y BPOSCAR-0029752 + 1.0 + 7.4214640959206575 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 7.7727154597461103 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 7.9121098820103706 + Ni Ge Pt + 8 8 16 +Direct + 0.0000000000000000 0.2013824000000001 0.0000000000000000 + 0.0000000000000000 0.7986175999999999 0.0000000000000000 + 0.0000000000000000 0.7013824000000001 0.5000000000000000 + 0.0000000000000000 0.2986176000000000 0.5000000000000000 + 0.5000000000000000 0.2013824000000001 0.5000000000000000 + 0.5000000000000000 0.7986175999999999 0.5000000000000000 + 0.5000000000000000 0.7013824000000001 0.0000000000000000 + 0.5000000000000000 0.2986176000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.2326445950000000 + 0.0000000000000000 0.0000000000000000 0.7673554050000000 + 0.0000000000000000 0.5000000000000000 0.7326445950000000 + 0.0000000000000000 0.5000000000000000 0.2673554050000000 + 0.5000000000000000 0.0000000000000000 0.7326445950000000 + 0.5000000000000000 0.0000000000000000 0.2673554050000000 + 0.5000000000000000 0.5000000000000000 0.2326445950000000 + 0.5000000000000000 0.5000000000000000 0.7673554050000000 + 0.6979597600000003 0.0000000000000000 0.0000000000000000 + 0.7500000000000000 0.2500000000000000 0.2500000000000000 + 0.3020402399999998 0.0000000000000000 0.0000000000000000 + 0.7500000000000000 0.7500000000000000 0.2500000000000000 + 0.6979597600000003 0.5000000000000000 0.5000000000000000 + 0.7500000000000000 0.7500000000000000 0.7500000000000000 + 0.3020402399999998 0.5000000000000000 0.5000000000000000 + 0.7500000000000000 0.2500000000000000 0.7500000000000000 + 0.1979597600000002 0.0000000000000000 0.5000000000000000 + 0.2500000000000000 0.2500000000000000 0.7500000000000000 + 0.8020402399999997 0.0000000000000000 0.5000000000000000 + 0.2500000000000000 0.7500000000000000 0.7500000000000000 + 0.1979597600000002 0.5000000000000000 0.0000000000000000 + 0.2500000000000000 0.7500000000000000 0.2500000000000000 + 0.8020402399999997 0.5000000000000000 0.0000000000000000 + 0.2500000000000000 0.2500000000000000 0.2500000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_noinversion new file mode 100644 index 00000000..e72abd44 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_noinversion @@ -0,0 +1,24 @@ +oF3N BPOSCAR-0022009 + 1.0 + 6.2363014538798494 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 24.0015979387369036 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 6.2508834982500243 + Se Pb + 8 8 +Direct + 0.5000000000000000 0.1894212000000000 0.9850017800000000 + 0.5000000000000000 0.8105788000000000 0.9850017800000000 + 0.5000000000000000 0.6894212000000000 0.4850017799999999 + 0.5000000000000000 0.3105788000000000 0.4850017799999999 + 0.0000000000000000 0.1894212000000000 0.4850017799999999 + 0.0000000000000000 0.8105788000000000 0.4850017799999999 + 0.0000000000000000 0.6894212000000000 0.9850017800000000 + 0.0000000000000000 0.3105788000000000 0.9850017800000000 + 0.0000000000000000 0.1927314850000000 0.9979982250000000 + 0.0000000000000000 0.8072685150000001 0.9979982250000000 + 0.0000000000000000 0.6927314849999999 0.4979982249999999 + 0.0000000000000000 0.3072685150000000 0.4979982249999999 + 0.5000000000000000 0.1927314850000000 0.4979982249999999 + 0.5000000000000000 0.8072685150000001 0.4979982249999999 + 0.5000000000000000 0.6927314849999999 0.9979982250000000 + 0.5000000000000000 0.3072685150000000 0.9979982250000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF3/k_vector_parameters.txt new file mode 100644 index 00000000..dc832b13 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/k_vector_parameters.txt @@ -0,0 +1,3 @@ +H (1+a*a/b/b-a*a/c/c)/4 +K (1+b*b/a/a-b*b/c/c)/4 +P (1+c*c/b/b-c*c/a/a)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF3/path.txt new file mode 100644 index 00000000..d40b0833 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/path.txt @@ -0,0 +1,10 @@ +GAMMA Y +Y C_0 +A_0 Z +Z B_0 +D_0 T +T G_0 +H_0 Y +T GAMMA +GAMMA Z +GAMMA L diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF3/points.txt new file mode 100644 index 00000000..effbb545 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/points.txt @@ -0,0 +1,11 @@ +GAMMA 0 0 0 +T 0 1/2 1/2 +Z 1/2 1/2 0 +Y 1/2 0 1/2 +A_0 1/2 1/2+H H +C_0 1/2 1/2-H 1-H +B_0 1/2+K 1/2 K +D_0 1/2-K 1/2 1-K +G_0 P 1/2+P 1/2 +H_0 1-P 1/2-P 1/2 +L 1/2 1/2 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_inversion new file mode 100644 index 00000000..2c22c1ea --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_inversion @@ -0,0 +1,12 @@ +oI1Y BPOSCAR-0684664 + 1.0 + 3.1118027642203017 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.3500051348576578 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.7866263658364208 + Ga Sb + 2 2 +Direct + 0.0000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_noinversion new file mode 100644 index 00000000..90b535b0 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_noinversion @@ -0,0 +1,16 @@ +oI1N BPOSCAR-0025596 + 1.0 + 2.6917850833772863 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 3.3132275496844019 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 10.0701233878206633 + Li O Ni + 2 4 2 +Direct + 0.5000000000000000 0.0000000000000000 0.7724267500000002 + 0.0000000000000000 0.5000000000000000 0.2724267500000001 + 0.5000000000000000 0.5000000000000000 0.8826666700000001 + 0.5000000000000000 0.5000000000000000 0.1307543700000000 + 0.0000000000000000 0.0000000000000000 0.3826666700000001 + 0.0000000000000000 0.0000000000000000 0.6307543700000000 + 0.0000000000000000 0.5000000000000000 0.0071568500000000 + 0.5000000000000000 0.0000000000000000 0.5071568500000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI1/k_vector_parameters.txt new file mode 100644 index 00000000..69135c83 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/k_vector_parameters.txt @@ -0,0 +1,4 @@ +Z (1+a*a/c/c)/4 +H (1+b*b/c/c)/4 +D (b*b-a*a)/4/c/c +N (a*a+b*b)/4/c/c diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI1/path.txt new file mode 100644 index 00000000..c8757548 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/path.txt @@ -0,0 +1,11 @@ +GAMMA X +X F_2 +SIGMA_0 GAMMA +GAMMA Y_0 +U_0 X +GAMMA R +R W +W S +S GAMMA +GAMMA T +T W diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI1/points.txt new file mode 100644 index 00000000..dcd6eea2 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/points.txt @@ -0,0 +1,13 @@ +GAMMA 0 0 0 +X 1/2 1/2 -1/2 +S 1/2 0 0 +R 0 1/2 0 +T 0 0 1/2 +W 1/4 1/4 1/4 +SIGMA_0 -Z Z Z +F_2 Z 1-Z -Z +Y_0 H -H H +U_0 1-H H -H +L_0 -N N 1/2-D +M_0 N -N 1/2+D +J_0 1/2-D 1/2+D -N diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oI2/POSCAR_noinversion new file mode 100644 index 00000000..713c157f --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/POSCAR_noinversion @@ -0,0 +1,28 @@ +oI2N BPOSCAR-0866845 + 1.0 + 9.8579857154919317 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 6.8879312335870866 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 7.0088148600000002 + Ca Sn S + 4 4 12 +Direct + 0.7500000000000000 0.0305814600000002 0.0354614700000000 + 0.2500000000000000 0.9694185399999998 0.0354614700000000 + 0.2500000000000000 0.5305814600000002 0.5354614700000000 + 0.7500000000000000 0.4694185399999998 0.5354614700000000 + 0.0000000000000000 0.0000000000000000 0.5085183400000000 + 0.0000000000000000 0.5000000000000000 0.0085183399999999 + 0.5000000000000000 0.5000000000000000 0.0085183399999999 + 0.5000000000000000 0.0000000000000000 0.5085183400000000 + 0.2500000000000000 0.3739959450000001 0.9444468950000000 + 0.7500000000000000 0.6260040549999999 0.9444468950000000 + 0.0756857550000000 0.7605886250000001 0.7620421749999999 + 0.9243142450000000 0.2394113749999999 0.7620421749999999 + 0.9243142450000000 0.2605886250000002 0.2620421750000000 + 0.0756857550000000 0.7394113749999999 0.2620421750000000 + 0.7500000000000000 0.8739959450000001 0.4444468950000000 + 0.2500000000000000 0.1260040549999999 0.4444468950000000 + 0.5756857550000001 0.2605886250000002 0.2620421750000000 + 0.4243142450000000 0.7394113749999999 0.2620421750000000 + 0.4243142450000000 0.7605886250000001 0.7620421749999999 + 0.5756857550000001 0.2394113749999998 0.7620421749999999 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI2/k_vector_parameters.txt new file mode 100644 index 00000000..aa895a7d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/k_vector_parameters.txt @@ -0,0 +1,4 @@ +Z (1+b*b/a/a)/4 +H (1+c*c/a/a)/4 +D (c*c-b*b)/4/a/a +N (b*b+c*c)/4/a/a diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI2/path.txt new file mode 100644 index 00000000..c30cb7c2 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/path.txt @@ -0,0 +1,11 @@ +GAMMA X +X U_2 +Y_0 GAMMA +GAMMA LAMBDA_0 +G_2 X +GAMMA R +R W +W S +S GAMMA +GAMMA T +T W diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI2/points.txt new file mode 100644 index 00000000..c900673f --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/points.txt @@ -0,0 +1,13 @@ +GAMMA 0 0 0 +X -1/2 1/2 1/2 +S 1/2 0 0 +R 0 1/2 0 +T 0 0 1/2 +W 1/4 1/4 1/4 +Y_0 Z -Z Z +U_2 -Z Z 1-Z +LAMBDA_0 H H -H +G_2 -H 1-H H +K 1/2-D -N N +K_2 1/2+D N -N +K_4 -N 1/2-D 1/2+D diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_inversion new file mode 100644 index 00000000..64345393 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_inversion @@ -0,0 +1,20 @@ +oI3Y BPOSCAR-0030435 + 1.0 + 8.1511447228165714 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.0461430197341626 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 7.8659149207773531 + Zn Ba + 8 4 +Direct + 0.6724366150000002 0.7500000000000000 0.4101287450000002 + 0.8275633849999998 0.7500000000000000 0.0898712549999998 + 0.6724366150000002 0.2500000000000000 0.5898712549999998 + 0.8275633849999998 0.2500000000000000 0.9101287450000002 + 0.1724366150000002 0.2500000000000000 0.9101287450000002 + 0.3275633849999998 0.2500000000000000 0.5898712549999998 + 0.1724366150000002 0.7500000000000000 0.0898712549999998 + 0.3275633849999998 0.7500000000000000 0.4101287450000002 + 0.5000000000000000 0.7500000000000000 0.8073779000000001 + 0.0000000000000000 0.7500000000000000 0.6926220999999999 + 0.0000000000000000 0.2500000000000000 0.3073779000000001 + 0.5000000000000000 0.2500000000000000 0.1926220999999999 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion new file mode 100644 index 00000000..bc141bc5 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion @@ -0,0 +1,12 @@ +Hg1 O1 +1.0 + 3.3110001087 0.0000000000 0.0000000000 + 0.0000000000 5.5260000229 0.0000000000 + 0.0000000000 0.0000000000 3.5260000229 + Hg O + 2 2 +Direct + 0.000000000 0.000000000 0.000000000 + 0.500000000 0.500000000 0.500000000 + 0.000000000 0.500000000 0.170000002 + 0.500000000 0.000000000 0.670000017 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion_alternate new file mode 100644 index 00000000..3f54d672 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion_alternate @@ -0,0 +1,12 @@ +oI3N BPOSCAR-0684597 + 1.0 + 5.8530782471827889 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 6.1588711111131813 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 3.1607929446275036 + In Sb + 2 2 +Direct + 0.5000000000000000 0.0000000000000000 0.5976610100000000 + 0.0000000000000000 0.5000000000000000 0.0976610100000000 + 0.0000000000000000 0.0000000000000000 0.1515127200000000 + 0.5000000000000000 0.5000000000000000 0.6515127199999999 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI3/k_vector_parameters.txt new file mode 100644 index 00000000..5a7bcb32 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/k_vector_parameters.txt @@ -0,0 +1,4 @@ +Z (1+c*c/b/b)/4 +Y (1+a*a/b/b)/4 +D (a*a-c*c)/4/b/b +M (c*c+a*a)/4/b/b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI3/path.txt new file mode 100644 index 00000000..49bd952d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/path.txt @@ -0,0 +1,11 @@ +GAMMA X +X F_0 +SIGMA_0 GAMMA +GAMMA LAMBDA_0 +G_0 X +GAMMA R +R W +W S +S GAMMA +GAMMA T +T W diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI3/points.txt new file mode 100644 index 00000000..15aa13ab --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/points.txt @@ -0,0 +1,13 @@ +GAMMA 0 0 0 +X 1/2 -1/2 1/2 +S 1/2 0 0 +R 0 1/2 0 +T 0 0 1/2 +W 1/4 1/4 1/4 +SIGMA_0 -Y Y Y +F_0 Y -Y 1-Y +LAMBDA_0 Z Z -Z +G_0 1-Z -Z Z +V_0 M 1/2-D -M +H_0 -M 1/2+D M +H_2 1/2+D -M 1/2-D diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_inversion new file mode 100644 index 00000000..a54e65d9 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_inversion @@ -0,0 +1,11 @@ +oP1Y BPOSCAR-0705439 + 1.0 + 2.2658624671048813 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.9598350933265563 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 6.5642248417443598 + Cu O + 1 2 +Direct + 0.5000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.0000000000000000 0.9050977550000002 + 0.5000000000000000 0.0000000000000000 0.0949022449999998 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_noinversion new file mode 100644 index 00000000..d0e84f46 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_noinversion @@ -0,0 +1,10 @@ +oP1N BPOSCAR-0019744 + 1.0 + 3.0414632300000002 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 6.1468502899999997 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 3.1394173099999998 + In Sb + 1 1 +Direct + 0.0000000000000000 0.0000000000000000 0.0024766500000000 + 0.0000000000000000 0.5000000000000000 0.7475233500000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oP1/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oP1/path.txt new file mode 100644 index 00000000..3f09bcc7 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/path.txt @@ -0,0 +1,12 @@ +GAMMA X +X S +S Y +Y GAMMA +GAMMA Z +Z U +U R +R T +T Z +X U +Y T +S R diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oP1/points.txt new file mode 100644 index 00000000..81346fd4 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/points.txt @@ -0,0 +1,8 @@ +GAMMA 0 0 0 +X 1/2 0 0 +Z 0 0 1/2 +U 1/2 0 1/2 +Y 0 1/2 0 +S 1/2 1/2 0 +T 0 1/2 1/2 +R 1/2 1/2 1/2 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_inversion new file mode 100644 index 00000000..85befb72 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_inversion @@ -0,0 +1,18 @@ +tI1Y BPOSCAR-0012635 + 1.0 + 6.6011835174224816 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 6.6011835174224816 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.0143642377425790 + Ti Au + 2 8 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 + 0.1049425700000000 0.7069229100000002 0.5000000000000000 + 0.8950574300000000 0.2930770899999998 0.5000000000000000 + 0.2930770899999998 0.1049425700000000 0.5000000000000000 + 0.7069229100000002 0.8950574300000000 0.5000000000000000 + 0.6049425700000000 0.2069229100000002 0.0000000000000000 + 0.3950574300000000 0.7930770899999998 0.0000000000000000 + 0.7930770899999998 0.6049425700000000 0.0000000000000000 + 0.2069229100000002 0.3950574300000000 0.0000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_noinversion new file mode 100644 index 00000000..07e30986 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_noinversion @@ -0,0 +1,20 @@ +tI1N BPOSCAR-0540284 + 1.0 + 5.4794836100000683 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 5.4794836100000683 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.1848378200001886 + Cu O P + 2 8 2 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 + 0.1343956450000000 0.6953349850000001 0.9145759350000002 + 0.6953349850000001 0.8656043550000001 0.0854240649999999 + 0.8656043550000001 0.3046650149999998 0.9145759350000002 + 0.3046650149999998 0.1343956450000000 0.0854240649999999 + 0.6343956449999999 0.1953349850000001 0.4145759350000001 + 0.1953349850000001 0.3656043550000000 0.5854240649999999 + 0.3656043550000000 0.8046650149999999 0.4145759350000001 + 0.8046650149999999 0.6343956449999999 0.5854240649999999 + 0.5000000000000000 0.0000000000000000 0.2500000000000000 + 0.0000000000000000 0.5000000000000000 0.7500000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI1/k_vector_parameters.txt new file mode 100644 index 00000000..52bdedb4 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/k_vector_parameters.txt @@ -0,0 +1 @@ +H (1+c*c/a/a)/4 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI1/path.txt new file mode 100644 index 00000000..d9a5150f --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/path.txt @@ -0,0 +1,8 @@ +GAMMA X +X M +M GAMMA +GAMMA Z +Z_0 M +X P +P N +N GAMMA diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI1/points.txt new file mode 100644 index 00000000..4c35fd34 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/points.txt @@ -0,0 +1,7 @@ +GAMMA 0 0 0 +M -1/2 1/2 1/2 +X 0 0 1/2 +P 1/4 1/4 1/4 +Z H H -H +Z_0 -H 1-H H +N 0 1/2 0 diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_inversion new file mode 100644 index 00000000..d3b69d61 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_inversion @@ -0,0 +1,12 @@ +tI2Y BPOSCAR-0019275 + 1.0 + 3.0845227912262532 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 3.0845227912262532 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 4.0861539485071861 + O Co + 2 2 +Direct + 0.0000000000000000 0.0000000000000000 0.5000000000000000 + 0.5000000000000000 0.5000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_noinversion new file mode 100644 index 00000000..4760e77d --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_noinversion @@ -0,0 +1,12 @@ +tI2N BPOSCAR-0007590 + 1.0 + 3.5651955268357800 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 3.5651955268357800 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.7414401540403173 + P Ge + 2 2 +Direct + 0.5000000000000000 0.5000000000000000 0.9233913399999996 + 0.0000000000000000 0.0000000000000000 0.4233913399999996 + 0.0000000000000000 0.0000000000000000 0.0036086699999997 + 0.5000000000000000 0.5000000000000000 0.5036086699999996 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI2/k_vector_parameters.txt new file mode 100644 index 00000000..5dcb4b54 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/k_vector_parameters.txt @@ -0,0 +1,2 @@ +H (1+a*a/c/c)/4 +Z a*a/2/c/c diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI2/path.txt new file mode 100644 index 00000000..39c00310 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/path.txt @@ -0,0 +1,9 @@ +GAMMA X +X P +P N +N GAMMA +GAMMA M +M S +S_0 GAMMA +X R +G M diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI2/points.txt new file mode 100644 index 00000000..8ed3864f --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/points.txt @@ -0,0 +1,9 @@ +GAMMA 0 0 0 +M 1/2 1/2 -1/2 +X 0 0 1/2 +P 1/4 1/4 1/4 +N 0 1/2 0 +S_0 -H H H +S H 1-H -H +R -Z Z 1/2 +G 1/2 1/2 -Z diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_inversion new file mode 100644 index 00000000..3f099fc0 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_inversion @@ -0,0 +1,10 @@ +tP1Y BPOSCAR-0000949 + 1.0 + 2.6983934120929063 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 2.6983934120929063 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 3.7266309199999998 + Co Pt + 1 1 +Direct + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.5000000000000000 0.5000000000000000 0.5000000000000000 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_noinversion new file mode 100644 index 00000000..eab5ebba --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_noinversion @@ -0,0 +1,11 @@ +tP1N BPOSCAR-0033154 + 1.0 + 4.2857283318865660 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 4.2857283318865660 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 6.3547812573430607 + Ag I + 1 2 +Direct + 0.5000000000000000 0.5000000000000000 0.5000000000000000 + 0.0000000000000000 0.5000000000000000 0.7777616999999999 + 0.5000000000000000 0.0000000000000000 0.2222383000000001 \ No newline at end of file diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/tP1/k_vector_parameters.txt new file mode 100644 index 00000000..e69de29b diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/tP1/path.txt new file mode 100644 index 00000000..0f59a1a7 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/path.txt @@ -0,0 +1,9 @@ +GAMMA X +X M +M GAMMA +GAMMA Z +Z R +R A +A Z +X R +M A diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/tP1/points.txt new file mode 100644 index 00000000..947b3576 --- /dev/null +++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/points.txt @@ -0,0 +1,6 @@ +GAMMA 0 0 0 +Z 0 0 1/2 +M 1/2 1/2 0 +A 1/2 1/2 1/2 +R 0 1/2 1/2 +X 0 1/2 0 diff --git a/susyexists/src/seekpath/hpkot/spg_db.py b/susyexists/src/seekpath/hpkot/spg_db.py new file mode 100644 index 00000000..71a7785c --- /dev/null +++ b/susyexists/src/seekpath/hpkot/spg_db.py @@ -0,0 +1,472 @@ +"""Basic information on spacegroups.""" +# Given a spgroup number, return +# the crystal family letter, the centering, and if the corresponding +# pointgroup has inversion (True) or not. +# Generated from the output of spg_mapping.get_spgroup_data_realtime +# using spglib v.1.9.4. + +spgroup_data = { + 1: ("a", "P", False), + 2: ("a", "P", True), + 3: ("m", "P", False), + 4: ("m", "P", False), + 5: ("m", "C", False), + 6: ("m", "P", False), + 7: ("m", "P", False), + 8: ("m", "C", False), + 9: ("m", "C", False), + 10: ("m", "P", True), + 11: ("m", "P", True), + 12: ("m", "C", True), + 13: ("m", "P", True), + 14: ("m", "P", True), + 15: ("m", "C", True), + 16: ("o", "P", False), + 17: ("o", "P", False), + 18: ("o", "P", False), + 19: ("o", "P", False), + 20: ("o", "C", False), + 21: ("o", "C", False), + 22: ("o", "F", False), + 23: ("o", "I", False), + 24: ("o", "I", False), + 25: ("o", "P", False), + 26: ("o", "P", False), + 27: ("o", "P", False), + 28: ("o", "P", False), + 29: ("o", "P", False), + 30: ("o", "P", False), + 31: ("o", "P", False), + 32: ("o", "P", False), + 33: ("o", "P", False), + 34: ("o", "P", False), + 35: ("o", "C", False), + 36: ("o", "C", False), + 37: ("o", "C", False), + 38: ("o", "A", False), + 39: ("o", "A", False), + 40: ("o", "A", False), + 41: ("o", "A", False), + 42: ("o", "F", False), + 43: ("o", "F", False), + 44: ("o", "I", False), + 45: ("o", "I", False), + 46: ("o", "I", False), + 47: ("o", "P", True), + 48: ("o", "P", True), + 49: ("o", "P", True), + 50: ("o", "P", True), + 51: ("o", "P", True), + 52: ("o", "P", True), + 53: ("o", "P", True), + 54: ("o", "P", True), + 55: ("o", "P", True), + 56: ("o", "P", True), + 57: ("o", "P", True), + 58: ("o", "P", True), + 59: ("o", "P", True), + 60: ("o", "P", True), + 61: ("o", "P", True), + 62: ("o", "P", True), + 63: ("o", "C", True), + 64: ("o", "C", True), + 65: ("o", "C", True), + 66: ("o", "C", True), + 67: ("o", "C", True), + 68: ("o", "C", True), + 69: ("o", "F", True), + 70: ("o", "F", True), + 71: ("o", "I", True), + 72: ("o", "I", True), + 73: ("o", "I", True), + 74: ("o", "I", True), + 75: ("t", "P", False), + 76: ("t", "P", False), + 77: ("t", "P", False), + 78: ("t", "P", False), + 79: ("t", "I", False), + 80: ("t", "I", False), + 81: ("t", "P", False), + 82: ("t", "I", False), + 83: ("t", "P", True), + 84: ("t", "P", True), + 85: ("t", "P", True), + 86: ("t", "P", True), + 87: ("t", "I", True), + 88: ("t", "I", True), + 89: ("t", "P", False), + 90: ("t", "P", False), + 91: ("t", "P", False), + 92: ("t", "P", False), + 93: ("t", "P", False), + 94: ("t", "P", False), + 95: ("t", "P", False), + 96: ("t", "P", False), + 97: ("t", "I", False), + 98: ("t", "I", False), + 99: ("t", "P", False), + 100: ("t", "P", False), + 101: ("t", "P", False), + 102: ("t", "P", False), + 103: ("t", "P", False), + 104: ("t", "P", False), + 105: ("t", "P", False), + 106: ("t", "P", False), + 107: ("t", "I", False), + 108: ("t", "I", False), + 109: ("t", "I", False), + 110: ("t", "I", False), + 111: ("t", "P", False), + 112: ("t", "P", False), + 113: ("t", "P", False), + 114: ("t", "P", False), + 115: ("t", "P", False), + 116: ("t", "P", False), + 117: ("t", "P", False), + 118: ("t", "P", False), + 119: ("t", "I", False), + 120: ("t", "I", False), + 121: ("t", "I", False), + 122: ("t", "I", False), + 123: ("t", "P", True), + 124: ("t", "P", True), + 125: ("t", "P", True), + 126: ("t", "P", True), + 127: ("t", "P", True), + 128: ("t", "P", True), + 129: ("t", "P", True), + 130: ("t", "P", True), + 131: ("t", "P", True), + 132: ("t", "P", True), + 133: ("t", "P", True), + 134: ("t", "P", True), + 135: ("t", "P", True), + 136: ("t", "P", True), + 137: ("t", "P", True), + 138: ("t", "P", True), + 139: ("t", "I", True), + 140: ("t", "I", True), + 141: ("t", "I", True), + 142: ("t", "I", True), + 143: ("h", "P", False), + 144: ("h", "P", False), + 145: ("h", "P", False), + 146: ("h", "R", False), + 147: ("h", "P", True), + 148: ("h", "R", True), + 149: ("h", "P", False), + 150: ("h", "P", False), + 151: ("h", "P", False), + 152: ("h", "P", False), + 153: ("h", "P", False), + 154: ("h", "P", False), + 155: ("h", "R", False), + 156: ("h", "P", False), + 157: ("h", "P", False), + 158: ("h", "P", False), + 159: ("h", "P", False), + 160: ("h", "R", False), + 161: ("h", "R", False), + 162: ("h", "P", True), + 163: ("h", "P", True), + 164: ("h", "P", True), + 165: ("h", "P", True), + 166: ("h", "R", True), + 167: ("h", "R", True), + 168: ("h", "P", False), + 169: ("h", "P", False), + 170: ("h", "P", False), + 171: ("h", "P", False), + 172: ("h", "P", False), + 173: ("h", "P", False), + 174: ("h", "P", False), + 175: ("h", "P", True), + 176: ("h", "P", True), + 177: ("h", "P", False), + 178: ("h", "P", False), + 179: ("h", "P", False), + 180: ("h", "P", False), + 181: ("h", "P", False), + 182: ("h", "P", False), + 183: ("h", "P", False), + 184: ("h", "P", False), + 185: ("h", "P", False), + 186: ("h", "P", False), + 187: ("h", "P", False), + 188: ("h", "P", False), + 189: ("h", "P", False), + 190: ("h", "P", False), + 191: ("h", "P", True), + 192: ("h", "P", True), + 193: ("h", "P", True), + 194: ("h", "P", True), + 195: ("c", "P", False), + 196: ("c", "F", False), + 197: ("c", "I", False), + 198: ("c", "P", False), + 199: ("c", "I", False), + 200: ("c", "P", True), + 201: ("c", "P", True), + 202: ("c", "F", True), + 203: ("c", "F", True), + 204: ("c", "I", True), + 205: ("c", "P", True), + 206: ("c", "I", True), + 207: ("c", "P", False), + 208: ("c", "P", False), + 209: ("c", "F", False), + 210: ("c", "F", False), + 211: ("c", "I", False), + 212: ("c", "P", False), + 213: ("c", "P", False), + 214: ("c", "I", False), + 215: ("c", "P", False), + 216: ("c", "F", False), + 217: ("c", "I", False), + 218: ("c", "P", False), + 219: ("c", "F", False), + 220: ("c", "I", False), + 221: ("c", "P", True), + 222: ("c", "P", True), + 223: ("c", "P", True), + 224: ("c", "P", True), + 225: ("c", "F", True), + 226: ("c", "F", True), + 227: ("c", "F", True), + 228: ("c", "F", True), + 229: ("c", "I", True), + 230: ("c", "I", True), +} + +centering = { + 1: "P", + 2: "P", + 3: "P", + 4: "P", + 5: "C", + 6: "P", + 7: "P", + 8: "C", + 9: "C", + 10: "P", + 11: "P", + 12: "C", + 13: "P", + 14: "P", + 15: "C", + 16: "P", + 17: "P", + 18: "P", + 19: "P", + 20: "C", + 21: "C", + 22: "F", + 23: "I", + 24: "I", + 25: "P", + 26: "P", + 27: "P", + 28: "P", + 29: "P", + 30: "P", + 31: "P", + 32: "P", + 33: "P", + 34: "P", + 35: "C", + 36: "C", + 37: "C", + 38: "A", + 39: "A", + 40: "A", + 41: "A", + 42: "F", + 43: "F", + 44: "I", + 45: "I", + 46: "I", + 47: "P", + 48: "P", + 49: "P", + 50: "P", + 51: "P", + 52: "P", + 53: "P", + 54: "P", + 55: "P", + 56: "P", + 57: "P", + 58: "P", + 59: "P", + 60: "P", + 61: "P", + 62: "P", + 63: "C", + 64: "C", + 65: "C", + 66: "C", + 67: "C", + 68: "C", + 69: "F", + 70: "F", + 71: "I", + 72: "I", + 73: "I", + 74: "I", + 75: "P", + 76: "P", + 77: "P", + 78: "P", + 79: "I", + 80: "I", + 81: "P", + 82: "I", + 83: "P", + 84: "P", + 85: "P", + 86: "P", + 87: "I", + 88: "I", + 89: "P", + 90: "P", + 91: "P", + 92: "P", + 93: "P", + 94: "P", + 95: "P", + 96: "P", + 97: "I", + 98: "I", + 99: "P", + 100: "P", + 101: "P", + 102: "P", + 103: "P", + 104: "P", + 105: "P", + 106: "P", + 107: "I", + 108: "I", + 109: "I", + 110: "I", + 111: "P", + 112: "P", + 113: "P", + 114: "P", + 115: "P", + 116: "P", + 117: "P", + 118: "P", + 119: "I", + 120: "I", + 121: "I", + 122: "I", + 123: "P", + 124: "P", + 125: "P", + 126: "P", + 127: "P", + 128: "P", + 129: "P", + 130: "P", + 131: "P", + 132: "P", + 133: "P", + 134: "P", + 135: "P", + 136: "P", + 137: "P", + 138: "P", + 139: "I", + 140: "I", + 141: "I", + 142: "I", + 143: "P", + 144: "P", + 145: "P", + 146: "R", + 147: "P", + 148: "R", + 149: "P", + 150: "P", + 151: "P", + 152: "P", + 153: "P", + 154: "P", + 155: "R", + 156: "P", + 157: "P", + 158: "P", + 159: "P", + 160: "R", + 161: "R", + 162: "P", + 163: "P", + 164: "P", + 165: "P", + 166: "R", + 167: "R", + 168: "P", + 169: "P", + 170: "P", + 171: "P", + 172: "P", + 173: "P", + 174: "P", + 175: "P", + 176: "P", + 177: "P", + 178: "P", + 179: "P", + 180: "P", + 181: "P", + 182: "P", + 183: "P", + 184: "P", + 185: "P", + 186: "P", + 187: "P", + 188: "P", + 189: "P", + 190: "P", + 191: "P", + 192: "P", + 193: "P", + 194: "P", + 195: "P", + 196: "F", + 197: "I", + 198: "P", + 199: "I", + 200: "P", + 201: "P", + 202: "F", + 203: "F", + 204: "I", + 205: "P", + 206: "I", + 207: "P", + 208: "P", + 209: "F", + 210: "F", + 211: "I", + 212: "P", + 213: "P", + 214: "I", + 215: "P", + 216: "F", + 217: "I", + 218: "P", + 219: "F", + 220: "I", + 221: "P", + 222: "P", + 223: "P", + 224: "P", + 225: "F", + 226: "F", + 227: "F", + 228: "F", + 229: "I", + 230: "I", +} diff --git a/susyexists/src/seekpath/hpkot/spg_mapping.py b/susyexists/src/seekpath/hpkot/spg_mapping.py new file mode 100644 index 00000000..d871fe6b --- /dev/null +++ b/susyexists/src/seekpath/hpkot/spg_mapping.py @@ -0,0 +1,345 @@ +"""Tools to map a spagegroup to the crystal family or similar requirements.""" + + +def get_crystal_family(number): + """ + Given a spacegroup number, returns a string to identify its + crystal family (triclinic, monoclinic, ...). + + :param number: the spacegroup number, from 1 to 230 + """ + if not isinstance(number, int): + raise TypeError("number should be integer") + if number < 1: + raise ValueError("number should be >= 1") + if number <= 2: + return "a" # triclinic + if number <= 15: + return "m" # monoclinic + if number <= 74: + return "o" # orthorhombic + if number <= 142: + return "t" # tetragonal + if number <= 194: + return "h" # trigonal + hexagonal + if number <= 230: + return "c" # cubic + raise ValueError("number should be <= 230") + + +def pointgroup_has_inversion(number): + """ + Return True if the pointgroup with given number has inversion, + False otherwise. + + :param number: The integer number of the pointgroup, from 1 to 32. + """ + if number in [2, 5, 8, 11, 15, 17, 20, 23, 27, 29, 32]: + return True + if number in [ + 1, + 3, + 4, + 6, + 7, + 9, + 10, + 12, + 13, + 14, + 16, + 18, + 19, + 21, + 22, + 24, + 25, + 26, + 28, + 30, + 31, + ]: + return False + raise ValueError("number should be between 1 and 32") + + +def pgnum_from_pgint(pgint): + """ + Return the number of the pointgroup (from 1 to 32) from the + international pointgroup name. + """ + table = { + "C1": 1, + "C2": 3, + "C2h": 5, + "C2v": 7, + "C3": 16, + "C3h": 22, + "C3i": 17, + "C3v": 19, + "C4": 9, + "C4h": 11, + "C4v": 13, + "C6": 21, + "C6h": 23, + "C6v": 25, + "Ci": 2, + "Cs": 4, + "D2": 6, + "D2d": 14, + "D2h": 8, + "D3": 18, + "D3d": 20, + "D3h": 26, + "D4": 12, + "D4h": 15, + "D6": 24, + "D6h": 27, + "O": 30, + "Oh": 32, + "S4": 10, + "T": 28, + "Td": 31, + "Th": 29, + } + + return table[pgint] + + +def get_spgroup_data(): + """ + Return a dictionary that has the spacegroup number as key, and a tuple + as value, with content:: + + (crystal family letter, centering, has_inversion). + + It loads if from a table in the source code for efficiency. + """ + from .spg_db import spgroup_data + + return spgroup_data + + +def get_spgroup_data_realtime(): + """ + Return a dictionary that has the spacegroup number as key, and a tuple + as value, with content:: + + (crystal family letter, centering, has_inversion), + + got in real time using spglib methods. + """ + import json + import spglib + + info = {} + for hall_n in range(1, 531): + data = spglib.get_spacegroup_type(hall_n) + number = data["number"] + int_short = data["international_short"] + pg_int = data["pointgroup_international"] + + if number not in info: + info[int(number)] = ( + get_crystal_family(number), # get cyrstal family + # centering from the first letter of the first + # spacegroup that I encounter + int_short[0], + pointgroup_has_inversion( + pgnum_from_pgint(pg_int) + ), # pointgroup has inversion + ) + return info + + +def get_P_matrix(bravais_lattice): + r""" + Return a tuple of length 2 with the P matrix and its inverse:: + + (P, invP) + + with :math:`invP = P^{-1}`. + + These :math:`P` matrices are obtained from Table 3 of the HPKOT + paper. + + The P matrix is a :math:`3\times 3` matrix is the matrix that converts + the lattice vectors from crystallographic conventional + :math:`(a,b,c)` to crystallographic primitive :math:`(a_P, b_P, c_P)` + as follows: :math:`(a_P, b_P, c_P) = (a,b,c) P` + + The change of (real space) coordinate triples follows instead: + :math:`(x_P, y_P, z_P)^T = (P^{-1}) (x,y,z)^T` + + .. note:: the :math:`invP = P^{-1}` matrix is always integer (with values + only :math:`-1, 0, 1`) while :math:`P` is rational (non-integer values can be + :math:`\pm \frac 1 2` and :math:`\pm \frac 1 3`). + """ + import numpy as np + + if bravais_lattice in ["cP", "tP", "hP", "oP", "mP"]: + P = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + invP = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + elif bravais_lattice in ["cF", "oF"]: + P = 1.0 / 2.0 * np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) + invP = np.array([[-1, 1, 1], [1, -1, 1], [1, 1, -1]]) + elif bravais_lattice in ["cI", "tI", "oI"]: + P = 1.0 / 2.0 * np.array([[-1, 1, 1], [1, -1, 1], [1, 1, -1]]) + invP = np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) + elif bravais_lattice == "hR": + P = 1.0 / 3.0 * np.array([[2, -1, -1], [1, 1, -2], [1, 1, 1]]) + invP = np.array([[1, 0, 1], [-1, 1, 1], [0, -1, 1]]) + elif bravais_lattice == "oC": + P = 1.0 / 2.0 * np.array([[1, 1, 0], [-1, 1, 0], [0, 0, 2]]) + invP = np.array([[1, -1, 0], [1, 1, 0], [0, 0, 1]]) + elif bravais_lattice == "oA": + P = 1.0 / 2.0 * np.array([[0, 0, 2], [1, 1, 0], [-1, 1, 0]]) + invP = np.array([[0, 1, -1], [0, 1, 1], [1, 0, 0]]) + elif bravais_lattice == "mC": + P = 1.0 / 2.0 * np.array([[1, -1, 0], [1, 1, 0], [0, 0, 2]]) + invP = np.array([[1, 1, 0], [-1, 1, 0], [0, 0, 1]]) + elif bravais_lattice == "aP": + # For aP, I should have already obtained the primitive cell + P = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + invP = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + else: + raise ValueError("Invalid bravais_lattice {}".format(bravais_lattice)) + + return P, invP + + +def get_primitive(structure, bravais_lattice, wrap_to_zero_one=False): + """ + Return the primitive cell from a conventional crystallographic cell. + + :note: the input structure MUST be already standardized by spglib! + + :param structure: should be a tuple of the form + (lattice, positions, types) and it MUST be already a conventional + crystallographic cell (i.e. as returned by spglib with the ``std_`` + prefix). + + :param bravais_lattice: a string with the information of the + Bravais lattice of the input structure. + + :param wrap_to_zero_one: if True, wrap the scaled coordinates to the + :math:`[0,1[` interval. Otherwise, the scaled coordinates will not be + changed and can be outside of the :math:`[0,1[` range; the advantage is that + the Cartesian coordinates of each atom returned in the primitive + cell will match with one of the atoms in the input structure if this + variable is False. + + :return: a tuple of length three: the first element is the primitive + structure, also in the format (lattice, positions, types); the second + is a tuple with the ``(P, invP)`` matrices as returned by :py:func:`get_P_matrix`; the + third is an array with the mapping from the atoms in the conventional + cell to the atoms in the primitive cell (e.g. if the conventional cell + has four atoms and twice the volume than the primitive, and the first + and third atoms in the conventional map to the first of the primitive, + while the second and the fourth map to the second of the primitive, + this array will be :math:`[0,1,0,1]`). + """ + import numpy as np + from collections import Counter + + threshold = 1.0e-6 # Threshold for creation of primitive cell + + lattice, positions, types = structure + P, invP = get_P_matrix(bravais_lattice) + + volume_ratio = int(round(np.linalg.det(invP))) + + # (a_P, b_P, c_P) = (a,b,c) P + # a is the first ROW of lattice => I have to transpose lattice + prim_lattice = np.dot(np.array(np.array(lattice).T), P).T + # (x_P, y_P, z_P)^T = (P^-1) (x,y,z)^T + prim_positions = np.dot(invP, np.array(positions).T).T + + # Now I need to remove duplicates + # I get if the x coord is the same, modulo one + # I compare all with all + # (I will get a NxN matrix, where N = number of atoms) + # I shift by 1/2, do %1 and then shift back so that I get values between + # -0.5 and 0.5 rather than between 0 and 1, which would be problematic + # to find values close to zero + x_match = ( + np.abs( + ((prim_positions[:, 0] - prim_positions[:, 0][:, None] + 0.5) % 1.0) - 0.5 + ) + < threshold + ) + y_match = ( + np.abs( + ((prim_positions[:, 1] - prim_positions[:, 1][:, None] + 0.5) % 1.0) - 0.5 + ) + < threshold + ) + z_match = ( + np.abs( + ((prim_positions[:, 2] - prim_positions[:, 2][:, None] + 0.5) % 1.0) - 0.5 + ) + < threshold + ) + # To be the same, they should all match + all_match = np.logical_and(x_match, np.logical_and(y_match, z_match)) + + # list of ids, each row identifies a group of equivalent atoms + # I convert to tuple so they can become keys of a dict for counting + group_of_equivalent_atoms = [ + tuple(np.arange(all_match.shape[0])[row]) for row in all_match + ] + group_count = Counter(group_of_equivalent_atoms) + wrong_count = [group for group, cnt in group_count.items() if cnt != volume_ratio] + if wrong_count: + raise ValueError( + "Problem creating primitive cell, I found the " + "following group of atoms with len != {}: {}".format( + volume_ratio, ", ".join(str(_) for _ in wrong_count) + ) + ) + # These are the groups of equivalent atoms; values are the positions in + # the list from 0 to N-1 + groups = sorted(group_count.keys()) + # I check that the type is always the same + unique_types = [set(np.array(types)[np.array(group)]) for group in groups] + problematic_groups_idx = list( + group_idx + for group_idx, type_set in enumerate(unique_types) + if len(type_set) != 1 + ) + if problematic_groups_idx: + raise ValueError( + "The following ids of atoms go on top of each other, " + "but they are of different type! {}".format( + ", ".join( + [ + str(group) + for group_idx, group in enumerate(groups) + if group_idx in problematic_groups_idx + ] + ) + ) + ) + # All good, just return the first (no wrapping to [0..1[ yet) + chosen_idx = np.array([group[0] for group in groups]) + + # Create the list of mapped atoms + conv_prim_atoms_mapping = -1 * np.ones(len(positions), dtype=int) + for prim_idx, group in enumerate(groups): + for at_idx in group: + conv_prim_atoms_mapping[at_idx] = prim_idx + if -1 in conv_prim_atoms_mapping: + raise ValueError( + "Unable to recreate correctly the atom mapping! " + "{}".format(conv_prim_atoms_mapping) + ) + + prim_positions = prim_positions[chosen_idx] + prim_types = np.array(types)[chosen_idx] + + if wrap_to_zero_one: + prim_positions = prim_positions % 1.0 + + prim_structure = (prim_lattice, prim_positions, prim_types) + + return (prim_structure, (P, invP), conv_prim_atoms_mapping) diff --git a/susyexists/src/seekpath/hpkot/tools.py b/susyexists/src/seekpath/hpkot/tools.py new file mode 100644 index 00000000..bbcf433e --- /dev/null +++ b/susyexists/src/seekpath/hpkot/tools.py @@ -0,0 +1,367 @@ +"""Various utilities.""" +import numpy +import numpy.linalg +from math import sqrt + + +def eval_expr_simple(expr, kparam): # pylint=disable: too-many-return-statements + """ + To evaluate expressions tha only require kparams and not a, b, c, ... + """ + if expr == "0": + return 0.0 + if expr == "1/2": + return 1.0 / 2.0 + if expr == "1": + return 1.0 + if expr == "-1/2": + return -1.0 / 2.0 + if expr == "1/4": + return 1.0 / 4.0 + if expr == "3/8": + return 3.0 / 8.0 + if expr == "3/4": + return 3.0 / 4.0 + if expr == "5/8": + return 5.0 / 8.0 + if expr == "1/3": + return 1.0 / 3.0 + try: + return kparam[expr] + except KeyError as exc: + raise ValueError( + "Asking for evaluation of symbol '{}' in " + "eval_expr_simple but this has not been defined or not " + "yet computed".format(str(exc)) + ) + + +def extend_kparam(kparam): + """ + Extend the list of kparam with also expressions like :math:`1-x`, ... + + :param kparam: a dictionary where the key is the expression as a string and + the value is the numerical value + :return: a similar dictionary, extended with simple expressions + """ + kparam_extended = {} + for key, val in kparam.items(): + kparam_extended[key] = val + kparam_extended["-{}".format(key)] = -val + kparam_extended["1-{}".format(key)] = 1.0 - val + kparam_extended["-1+{}".format(key)] = -1.0 + val + kparam_extended["1/2-{}".format(key)] = 1.0 / 2.0 - val + kparam_extended["1/2+{}".format(key)] = 1.0 / 2.0 + val + + return kparam_extended + + +def eval_expr( # pylint: disable=too-many-return-statements,unused-argument + expr, a, b, c, cosalpha, cosbeta, cosgamma, kparam +): + r""" + Given a string expression as a function of the parameters ``a``, ``b``, ``c`` (lengths of the + cell lattice vectors) and ``cosalpha``, ``cosbeta``, ``cosgamma`` (the cosines of the three + angles between lattice vectors) returns the numerical value of the expression. + + :param a: length of the first lattice vector + :param b: length of the second lattice vector + :param c: length of the third lattice vector + :param cosalpha: cosine of the :math:`\alpha` angle (between lattice vectors 2 and 3) + :param cosbeta: cosine of the :math:`\beta` angle (between lattice vectors 1 and 3) + :param cosgamma: cosine of the :math:`\gamma` angle (between lattice vectors 1 and 2) + :param kparam: a dictionary that associates the value to expressions as a function + of the ``a, b, c, cosalpha, cosbeta, cosgamma`` parameters + + :return: the value of the expression for the given values of the cell parameters + + .. note:: To evaluate expressions, I hardcode a table of existing expressions in the + DB rather than parsing the string (to avoid additional dependencies and + avoid the use of ``eval``). + """ + from math import sqrt + + # sinalpha = sqrt(1.0 - cosalpha ** 2) + sinbeta = sqrt(1.0 - cosbeta**2) + # singamma = sqrt(1.0 - cosgamma ** 2) + + try: + if expr == "(a*a/b/b+(1+a/c*cosbeta)/sinbeta/sinbeta)/4": + return (a * a / b / b + (1.0 + a / c * cosbeta) / sinbeta / sinbeta) / 4.0 + if expr == "1-Z*b*b/a/a": + Z = kparam["Z"] + return 1.0 - Z * b * b / a / a + if expr == "1/2-2*Z*c*cosbeta/a": + Z = kparam["Z"] + return 1.0 / 2.0 - 2.0 * Z * c * cosbeta / a + if expr == "E/2+a*a/4/b/b+a*c*cosbeta/2/b/b": + E = kparam["E"] + return E / 2.0 + a * a / 4.0 / b / b + a * c * cosbeta / 2.0 / b / b + if expr == "2*F-Z": + F = kparam["F"] + Z = kparam["Z"] + return 2.0 * F - Z + if expr == "c/2/a/cosbeta*(1-4*U+a*a*sinbeta*sinbeta/b/b)": + U = kparam["U"] + return ( + c + / 2.0 + / a + / cosbeta + * (1.0 - 4.0 * U + a * a * sinbeta * sinbeta / b / b) + ) + if expr == "-1/4+W/2-Z*c*cosbeta/a": + W = kparam["W"] + Z = kparam["Z"] + return -1.0 / 4.0 + W / 2.0 - Z * c * cosbeta / a + if expr == "(2+a/c*cosbeta)/4/sinbeta/sinbeta": + return (2.0 + a / c * cosbeta) / 4.0 / sinbeta / sinbeta + if expr == "3/4-b*b/4/a/a/sinbeta/sinbeta": + return 3.0 / 4.0 - b * b / 4.0 / a / a / sinbeta / sinbeta + if expr == "S-(3/4-S)*a*cosbeta/c": + S = kparam["S"] + return S - (3.0 / 4.0 - S) * a * cosbeta / c + if expr == "(1+a*a/b/b)/4": + return (1.0 + a * a / b / b) / 4.0 + if expr == "-a*c*cosbeta/2/b/b": + return -a * c * cosbeta / 2.0 / b / b + if expr == "1+Z-2*M": + Z = kparam["Z"] + M = kparam["M"] + return 1.0 + Z - 2.0 * M + if expr == "X-2*D": + X = kparam["X"] + D = kparam["D"] + return X - 2 * D + if expr == "(1+a/c*cosbeta)/2/sinbeta/sinbeta": + return (1.0 + a / c * cosbeta) / 2.0 / sinbeta / sinbeta + if expr == "1/2+Y*c*cosbeta/a": + Y = kparam["Y"] + return 1.0 / 2.0 + Y * c * cosbeta / a + if expr == "a*a/4/c/c": + return a * a / 4.0 / c / c + if expr == "5/6-2*D": + D = kparam["D"] + return 5.0 / 6.0 - 2.0 * D + if expr == "1/3+D": + D = kparam["D"] + return 1.0 / 3.0 + D + if expr == "1/6-c*c/9/a/a": + return 1.0 / 6.0 - c * c / 9.0 / a / a + if expr == "1/2-2*Z": + Z = kparam["Z"] + return 1.0 / 2.0 - 2.0 * Z + if expr == "1/2+Z": + Z = kparam["Z"] + return 1.0 / 2.0 + Z + if expr == "(1+b*b/c/c)/4": + return (1.0 + b * b / c / c) / 4.0 + if expr == "(1+c*c/b/b)/4": + return (1.0 + c * c / b / b) / 4.0 + if expr == "(1+b*b/a/a)/4": + return (1.0 + b * b / a / a) / 4.0 + if expr == "(1+a*a/b/b-a*a/c/c)/4": + return (1.0 + a * a / b / b - a * a / c / c) / 4.0 + if expr == "(1+a*a/b/b+a*a/c/c)/4": + return (1.0 + a * a / b / b + a * a / c / c) / 4.0 + if expr == "(1+c*c/a/a-c*c/b/b)/4": + return (1.0 + c * c / a / a - c * c / b / b) / 4.0 + if expr == "(1+c*c/a/a+c*c/b/b)/4": + return (1.0 + c * c / a / a + c * c / b / b) / 4.0 + if expr == "(1+b*b/a/a-b*b/c/c)/4": + return (1.0 + b * b / a / a - b * b / c / c) / 4.0 + if expr == "(1+c*c/b/b-c*c/a/a)/4": + return (1.0 + c * c / b / b - c * c / a / a) / 4.0 + if expr == "(1+a*a/c/c)/4": + return (1.0 + a * a / c / c) / 4.0 + if expr == "(b*b-a*a)/4/c/c": + return (b * b - a * a) / 4.0 / c / c + if expr == "(a*a+b*b)/4/c/c": + return (a * a + b * b) / 4.0 / c / c + if expr == "(1+c*c/a/a)/4": + return (1.0 + c * c / a / a) / 4.0 + if expr == "(c*c-b*b)/4/a/a": + return (c * c - b * b) / 4.0 / a / a + if expr == "(b*b+c*c)/4/a/a": + return (b * b + c * c) / 4.0 / a / a + if expr == "(a*a-c*c)/4/b/b": + return (a * a - c * c) / 4.0 / b / b + if expr == "(c*c+a*a)/4/b/b": + return (c * c + a * a) / 4.0 / b / b + if expr == "a*a/2/c/c": + return a * a / 2.0 / c / c + raise ValueError( + "Unknown expression, define a new case:\n" + ' elif expr == "{0}":\n' + " return {0}".format(expr) + ) + except KeyError as exc: + raise ValueError( + "Asking for evaluation of symbol '{}' but this has " + "not been defined or not yet computed".format(str(exc)) + ) + + +def check_spglib_version(): + """ + Check the SPGLIB version and raise a ValueError if the version is + older than 1.9.4. + + Also raises an warning if the user has a version of SPGLIB that is + older than 1.13, because before then there were some bugs (e.g. + wrong treatment of oI, see e.g. issue ) + + Return the spglib module. + """ + try: + import spglib + except ImportError: + raise ValueError( + "spglib >= 1.9.4 is required for the creation " + "of the k-paths, but it could not be imported" + ) + + try: + version = spglib.__version__ + except NameError: + version = "1.8.0" # or older, version was introduced only recently + + try: + version_pieces = [int(_) for _ in version.split(".")] + if len(version_pieces) < 3: + raise ValueError + except ValueError: + raise ValueError("Unable to parse version number") + + if tuple(version_pieces[:2]) < (1, 9): + raise ValueError("Invalid spglib version, need >= 1.9.4") + + if version_pieces[:2] == (1, 9) and version_pieces[2] < 4: + raise ValueError("Invalid spglib version, need >= 1.9.4") + + if tuple(version_pieces[:2]) < (1, 13): + import warnings + + warnings.warn( + "You have a version of SPGLIB older than 1.13, " + "please consider upgrading to 1.13 or later since some bugs " + "have been fixed", + RuntimeWarning, + ) + + return spglib + + +def get_cell_params(cell): + r""" + Return (a,b,c,cosalpha,cosbeta,cosgamma) given a :math:`3\times 3` cell + + .. note:: Rows are vectors: ``v1 = cell[0]``, ``v2 = cell[1]``, ``v3 = cell[3]`` + """ + v1, v2, v3 = numpy.array(cell) + a = sqrt(sum(v1**2)) + b = sqrt(sum(v2**2)) + c = sqrt(sum(v3**2)) + cosalpha = numpy.dot(v2, v3) / b / c + cosbeta = numpy.dot(v1, v3) / a / c + cosgamma = numpy.dot(v1, v2) / a / b + + return (a, b, c, cosalpha, cosbeta, cosgamma) + + +def get_reciprocal_cell_rows(real_space_cell): + r""" + Given the cell in real space (3x3 matrix, vectors as rows, + return the reciprocal-space cell where again the G vectors are + rows, i.e. satisfying + ``dot(real_space_cell, reciprocal_space_cell.T)`` = :math:`2 \pi I`, + where :math:`I` is the :math:`3\times 3` identity matrix. + + :return: the :math:`3\times 3` list of reciprocal lattice vectors where each row is + one vector. + """ + reciprocal_space_columns = 2.0 * numpy.pi * numpy.linalg.inv(real_space_cell) + return (reciprocal_space_columns.T).tolist() + + +def get_real_cell_from_reciprocal_rows(reciprocal_space_rows): + r""" + Given the cell in reciprocal space (3x3 matrix, G vectors as rows, + return the real-space cell where again the R vectors are + rows, i.e. satisfying + ``dot(real_space_cell, reciprocal_space_cell.T)`` = :math:`2 \pi I`, + where :math:`I` is the :math:`3\times 3` identity matrix. + + .. note:: This is actually the same as :py:func:`get_reciprocal_cell_rows`. + + :return: the :math:`3\times 3` list of real lattice vectors where each row is + one vector. + """ + real_space_columns = 2.0 * numpy.pi * numpy.linalg.inv(reciprocal_space_rows) + return (real_space_columns.T).tolist() + + +def get_path_data(ext_bravais): + """ + Given an extended Bravais symbol among those defined in the HPKOT paper + (only first three characters, like cF1), return the points and the + suggested path. + + :param ext_bravais: a string among the allowed etended Bravais lattices + defined in HPKOT. + :return: a tuple ``(kparam_def, points_def, path)`` where the + first element is the list with the definition of the + k-point parameters, the second is the dictionary with the + definition of the k-points, and the third is the list + with the suggested paths. + + .. note:: ``kparam_def`` has to be a list and not a dictionary + because the order matters (later k-parameters can be defined + in terms of previous ones) + """ + import os + + # Get the data from the band_data folder + this_folder = os.path.split(os.path.abspath(__file__))[0] + folder = os.path.join(this_folder, "band_path_data", ext_bravais) + path_file = os.path.join(folder, "path.txt") + points_file = os.path.join(folder, "points.txt") + kparam_file = os.path.join(folder, "k_vector_parameters.txt") + with open(kparam_file) as f: + kparam_raw = [_.split() for _ in f.readlines() if _.strip()] + with open(points_file) as f: + points_raw = [_.split() for _ in f.readlines()] + with open(path_file) as f: + path_raw = [_.split() for _ in f.readlines()] + + # check + if any(len(_) != 2 for _ in kparam_raw): + raise ValueError("Invalid line length in {}".format(kparam_file)) + if any(len(_) != 2 for _ in path_raw): + raise ValueError("Invalid line length in {}".format(path_file)) + if any(len(_) != 4 for _ in points_raw): + raise ValueError("Invalid line length in {}".format(points_file)) + # order must be preserved here + kparam_def = [(_[0], _[1].strip()) for _ in kparam_raw] + points_def = {} + for label, kPx, kPy, kPz in points_raw: + if label in points_def: + raise ValueError( + "Internal error! Point {} defined multiple times " + "for Bravais lattice {}".format(label, ext_bravais) + ) + points_def[label] = (kPx, kPy, kPz) + path = [(_[0], _[1]) for _ in path_raw] + + # check path is valid + for p1, p2 in path: + if p1 not in points_def: + raise ValueError( + "Point {} found in path (for {}) but undefined!".format(p1, ext_bravais) + ) + if p2 not in points_def: + raise ValueError( + "Point {} found in path (for {}) but undefined!".format(p2, ext_bravais) + ) + + return (kparam_def, points_def, path) diff --git a/susyexists/src/seekpath/util.py b/susyexists/src/seekpath/util.py new file mode 100644 index 00000000..32eac07e --- /dev/null +++ b/susyexists/src/seekpath/util.py @@ -0,0 +1,116 @@ +"""Utilities (mapping of chemical elements to atomic number).""" + +atoms_num_dict = { + "H": 1, + "He": 2, + "Li": 3, + "Be": 4, + "B": 5, + "C": 6, + "N": 7, + "O": 8, + "F": 9, + "Ne": 10, + "Na": 11, + "Mg": 12, + "Al": 13, + "Si": 14, + "P": 15, + "S": 16, + "Cl": 17, + "Ar": 18, + "K": 19, + "Ca": 20, + "Sc": 21, + "Ti": 22, + "V": 23, + "Cr": 24, + "Mn": 25, + "Fe": 26, + "Co": 27, + "Ni": 28, + "Cu": 29, + "Zn": 30, + "Ga": 31, + "Ge": 32, + "As": 33, + "Se": 34, + "Br": 35, + "Kr": 36, + "Rb": 37, + "Sr": 38, + "Y": 39, + "Zr": 40, + "Nb": 41, + "Mo": 42, + "Tc": 43, + "Ru": 44, + "Rh": 45, + "Pd": 46, + "Ag": 47, + "Cd": 48, + "In": 49, + "Sn": 50, + "Sb": 51, + "Te": 52, + "I": 53, + "Xe": 54, + "Cs": 55, + "Ba": 56, + "La": 57, + "Ce": 58, + "Pr": 59, + "Nd": 60, + "Pm": 61, + "Sm": 62, + "Eu": 63, + "Gd": 64, + "Tb": 65, + "Dy": 66, + "Ho": 67, + "Er": 68, + "Tm": 69, + "Yb": 70, + "Lu": 71, + "Hf": 72, + "Ta": 73, + "W": 74, + "Re": 75, + "Os": 76, + "Ir": 77, + "Pt": 78, + "Au": 79, + "Hg": 80, + "Tl": 81, + "Pb": 82, + "Bi": 83, + "Po": 84, + "At": 85, + "Rn": 86, + "Fr": 87, + "Ra": 88, + "Ac": 89, + "Th": 90, + "Pa": 91, + "U": 92, + "Np": 93, + "Pu": 94, + "Am": 95, + "Cm": 96, + "Bk": 97, + "Cf": 98, + "Es": 99, + "Fm": 100, + "Md": 101, + "No": 102, + "Lr": 103, + "Rf": 104, + "Db": 105, + "Sg": 106, + "Bh": 107, + "Hs": 108, + "Mt": 109, + "Ds": 110, + "Rg": 111, + "Cn": 112, +} diff --git a/susyexists/src/structure.py b/susyexists/src/structure.py new file mode 100644 index 00000000..05d07392 --- /dev/null +++ b/susyexists/src/structure.py @@ -0,0 +1,338 @@ +from . import seekpath +from markupsafe import escape +import copy +import io +import json +import time +import traceback + +import numpy as np + +from ase.data import chemical_symbols +from tools_barebone import logme, get_tools_barebone_version +from tools_barebone.structure_importers import get_structure_tuple, UnknownFormatError + + + + +MAX_NUMBER_OF_ATOMS = 1000 + + +def get_json_for_visualizer( + cell, relcoords, atomic_numbers +): # pylint: disable=too-many-locals + from seekpath import hpkot, brillouinzone + hpkot = seekpath.hpkot + + system = (np.array(cell), np.array(relcoords), np.array(atomic_numbers)) + res = hpkot.get_path(system, with_time_reversal=False) + + real_lattice = res["primitive_lattice"] + # rec_lattice = np.linalg.inv(real_lattice).T # Missing 2pi! + rec_lattice = np.array(hpkot.tools.get_reciprocal_cell_rows(real_lattice)) + b1, b2, b3 = rec_lattice + faces_data = seekpath.brillouinzone.get_BZ(b1=b1, b2=b2, b3=b3) + + response = {} + response["faces_data"] = faces_data + response["b1"] = b1.tolist() + response["b2"] = b2.tolist() + response["b3"] = b3.tolist() + ## Convert to absolute + response["kpoints"] = { + k: (v[0] * b1 + v[1] * b2 + v[2] * b3).tolist() + for k, v in res["point_coords"].items() + } + response["kpoints_rel"] = { + k: [v[0], v[1], v[2]] for k, v in res["point_coords"].items() + } + response["path"] = res["path"] + + # It should use the same logic, so give the same cell as above + res_explicit = seekpath.get_explicit_k_path(system, with_time_reversal=False) + for k in res_explicit: + if k == "segments" or k.startswith("explicit_"): + if isinstance(res_explicit[k], np.ndarray): + response[k] = res_explicit[k].tolist() + else: + response[k] = res_explicit[k] + + if ( + np.sum( + np.abs( + np.array(res_explicit["reciprocal_primitive_lattice"]) + - np.array(res["reciprocal_primitive_lattice"]) + ) + ) + > 1.0e-7 + ): + raise AssertionError("Got different reciprocal cells...") + + # Response for JS, and path_results + return response, res + + +def process_structure_core( # pylint: disable=too-many-locals,too-many-statements,too-many-arguments + filecontent, + fileformat, + call_source="", + logger=None, + flask_request=None, +): + + start_time = time.time() + fileobject = io.StringIO(str(filecontent)) + # form_data = dict(flask_request.form) + form_data = None + try: + structure_tuple = get_structure_tuple( + fileobject, fileformat, extra_data=None + ) + except UnknownFormatError: + logme( + logger, + filecontent, + fileformat, + flask_request, + call_source, + reason="unknownformat", + extra={"form_data": form_data,}, + ) + raise FlaskRedirectException("Unknown format '{}'".format(fileformat)) + except Exception: + # There was an exception... + logme( + logger, + filecontent, + fileformat, + flask_request, + call_source, + reason="exception", + extra={"traceback": traceback.format_exc(), "form_data": form_data,}, + ) + raise FlaskRedirectException( + "I tried my best, but I wasn't able to load your " + "file in format '{}'...".format(fileformat) + ) + + if len(structure_tuple[1]) > MAX_NUMBER_OF_ATOMS: + ## Structure too big + logme( + logger, + filecontent, + fileformat, + flask_request, + call_source, + reason="toolarge", + extra={"number_of_atoms": len(structure_tuple[1]), "form_data": form_data,}, + ) + raise FlaskRedirectException( + "Sorry, this online visualizer is limited to {} atoms " + "in the input cell, while your structure has {} atoms." + "".format(MAX_NUMBER_OF_ATOMS, len(structure_tuple[1])) + ) + + # Log the content in case of valid structure + logme( + logger, + filecontent, + fileformat, + flask_request, + call_source, + reason="OK", + extra={"number_of_atoms": len(structure_tuple[1]), "form_data": form_data,}, + ) + + try: + in_json_data = { + "cell": structure_tuple[0], + "scaled_coords": structure_tuple[1], + "atomic_numbers": structure_tuple[2], + } + + out_json_data, path_results = get_json_for_visualizer( + in_json_data["cell"], + in_json_data["scaled_coords"], + in_json_data["atomic_numbers"], + ) + + raw_code_dict = copy.copy(out_json_data) + for k in list(raw_code_dict.keys()): + if k.startswith("explicit_"): + raw_code_dict.pop(k) + if k == "segments": + raw_code_dict.pop(k) + raw_code_dict.pop("faces_data") + raw_code_dict["primitive_lattice"] = path_results["primitive_lattice"].tolist() + raw_code_dict["primitive_positions"] = path_results[ + "primitive_positions" + ].tolist() + inputstructure_positions_cartesian = np.dot( + np.array(in_json_data["scaled_coords"]), np.array(in_json_data["cell"]), + ).tolist() + primitive_positions_cartesian = np.dot( + np.array(path_results["primitive_positions"]), + np.array(path_results["primitive_lattice"]), + ).tolist() + primitive_positions_cartesian_refolded = np.dot( + np.array(path_results["primitive_positions"]) % 1.0, + np.array(path_results["primitive_lattice"]), + ).tolist() + raw_code_dict["primitive_positions_cartesian"] = primitive_positions_cartesian + + # raw_code['primitive_types'] = path_results['primitive_types'] + primitive_symbols = [ + chemical_symbols[num] for num in path_results["primitive_types"] + ] + raw_code_dict["primitive_symbols"] = primitive_symbols + + raw_code = json.dumps(raw_code_dict, indent=2) + ## I manually escape it to then add
and pass it to a filter with + ## |safe. I have to 'unicode' it otherwise it keeps escaping also the + ## next replaces + raw_code = ( + str(escape(raw_code)).replace("\n", "
").replace(" ", " ") + ) + + kpoints = [ + [ + k, + out_json_data["kpoints"][k][0], + out_json_data["kpoints"][k][1], + out_json_data["kpoints"][k][2], + ] + for k in sorted(out_json_data["kpoints"]) + ] + kpoints_rel = [ + [ + k, + out_json_data["kpoints_rel"][k][0], + out_json_data["kpoints_rel"][k][1], + out_json_data["kpoints_rel"][k][2], + ] + for k in sorted(out_json_data["kpoints_rel"]) + ] + + inputstructure_cell_vectors = [ + [idx, coords[0], coords[1], coords[2]] + for idx, coords in enumerate(in_json_data["cell"], start=1) + ] + inputstructure_symbols = [ + chemical_symbols[num] for num in in_json_data["atomic_numbers"] + ] + inputstructure_atoms_scaled = [ + [label, coords[0], coords[1], coords[2]] + for label, coords in zip( + inputstructure_symbols, in_json_data["scaled_coords"] + ) + ] + inputstructure_atoms_cartesian = [ + [label, coords[0], coords[1], coords[2]] + for label, coords in zip( + inputstructure_symbols, inputstructure_positions_cartesian + ) + ] + + direct_vectors = [ + [idx, coords[0], coords[1], coords[2]] + for idx, coords in enumerate(path_results["primitive_lattice"], start=1) + ] + + reciprocal_primitive_vectors = [ + [idx, coords[0], coords[1], coords[2]] + for idx, coords in enumerate( + path_results["reciprocal_primitive_lattice"], start=1 + ) + ] + + atoms_scaled = [ + [label, str(coords[0]), str(coords[1]), str(coords[2])] + for label, coords in zip( + primitive_symbols, path_results["primitive_positions"] + ) + ] + + atoms_cartesian = [ + [label, coords[0], coords[1], coords[2]] + for label, coords in zip(primitive_symbols, primitive_positions_cartesian) + ] + + # Create extetically-nice looking path, with dashes and pipes + suggested_path = [] + if path_results["path"]: + suggested_path.append(path_results["path"][0][0]) + suggested_path.append("-") + suggested_path.append(path_results["path"][0][1]) + last = path_results["path"][0][1] + for p1, p2 in path_results["path"][1:]: + if p1 != last: + suggested_path.append("|") + suggested_path.append(p1) + suggested_path.append("-") + suggested_path.append(p2) + last = p2 + + primitive_lattice = path_results["primitive_lattice"] + xsfstructure = [] + xsfstructure.append("CRYSTAL") + xsfstructure.append("PRIMVEC") + for vector in primitive_lattice: + xsfstructure.append("{} {} {}".format(vector[0], vector[1], vector[2])) + xsfstructure.append("PRIMCOORD") + xsfstructure.append("{} 1".format(len(primitive_positions_cartesian_refolded))) + for atom_num, pos in zip( + path_results["primitive_types"], primitive_positions_cartesian_refolded + ): + xsfstructure.append("{} {} {} {}".format(atom_num, pos[0], pos[1], pos[2])) + xsfstructure = "\n".join(xsfstructure) + + compute_time = time.time() - start_time + except Exception: + logme( + logger, + filecontent, + fileformat, + flask_request, + call_source, + reason="codeexception", + extra={"traceback": traceback.extract_stack(), "form_data": form_data,}, + ) + raise + + return dict( + jsondata=json.dumps(out_json_data), + volume_ratio_prim=int(round(path_results["volume_original_wrt_prim"])), + raw_code=raw_code, + kpoints=kpoints, + kpoints_rel=kpoints_rel, + bravais_lattice=path_results["bravais_lattice"], + bravais_lattice_extended=path_results["bravais_lattice_extended"], + spacegroup_number=path_results["spacegroup_number"], + spacegroup_international=path_results["spacegroup_international"], + direct_vectors=direct_vectors, + inputstructure_cell_vectors=inputstructure_cell_vectors, + inputstructure_atoms_scaled=inputstructure_atoms_scaled, + inputstructure_atoms_cartesian=inputstructure_atoms_cartesian, + atoms_scaled=atoms_scaled, + with_without_time_reversal=( + "with" if path_results["has_inversion_symmetry"] else "without" + ), + atoms_cartesian=atoms_cartesian, + reciprocal_primitive_vectors=reciprocal_primitive_vectors, + primitive_vectors=primitive_lattice, + suggested_path=suggested_path, + ) + + +def primitive(fileContent,fileformat): + with open(fileContent) as file: + fileContent = file.read() + process_structure_core(filecontent=fileContent,fileformat=fileformat) + structure = process_structure_core(filecontent=fileContent,fileformat=fileformat) + lattice = (structure["primitive_vectors"].astype('str')).tolist() + atoms = structure["atoms_scaled"] + kpoints = structure['kpoints_rel'] + return (lattice,atoms,kpoints) + + + diff --git a/susyexists/src/utils.py b/susyexists/src/utils.py new file mode 100644 index 00000000..e6cf46df --- /dev/null +++ b/susyexists/src/utils.py @@ -0,0 +1,142 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import os +import re +import subprocess +import json +import qcelemental as qcel +import untangle + + +def make_monolayer(atoms): + df = pd.DataFrame() + atoms=np.array(atoms) + df['Atoms'] = atoms.T[0] + df['x'] = atoms.T[1].astype(float) + df['y'] = atoms.T[2].astype(float) + df['z'] = atoms.T[3].astype(float) + df = df.query('z<0.5') + df_shifted = pd.DataFrame() + df_shifted["Atoms"] = df['Atoms'].values + df_shifted["x"] = df['x'].values + df_shifted["y"] = df['y'].values + df_shifted["z"] = df['z'].values+0.25 + return df_shifted.values + + +def plot_sigma_energy(path): + out_files = os.listdir(path) + total_energy = [] + e_fermi = [] + for file in out_files: + temp_file = open(f'{path}/{file}', 'r').readlines() + for i in range(len(temp_file)): + if len(temp_file[i].split())>2: + if temp_file[i].split()[0]=='!': + temp_en=temp_file[i].split()[4] + # if temp_file[i].split()[0]=='the': + # temp_fermi=temp_file[i].split()[-2] + total_energy.append([float(temp_en),float(file[:-13])]) + # e_fermi.append([float(temp_fermi),float(file[:-13])]) + + tot_en = np.array(total_energy) + tot_en = tot_en[tot_en[:, 1].argsort()] + + + # e_f = np.array(e_fermi) + # e_f = e_f[e_f[:, 1].argsort()] + + fig = plt.figure(figsize=(8,6)) + plt.plot(tot_en.T[1],tot_en.T[0]) + plt.ylabel('Total Energy [Ry]',fontsize=20) + plt.xlabel('Smearing Value [Ry]',fontsize=20) + plt.xticks(fontsize=20) + plt.yticks(fontsize=20) + plt.savefig('total_sigma.png') + +def get_total_energy(path): + obj = untangle.parse(path) + en = float(obj.qes_espresso.output.total_energy.etot.cdata)*2 + # p = subprocess.Popen(f"grep '!' {path}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + # line = p.stdout.readlines()[0].decode() + # en = float(re.findall(r"[-+]?(?:\d*\.*\d+)", line)[0]) + return(en) + +def configure(calculation,path="./config.json"): + with open(path) as f: + data = f.read() + config = json.loads(data) + return config[calculation] + +def afm_maker(atom,afm_matrix): + # afm_matrix = [['u','u','d','d'],['u','d','u','d'],['u','d','d','u']] + afm =[] + for i in range(len(afm_matrix)): + # print(f"AFM{i}") + afm.append(np.array(atom).copy()) + for j in range(4): + afm[i][j][0]=atom[j][0]+afm_matrix[i][j] + # print(afm[i][j][0]) + return afm + +def default_pseudo(atom): + atom_type = list(set([a[0] for a in atom])) + atom_array = [] + for i in atom_type: + temp_atom = {"atom":i,'mass':str(qcel.periodictable.to_mass(i)),'pseudopotential':f"{i}.UPF"} + atom_array.append(temp_atom) + # print(temp_atom) + # print(atom_array) + return atom_array + +def atom_type(atom): + num_type = len(list(set([a[0] for a in atom]))) + return num_type + + +def test_parameter(self,parameter_name,conv_thr,start,end,step,num_core,debug=False,out=False): + parameter = np.arange(start,end,step) + result = np.zeros(shape=(3,len(parameter))) + end=0 + for j,i in enumerate(parameter): + if parameter_name=="ecutwfc": + self.ecutwfc(i) + self.job_id=f"ecutwfc_{i}" + if parameter_name=="kpoints": + self.k_points(int(i)) + self.job_id=f"kpoints_{i}" + if debug==False: + self.scf(num_core) + path = f'./Projects/{self.project_id}/{self.job_id}/{self.job_id}.save/data-file-schema.xml' + temp_en = get_total_energy(path) + temp_time = get_time(path) + result[0][j]=i #parameters + result[1][j]=temp_en #energy + result[2][j]=temp_time #time + end+=1 + if j!=0: + if out==True: + print(f"{parameter_name}: {result[0][j]} DeltaE :{(result[1][j]-result[1][j-1])} Ry Time: {result[2][j]} seconds") + if abs(result[1][j-1] - result[1][j]) < conv_thr: + end=j + break + # print(result.T[:end+1].T) + return result.T[:end+1].T + + +def get_time(path): + obj = untangle.parse(path) + time = float(obj.qes_espresso.timing_info.total.wall.cdata) + return time + # with open(path, 'r') as data: + # data = data.read().split() + # counter = 0 + # for j,i in enumerate(data): + # # if i == "PWSCF": + # # counter += 1 + # # if counter ==3: + # # # print(f"CPU: {data[j+2]}, WALL: {data[j+4]}") + # # return (data[j+4]) + # if i=='End': + # return(data[j-2]) diff --git a/susyexists/src/writes.py b/susyexists/src/writes.py new file mode 100644 index 00000000..c3579f61 --- /dev/null +++ b/susyexists/src/writes.py @@ -0,0 +1,55 @@ +def write_atom_species(file,atomic_species): + with open(file, "a") as file_object: + file_object.write("ATOMIC_SPECIES \n") + for atom in atomic_species: + listed = list(atom.values()) + file_object.write(" ".join(listed)+'\n') + + +def write_atom_positions(file, positions): + with open(file, "a") as file_object: + file_object.write("ATOMIC_POSITIONS (crystal) \n") + for i in positions: + try: + file_object.write(" ".join(i)+'\n') + except: + try: + file_object.write(" ".join(i.astype(str))+'\n') + except: + file_object.write(" ".join(str(i))+'\n') + +def write_cell_parameters(file, cell): + with open(file, "a") as file_object: + file_object.write("CELL_PARAMETERS (angstrom) \n") + for i in cell: + try: + file_object.write(" ".join(i)+'\n') + except: + try: + file_object.write(" ".join(i.astype(str))+'\n') + except: + file_object.write(" ".join(str(i))+'\n') + # print(i.astype(str)) + + +def write_k_points(file, k): + with open(file, "a") as file_object: + file_object.write("K_POINTS automatic \n") + file_object.write(k+'\n') + +def write_k_points_bands(file,k): + with open(file, "a") as file_object: + file_object.write("K_POINTS crystal_b \n") + file_object.write(str(len(k))+'\n') + for point in k: + listed = list(point.values()) + file_object.write(" ".join(listed)+'\n') + +def write_k_points_matdyn(file,k): + with open(file, "a") as file_object: + file_object.write(str(len(k))+'\n') + for point in k: + listed = list(point.values()) + file_object.write(" ".join(listed)+'\n') + +