diff --git a/bin/wt2.x b/bin/wt2.x new file mode 100755 index 00000000..7c9e4158 Binary files /dev/null and b/bin/wt2.x differ diff --git a/examples/3DWeyl-model/wt.in-BerryCurvature_kpath_sepband_calc b/examples/3DWeyl-model/wt.in-BerryCurvature_kpath_sepband_calc new file mode 100644 index 00000000..3153dd24 --- /dev/null +++ b/examples/3DWeyl-model/wt.in-BerryCurvature_kpath_sepband_calc @@ -0,0 +1,50 @@ +&TB_FILE +Hrfile = "Weyl3D_hr.dat" +/ + +!> bulk band structure calculation flag +&CONTROL +BerryCurvature_kpath_sepband_calc +/ + +&SYSTEM +NumOccupied = 1 ! NumOccupied +SOC = 1 ! soc +E_FERMI = 0 ! e-fermi +/ + +&PARAMETERS +Nk1 = 60 ! number k points +/ + +LATTICE +Angstrom + 1.0000000 000000000 000000000 + 000000000 1.0000000 000000000 + 000000000 000000000 1.0000000 + +ATOM_POSITIONS +1 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate + A 0 0 0. + +PROJECTORS + 1 ! number of projectors +A s + + +SURFACE ! See doc for details + 0 0 1 + 1 0 0 + 0 1 0 + +KPLANE_BULK +Direct + 0.00 0.00 0.00 ! Center for 3D k slice + 1.00 0.00 0.00 ! The first vector is along x direction + 0.00 0.00 1.00 ! The second vector is along z direction + +KPATH_BULK ! k point path +2 ! number of k line only for bulk band +X 0.50000 0.00000 0.0000 G 0.00000 0.00000 0.0000 +G 0.00000 0.00000 0.0000 Z 0.00000 0.00000 0.5000 diff --git a/examples/BHZ-model/BHZ_hr.dat b/examples/BHZ-model/BHZ_hr.dat new file mode 100644 index 00000000..0a0d21bd --- /dev/null +++ b/examples/BHZ-model/BHZ_hr.dat @@ -0,0 +1,84 @@ +4-band of BHZ model +4 !num_wann +5 ! nrpts + 1 1 1 1 1 1 1 + 0 0 0 1 1 -2.00000000 0.00000000 + 0 0 0 1 2 0.00000000 0.00000000 + 0 0 0 1 3 0.00000000 0.00000000 + 0 0 0 1 4 0.00000000 0.00000000 + 0 0 0 2 1 0.00000000 0.00000000 + 0 0 0 2 2 2.00000000 0.00000000 + 0 0 0 2 3 0.00000000 0.00000000 + 0 0 0 2 4 0.00000000 0.00000000 + 0 0 0 3 1 0.00000000 0.00000000 + 0 0 0 3 2 0.00000000 0.00000000 + 0 0 0 3 3 -2.00000000 0.00000000 + 0 0 0 3 4 0.00000000 0.00000000 + 0 0 0 4 1 0.00000000 0.00000000 + 0 0 0 4 2 0.00000000 0.00000000 + 0 0 0 4 3 0.00000000 0.00000000 + 0 0 0 4 4 2.00000000 0.00000000 + 1 0 0 1 1 1.00000000 0.00000000 + 1 0 0 1 2 0.00000000 -0.50000000 + 1 0 0 1 3 0.00000000 0.00000000 + 1 0 0 1 4 0.00000000 0.00000000 + 1 0 0 2 1 0.00000000 -0.50000000 + 1 0 0 2 2 -1.00000000 0.00000000 + 1 0 0 2 3 0.00000000 0.00000000 + 1 0 0 2 4 0.00000000 0.00000000 + 1 0 0 3 1 0.00000000 0.00000000 + 1 0 0 3 2 0.00000000 0.00000000 + 1 0 0 3 3 1.00000000 0.00000000 + 1 0 0 3 4 0.00000000 0.50000000 + 1 0 0 4 1 0.00000000 0.00000000 + 1 0 0 4 2 0.00000000 0.00000000 + 1 0 0 4 3 0.00000000 0.50000000 + 1 0 0 4 4 -1.00000000 0.00000000 + 0 1 0 1 1 1.00000000 0.00000000 + 0 1 0 1 2 -0.50000000 0.00000000 + 0 1 0 1 3 0.00000000 0.00000000 + 0 1 0 1 4 0.00000000 0.00000000 + 0 1 0 2 1 0.50000000 0.00000000 + 0 1 0 2 2 -1.00000000 0.00000000 + 0 1 0 2 3 0.00000000 0.00000000 + 0 1 0 2 4 0.00000000 0.00000000 + 0 1 0 3 1 0.00000000 0.00000000 + 0 1 0 3 2 0.00000000 0.00000000 + 0 1 0 3 3 1.00000000 0.00000000 + 0 1 0 3 4 -0.50000000 0.00000000 + 0 1 0 4 1 0.00000000 0.00000000 + 0 1 0 4 2 0.00000000 0.00000000 + 0 1 0 4 3 0.50000000 0.00000000 + 0 1 0 4 4 -1.00000000 0.00000000 + -1 0 0 1 1 1.00000000 0.00000000 + -1 0 0 1 2 0.00000000 0.50000000 + -1 0 0 1 3 0.00000000 0.00000000 + -1 0 0 1 4 0.00000000 0.00000000 + -1 0 0 2 1 0.00000000 0.50000000 + -1 0 0 2 2 -1.00000000 0.00000000 + -1 0 0 2 3 0.00000000 0.00000000 + -1 0 0 2 4 0.00000000 0.00000000 + -1 0 0 3 1 0.00000000 0.00000000 + -1 0 0 3 2 0.00000000 0.00000000 + -1 0 0 3 3 1.00000000 0.00000000 + -1 0 0 3 4 0.00000000 -0.50000000 + -1 0 0 4 1 0.00000000 0.00000000 + -1 0 0 4 2 0.00000000 0.00000000 + -1 0 0 4 3 0.00000000 -0.50000000 + -1 0 0 4 4 -1.00000000 0.00000000 + 0 -1 0 1 1 1.00000000 0.00000000 + 0 -1 0 1 2 0.50000000 0.00000000 + 0 -1 0 1 3 0.00000000 0.00000000 + 0 -1 0 1 4 0.00000000 0.00000000 + 0 -1 0 2 1 -0.50000000 0.00000000 + 0 -1 0 2 2 -1.00000000 0.00000000 + 0 -1 0 2 3 0.00000000 0.00000000 + 0 -1 0 2 4 0.00000000 0.00000000 + 0 -1 0 3 1 0.00000000 0.00000000 + 0 -1 0 3 2 0.00000000 0.00000000 + 0 -1 0 3 3 1.00000000 0.00000000 + 0 -1 0 3 4 0.50000000 0.00000000 + 0 -1 0 4 1 0.00000000 0.00000000 + 0 -1 0 4 2 0.00000000 0.00000000 + 0 -1 0 4 3 -0.50000000 0.00000000 + 0 -1 0 4 4 -1.00000000 0.00000000 diff --git a/examples/BHZ-model/BHZ_hr_gen-case1.py b/examples/BHZ-model/BHZ_hr_gen-case1.py new file mode 100644 index 00000000..e4455315 --- /dev/null +++ b/examples/BHZ-model/BHZ_hr_gen-case1.py @@ -0,0 +1,123 @@ +#!/bin/python3 +import numpy as np +import cmath + +# The Hamiltonian is +# ( M-Bk^2 Delta_0+A*k+ ) +# ( Delta_0+A*k_ -M+Bk^2 ) +# where k^2=kx^2+ky^2 + +# Case I, QSHE with band inversion and no trivial hybridization +# Delta_0=0, M*B>0, |A|>0 + +# Case I, QSHE with band inversion and with trivial and nontrivial hybridization +# Delta_0=0.5, M*B>0, |A|>0 + + +# from the kp to TB we use sustitution +# k->sin(k) +# k^2->2(1-cos(k)) + +# Constants +dp = np.float64 +pi = np.arctan(1) * 4 +zi = 1j + +# Lattice constants +M = 2.0 +B = 1.0 +A = 1.0 +Delta_0= 0.0 + + +# Number of Wannier functions and R points +num_wann = 4 +nrpts = 7 + +# R coordinates +Irvec = np.zeros((3, nrpts), dtype=int) + +# Hamiltonian m,n are band indexes +HmnR = np.zeros((num_wann, num_wann, nrpts), dtype=complex) + +# No of degeneracy of R point +ndegen = np.ones(nrpts, dtype=int) + +# Initialization of matrices +Irvec[:, :] = 0 +HmnR[:, :, :] = 0.0 + +# 0 0 0 +ir = 0 +Irvec[:, ir] = [0, 0, 0] +HmnR[0, 0, ir] = M - 4 * B +HmnR[1, 1, ir] = -M + 4 * B +HmnR[2, 2, ir] = M - 4 * B +HmnR[3, 3, ir] = -M + 4 * B +HmnR[0, 1, ir] = Delta_0 +HmnR[1, 0, ir] = Delta_0 +HmnR[2, 3, ir] = Delta_0 +HmnR[3, 2, ir] = Delta_0 + +# 1 0 +ir = 1 +Irvec[:, ir] = [1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir] =-0.5*zi*A +HmnR[1, 0, ir] =-0.5*zi*A +HmnR[2, 3, ir] = 0.5*zi*A +HmnR[3, 2, ir] = 0.5*zi*A + +# 0 1 +ir = 2 +Irvec[:, ir] = [0, 1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= -A/2 +HmnR[1, 0, ir]= A/2 +HmnR[2, 3, ir]= -A/2 +HmnR[3, 2, ir]= A/2 + + +# -1 0 +ir = 3 +Irvec[:, ir] = [-1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= 0.5*zi*A +HmnR[1, 0, ir]= 0.5*zi*A +HmnR[2, 3, ir]=-0.5*zi*A +HmnR[3, 2, ir]=-0.5*zi*A + + +# 0 -1 +ir = 4 +Irvec[:, ir] = [0, -1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= A/2 +HmnR[1, 0, ir]= -A/2 +HmnR[2, 3, ir]= A/2 +HmnR[3, 2, ir]= -A/2 + +nrpts= ir+1 +# Writing to a file +with open('BHZ_hr.dat', 'w') as file: + file.write('4-band of BHZ model\n') + file.write('4 !num_wann \n') + file.write(f'{nrpts} ! nrpts\n') + file.write(' '.join(f'{x:5d}' for x in ndegen) + '\n') + for ir in range(nrpts): + for i in range(4): + for j in range(4): + file.write(f"{Irvec[0, ir]:5d}{Irvec[1, ir]:5d}{Irvec[2, ir]:5d}{i+1:5d}{j+1:5d} {HmnR[i, j, ir].real:16.8f} {HmnR[i, j, ir].imag:16.8f}\n") + diff --git a/examples/BHZ-model/BHZ_hr_gen-case2.py b/examples/BHZ-model/BHZ_hr_gen-case2.py new file mode 100644 index 00000000..f0a68739 --- /dev/null +++ b/examples/BHZ-model/BHZ_hr_gen-case2.py @@ -0,0 +1,123 @@ +#!/bin/python3 +import numpy as np +import cmath + +# The Hamiltonian is +# ( M-Bk^2 Delta_0+A*k+ ) +# ( Delta_0+A*k_ -M+Bk^2 ) +# where k^2=kx^2+ky^2 + +# Case I, QSHE with band inversion and no trivial hybridization +# Delta_0=0, M*B>0, |A|>0 + +# Case I, QSHE with band inversion and with trivial and nontrivial hybridization +# Delta_0=0.5, M*B>0, |A|>0 + + +# from the kp to TB we use sustitution +# k->sin(k) +# k^2->2(1-cos(k)) + +# Constants +dp = np.float64 +pi = np.arctan(1) * 4 +zi = 1j + +# Lattice constants +M = 2.0 +B = 1.0 +A = 1.0 +Delta_0= 0.5 + + +# Number of Wannier functions and R points +num_wann = 4 +nrpts = 7 + +# R coordinates +Irvec = np.zeros((3, nrpts), dtype=int) + +# Hamiltonian m,n are band indexes +HmnR = np.zeros((num_wann, num_wann, nrpts), dtype=complex) + +# No of degeneracy of R point +ndegen = np.ones(nrpts, dtype=int) + +# Initialization of matrices +Irvec[:, :] = 0 +HmnR[:, :, :] = 0.0 + +# 0 0 0 +ir = 0 +Irvec[:, ir] = [0, 0, 0] +HmnR[0, 0, ir] = M - 4 * B +HmnR[1, 1, ir] = -M + 4 * B +HmnR[2, 2, ir] = M - 4 * B +HmnR[3, 3, ir] = -M + 4 * B +HmnR[0, 1, ir] = Delta_0 +HmnR[1, 0, ir] = Delta_0 +HmnR[2, 3, ir] = Delta_0 +HmnR[3, 2, ir] = Delta_0 + +# 1 0 +ir = 1 +Irvec[:, ir] = [1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir] =-0.5*zi*A +HmnR[1, 0, ir] =-0.5*zi*A +HmnR[2, 3, ir] = 0.5*zi*A +HmnR[3, 2, ir] = 0.5*zi*A + +# 0 1 +ir = 2 +Irvec[:, ir] = [0, 1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= -A/2 +HmnR[1, 0, ir]= A/2 +HmnR[2, 3, ir]= -A/2 +HmnR[3, 2, ir]= A/2 + + +# -1 0 +ir = 3 +Irvec[:, ir] = [-1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= 0.5*zi*A +HmnR[1, 0, ir]= 0.5*zi*A +HmnR[2, 3, ir]=-0.5*zi*A +HmnR[3, 2, ir]=-0.5*zi*A + + +# 0 -1 +ir = 4 +Irvec[:, ir] = [0, -1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= A/2 +HmnR[1, 0, ir]= -A/2 +HmnR[2, 3, ir]= A/2 +HmnR[3, 2, ir]= -A/2 + +nrpts= ir+1 +# Writing to a file +with open('BHZ_hr.dat', 'w') as file: + file.write('4-band of BHZ model\n') + file.write('4 !num_wann \n') + file.write(f'{nrpts} ! nrpts\n') + file.write(' '.join(f'{x:5d}' for x in ndegen) + '\n') + for ir in range(nrpts): + for i in range(4): + for j in range(4): + file.write(f"{Irvec[0, ir]:5d}{Irvec[1, ir]:5d}{Irvec[2, ir]:5d}{i+1:5d}{j+1:5d} {HmnR[i, j, ir].real:16.8f} {HmnR[i, j, ir].imag:16.8f}\n") + diff --git a/examples/BHZ-model/BHZ_hr_gen.f90 b/examples/BHZ-model/BHZ_hr_gen.f90 new file mode 100644 index 00000000..7e9761ff --- /dev/null +++ b/examples/BHZ-model/BHZ_hr_gen.f90 @@ -0,0 +1,130 @@ +! > BHZ model +!> gfortran BHZ_hr_gen.f90 -o BHZ_hr_gen +!> ./BHZ_hr_gen +program main + implicit none + + integer, parameter :: dp=kind(1d0) + real(dp), parameter :: pi=atan(1d0)*4d0 + complex(dp), parameter :: zi=(0d0, 1d0) + integer :: ir, nrpts, i, j, num_wann + + ! lattice constant + real(dp), parameter :: A= 1d0 + real(dp), parameter :: B= 1d0 + real(dp), parameter :: Delta= 1.0d0 + real(dp), parameter :: alpha= 0.0d0 + + ! R coordinates + integer, allocatable :: Irvec(:,:) + + ! Hamiltonian m,n are band indexes + complex(dp), allocatable :: HmnR(:,:,:) + + ! no of degeneracy of R point + integer, allocatable :: ndegen(:) + + num_wann=4 + nrpts=7 + allocate(Irvec(3, nrpts)) + allocate(ndegen(nrpts)) + allocate(HmnR(num_wann, num_wann, nrpts)) + + irvec=0 + ndegen=1 + hmnr= 0d0 + + ! 0 0 0 + ir= 1 + irvec(1, ir)= 0 + irvec(2, ir)= 0 + hmnr(1, 1, ir)= Delta- 4d0*B + hmnr(2, 2, ir)= -Delta+ 4d0*B + hmnr(3, 3, ir)= Delta- 4d0*B + hmnr(4, 4, ir)= -Delta+ 4d0*B + + ! 1 0 + ir= 2 + irvec(1, ir)= 1 + irvec(2, ir)= 0 + hmnr(1, 1, ir)= B + hmnr(2, 2, ir)= - B + hmnr(3, 3, ir)= B + hmnr(4, 4, ir)= - B + hmnr(1, 3, ir)= alpha/2d0 + hmnr(3, 1, ir)= - alpha/2d0 + hmnr(4, 2, ir)= - alpha/2d0 + hmnr(2, 4, ir)= alpha/2d0 + hmnr(1, 2, ir)= 0.5d0*( alpha- zi*A) + hmnr(2, 1, ir)= 0.5d0*(-alpha- zi*A) + hmnr(3, 4, ir)= 0.5d0*( alpha+ zi*A) + hmnr(4, 3, ir)= 0.5d0*(-alpha+ zi*A) + + ! 0 1 + ir= 3 + irvec(1, ir)= 0 + irvec(2, ir)= 1 + hmnr(1, 1, ir)= B + hmnr(2, 2, ir)= - B + hmnr(3, 3, ir)= B + hmnr(4, 4, ir)= - B + hmnr(1, 3, ir)= - zi*alpha + hmnr(3, 1, ir)= - zi*alpha + hmnr(4, 2, ir)= zi*alpha + hmnr(2, 4, ir)= zi*alpha + hmnr(1, 2, ir)= -A/2d0 + hmnr(2, 1, ir)= A/2d0 + hmnr(3, 4, ir)= -A/2d0 + hmnr(4, 3, ir)= A/2d0 + + !-1 0 + ir= 4 + irvec(1, ir)=-1 + irvec(2, ir)= 0 + hmnr(1, 1, ir)= B + hmnr(2, 2, ir)= - B + hmnr(3, 3, ir)= B + hmnr(4, 4, ir)= - B + hmnr(1, 3, ir)= - alpha/2d0 + hmnr(3, 1, ir)= alpha/2d0 + hmnr(4, 2, ir)= alpha/2d0 + hmnr(2, 4, ir)= - alpha/2d0 + hmnr(1, 2, ir)= 0.5d0*(-alpha+ zi*A) + hmnr(2, 1, ir)= 0.5d0*( alpha+ zi*A) + hmnr(3, 4, ir)= 0.5d0*(-alpha- zi*A) + hmnr(4, 3, ir)= 0.5d0*( alpha- zi*A) + + ! 0-1 + ir= 5 + irvec(1, ir)= 0 + irvec(2, ir)=-1 + hmnr(1, 1, ir)= B + hmnr(2, 2, ir)= - B + hmnr(3, 3, ir)= B + hmnr(4, 4, ir)= - B + hmnr(1, 3, ir)= zi*alpha + hmnr(3, 1, ir)= zi*alpha + hmnr(4, 2, ir)= - zi*alpha + hmnr(2, 4, ir)= - zi*alpha + hmnr(1, 2, ir)= A/2d0 + hmnr(2, 1, ir)= -A/2d0 + hmnr(3, 4, ir)= A/2d0 + hmnr(4, 3, ir)= -A/2d0 + + !> write to new_hr.dat + open(unit=105, file='BHZ_hr.dat') + write(105, *)'4-band BHZ model' + write(105, *)'4' + write(105, *)nrpts + write(105, '(15I5)')(ndegen(i), i=1, nrpts) + do ir=1, nrpts + do i=1, 4 + do j=1, 4 + write(105, '(5I5, 2f16.8)')irvec(:, ir), i, j, HmnR(i, j, ir) + enddo + enddo + enddo + close(105) + + +end diff --git a/examples/BHZ-model/wt.in b/examples/BHZ-model/wt.in new file mode 100644 index 00000000..367283b2 --- /dev/null +++ b/examples/BHZ-model/wt.in @@ -0,0 +1,70 @@ +&TB_FILE +Hrfile = "BHZ_hr.dat" +/ + +!> flags to control different functionalities +&CONTROL +BulkBand_calc = T ! bulk band structure +SlabBand_calc = T ! slab band structure +SHC_calc = T ! spin Hall conductivity +AHC_calc = T ! anomalous Hall conductivity +Wilsonloop_calc = T ! Wilson loop +/ + +&SYSTEM +SOC = 1 ! soc +E_FERMI = 0 ! e-fermi +NumOccupied = 2 +Bx= 0, By= 0, Bz= 1 ! Bx By Bz +Add_Zeeman_Field = T +Zeeman_energy_in_eV = 0.5 ! in eV +/ + +&PARAMETERS +Fermi_broadening = 0.001 ! infinite small value, like brodening +iso_energy = 0.0 ! energy for calculate Fermi Arc +OmegaNum = 400 ! omega number +OmegaMin = -8.0 ! energy interval +OmegaMax = 8.0 ! energy interval +Nk1 = 60 ! number k points +Nk2 = 60 ! number k points +Nk3 = 2 ! number k points +/ + +LATTICE +Angstrom +3 0 0 +0 3 0 +0 0 10 + +ATOM_POSITIONS +1 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +C 0 0 0 + +PROJECTORS +2 ! number of projectors +C s pz + +KPATH_SLAB +3 ! numker of k line for 2D case +-X 0. -0.5 G 0.0 0.0 ! k path for 2D case +G 0.0 0.0 X 0.0 0.5 +X 0.0 0.50 M 0.5 0.5 ! k path for 2D case + +SURFACE ! See doc for details + 0 0 1 + 1 0 0 + 0 1 0 + +KPATH_BULK ! k point path +2 ! number of k line only for bulk band + X 0.50000 0.00000 0.00000 G 0.00000 0.00000 0.00000 + G 0.00000 0.00000 0.00000 Y 0.00000 0.50000 0.50000 + +KCUBE_BULK +-0.50 -0.50 -0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + diff --git a/examples/BHZ-model/wt.in-normal b/examples/BHZ-model/wt.in-normal new file mode 100644 index 00000000..a3304969 --- /dev/null +++ b/examples/BHZ-model/wt.in-normal @@ -0,0 +1,66 @@ +&TB_FILE +Hrfile = "BHZ_hr.dat" +/ + +!> flags to control different functionalities +&CONTROL +BulkBand_calc = T ! bulk band structure +SlabBand_calc = T ! slab band structure +SHC_calc = T ! spin Hall conductivity +Wilsonloop_calc = T ! Wilson loop +/ + +&SYSTEM +SOC = 1 ! soc +E_FERMI = 0 ! e-fermi +NumOccupied = 2 +/ + +&PARAMETERS +Fermi_broadening = 0.001 ! infinite small value, like brodening +iso_energy = 0.0 ! energy for calculate Fermi Arc +OmegaNum = 400 ! omega number +OmegaMin = -8.0 ! energy interval +OmegaMax = 8.0 ! energy interval +Nk1 = 60 ! number k points +Nk2 = 60 ! number k points +Nk3 = 2 ! number k points +/ + +LATTICE +Angstrom +3 0 0 +0 3 0 +0 0 10 + +ATOM_POSITIONS +1 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +C 0 0 0 + +PROJECTORS +2 ! number of projectors +C s pz + +KPATH_SLAB +3 ! numker of k line for 2D case +-X 0. -0.5 G 0.0 0.0 ! k path for 2D case +G 0.0 0.0 X 0.0 0.5 +X 0.0 0.50 M 0.5 0.5 ! k path for 2D case + +SURFACE ! See doc for details + 0 0 1 + 1 0 0 + 0 1 0 + +KPATH_BULK ! k point path +2 ! number of k line only for bulk band + X 0.50000 0.00000 0.00000 G 0.00000 0.00000 0.00000 + G 0.00000 0.00000 0.00000 Y 0.00000 0.50000 0.50000 + +KCUBE_BULK +-0.50 -0.50 -0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + diff --git a/examples/BHZ-model/wt.in-with-zeeman b/examples/BHZ-model/wt.in-with-zeeman new file mode 100644 index 00000000..367283b2 --- /dev/null +++ b/examples/BHZ-model/wt.in-with-zeeman @@ -0,0 +1,70 @@ +&TB_FILE +Hrfile = "BHZ_hr.dat" +/ + +!> flags to control different functionalities +&CONTROL +BulkBand_calc = T ! bulk band structure +SlabBand_calc = T ! slab band structure +SHC_calc = T ! spin Hall conductivity +AHC_calc = T ! anomalous Hall conductivity +Wilsonloop_calc = T ! Wilson loop +/ + +&SYSTEM +SOC = 1 ! soc +E_FERMI = 0 ! e-fermi +NumOccupied = 2 +Bx= 0, By= 0, Bz= 1 ! Bx By Bz +Add_Zeeman_Field = T +Zeeman_energy_in_eV = 0.5 ! in eV +/ + +&PARAMETERS +Fermi_broadening = 0.001 ! infinite small value, like brodening +iso_energy = 0.0 ! energy for calculate Fermi Arc +OmegaNum = 400 ! omega number +OmegaMin = -8.0 ! energy interval +OmegaMax = 8.0 ! energy interval +Nk1 = 60 ! number k points +Nk2 = 60 ! number k points +Nk3 = 2 ! number k points +/ + +LATTICE +Angstrom +3 0 0 +0 3 0 +0 0 10 + +ATOM_POSITIONS +1 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +C 0 0 0 + +PROJECTORS +2 ! number of projectors +C s pz + +KPATH_SLAB +3 ! numker of k line for 2D case +-X 0. -0.5 G 0.0 0.0 ! k path for 2D case +G 0.0 0.0 X 0.0 0.5 +X 0.0 0.50 M 0.5 0.5 ! k path for 2D case + +SURFACE ! See doc for details + 0 0 1 + 1 0 0 + 0 1 0 + +KPATH_BULK ! k point path +2 ! number of k line only for bulk band + X 0.50000 0.00000 0.00000 G 0.00000 0.00000 0.00000 + G 0.00000 0.00000 0.00000 Y 0.00000 0.50000 0.50000 + +KCUBE_BULK +-0.50 -0.50 -0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + diff --git a/examples/Bi2Se3/wt.in b/examples/Bi2Se3/wt.in index ed4ade9e..add9757b 100644 --- a/examples/Bi2Se3/wt.in +++ b/examples/Bi2Se3/wt.in @@ -29,7 +29,9 @@ Se pz px py !> bulk band structure calculation flag &CONTROL BulkBand_calc = T -BulkBand_points_calc = T +Dos_calc = F +BulkBand_points_calc = F +SlabSS_calc = T / &SYSTEM @@ -44,9 +46,22 @@ SELECTED_WANNIERORBITALS 1-6 ! Bi 7-15 ! Se +TopAtoms +2 +1 2 + +BottomAtoms +2 +1 2 &PARAMETERS Nk1 = 41 ! number k points odd number would be better +Nk2 = 41 ! number k points odd number would be better +Nk3 = 41 ! number k points odd number would be better +OmegaNum= 101 ! for DOS +OmegaMin= -1 ! in eV +OmegaMax= 1 ! in eV +Np=1 / KPATH_BULK ! k point path @@ -56,6 +71,12 @@ Z 0.00000 0.00000 0.5000 F 0.50000 0.50000 0.0000 F 0.50000 0.50000 0.0000 G 0.00000 0.00000 0.0000 G 0.00000 0.00000 0.0000 L 0.50000 0.00000 0.0000 +KPATH_SLAB +2 ! numker of k line for 2D case +K 0.33 0.67 G 0.0 0.0 ! k path for 2D case +G 0.0 0.0 M 0.5 0.5 + + KPOINTS_3D 4 Direct @@ -64,6 +85,12 @@ Direct 0.0 0.5 0.0 0.0 0.0 0.5 +KCUBE_BULK +0 0 0 +1 0 0 +0 1 0 +0 0 1 + WANNIER_CENTRES ! copy from wannier90.wout Cartesian -0.000040 -1.194745 6.638646 diff --git a/examples/Bi2Se3/wt.in-bands b/examples/Bi2Se3/wt.in-bands index ed4ade9e..17d985a5 100644 --- a/examples/Bi2Se3/wt.in-bands +++ b/examples/Bi2Se3/wt.in-bands @@ -29,6 +29,7 @@ Se pz px py !> bulk band structure calculation flag &CONTROL BulkBand_calc = T +Dos_calc = T BulkBand_points_calc = T / @@ -47,6 +48,11 @@ SELECTED_WANNIERORBITALS &PARAMETERS Nk1 = 41 ! number k points odd number would be better +Nk2 = 41 ! number k points odd number would be better +Nk3 = 41 ! number k points odd number would be better +OmegaNum= 1001 ! for DOS +OmegaMin= -5 ! in eV +OmegaMax= 5 ! in eV / KPATH_BULK ! k point path @@ -64,6 +70,12 @@ Direct 0.0 0.5 0.0 0.0 0.0 0.5 +KCUBE_BULK +0 0 0 +1 0 0 +0 1 0 +0 0 1 + WANNIER_CENTRES ! copy from wannier90.wout Cartesian -0.000040 -1.194745 6.638646 diff --git a/examples/Bi2Se3/wt.in-bi2se3 b/examples/Bi2Se3/wt.in-bi2se3 new file mode 100644 index 00000000..1a113952 --- /dev/null +++ b/examples/Bi2Se3/wt.in-bi2se3 @@ -0,0 +1,151 @@ +&TB_FILE +Hrfile = 'wannier90_hr.dat' +!Hrfile = 'wannier90_hr.dat_nsymm12' +Package = 'VASP' ! obtained from VASP, it could be 'VASP', 'QE', 'Wien2k', 'OpenMx' +/ + +LATTICE +Angstrom +-2.069 -3.583614 0.000000 ! crystal lattice information + 2.069 -3.583614 0.000000 + 0.000 2.389075 9.546667 + +ATOM_POSITIONS +5 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate + Bi 0.3990 0.3990 0.6970 + Bi 0.6010 0.6010 0.3030 + Se 0.0000 0.0000 0.5000 + Se 0.2060 0.2060 0.1180 + Se 0.7940 0.7940 0.8820 + +PROJECTORS + 3 3 3 3 3 ! number of projectors +Bi pz px py ! projectors +Bi pz px py +Se pz px py +Se pz px py +Se pz px py + +SURFACE ! See doc for details + 1 0 0 + 0 1 0 + + +!> bulk band structure calculation flag +&CONTROL +BulkBand_calc = T +Z2_3D_calc = T +SlabBand_calc = T +SlabSpintexture_calc = T +SlabSS_calc = T +SlabBandWaveFunc_calc = F +BulkBand_points_calc = F +WireBand_calc = F +SlabArc_calc = F +Wanniercenter_calc = F +SHC_calc = F +/ + +&SYSTEM +NSLAB = 20 ! for thin film system +NSLAB1= 4 ! nanowire system +NSLAB2= 4 ! nanowire system +NumOccupied = 18 ! NumOccupied +SOC = 1 ! soc +E_FERMI = 4.4195 ! e-fermi +/ + +&PARAMETERS +Fermi_broadening = 0.0010 ! infinite small value, like brodening +iso_energy = 0.0 ! energy for calculate Fermi Arc +OmegaNum = 300 ! omega number +OmegaMin = -1.0 ! energy interval +OmegaMax = 1.0 ! energy interval +Nk1 = 41 ! number k points odd number would be better +Nk2 = 41 ! number k points odd number would be better +Nk3 = 21 ! number k points odd number would be better +NP = 1 ! number of principle layers +/ + +KPATH_BULK ! k point path +4 ! number of k line only for bulk band +G 0.00000 0.00000 0.0000 Z 0.00000 0.00000 0.5000 +Z 0.00000 0.00000 0.5000 F 0.50000 0.50000 0.0000 +F 0.50000 0.50000 0.0000 G 0.00000 0.00000 0.0000 +G 0.00000 0.00000 0.0000 L 0.50000 0.00000 0.0000 + +KPATH_SLAB +2 ! numker of k line for 2D case +K 0.33 0.67 G 0.0 0.0 ! k path for 2D case +G 0.0 0.0 M 0.5 0.5 + +KPLANE_SLAB +-0.1 -0.1 ! Original point for 2D k plane + 0.2 0.0 ! The first vector to define 2D k plane + 0.0 0.2 ! The second vector to define 2D k plane for arc plots + +KPLANE_BULK + 0.00 0.00 0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 0.50 0.00 ! The second vector to define 3d k space plane + + +KCUBE_BULK + 0.00 0.00 0.00 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + + +EFFECTIVE_MASS ! optional +2 ! The i'th band to be calculated +0.01 ! k step in unit of (1/Angstrom) +0.0 0.0 0.0 ! k point where the effective mass calculated. + +KPOINTS_3D +4 +Direct +0.0 0.0 0.0 +0.5 0.0 0.0 +0.0 0.5 0.0 +0.0 0.0 0.5 + +SINGLEKPOINT_2D +Direct +0.0 0.0 + + +WANNIER_CENTRES ! copy from wannier90.wout +Cartesian + -0.000040 -1.194745 6.638646 + 0.000038 -1.196699 6.640059 + -0.000032 -1.192363 6.640243 + -0.000086 -3.583414 2.908040 + 0.000047 -3.581457 2.906587 + -0.000033 -3.585864 2.906443 + -0.000001 1.194527 4.773338 + 0.000003 1.194538 4.773336 + -0.000037 1.194536 4.773327 + 0.000006 -1.194384 1.130261 + -0.000018 -1.216986 1.140267 + 0.000007 -1.172216 1.140684 + 0.000011 -3.583770 8.416406 + -0.000002 -3.561169 8.406398 + -0.000007 -3.605960 8.405979 + 0.000086 -1.194737 6.638626 + -0.000047 -1.196693 6.640080 + 0.000033 -1.192286 6.640223 + 0.000040 -3.583406 2.908021 + -0.000038 -3.581452 2.906608 + 0.000032 -3.585788 2.906424 + 0.000001 1.194548 4.773330 + -0.000003 1.194537 4.773332 + 0.000037 1.194539 4.773340 + -0.000011 -1.194381 1.130260 + 0.000002 -1.216981 1.140268 + 0.000007 -1.172191 1.140687 + -0.000006 -3.583766 8.416405 + 0.000018 -3.561165 8.406400 + -0.000007 -3.605935 8.405982 + diff --git a/examples/Bi2Se3/wt.in-ss b/examples/Bi2Se3/wt.in-ss new file mode 100644 index 00000000..621cb0ec --- /dev/null +++ b/examples/Bi2Se3/wt.in-ss @@ -0,0 +1,143 @@ +&TB_FILE +Hrfile = 'wannier90_hr.dat' +Package = 'VASP' ! obtained from VASP, it could be 'VASP', 'QE', 'Wien2k', 'OpenMx' +/ + +LATTICE +Angstrom +-2.069 -3.583614 0.000000 ! crystal lattice information + 2.069 -3.583614 0.000000 + 0.000 2.389075 9.546667 + +ATOM_POSITIONS +5 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate + Bi 0.3990 0.3990 0.6970 + Bi 0.6010 0.6010 0.3030 + Se 0.0000 0.0000 0.5000 + Se 0.2060 0.2060 0.1180 + Se 0.7940 0.7940 0.8820 + +PROJECTORS + 3 3 3 3 3 ! number of projectors +Bi pz px py ! projectors +Bi pz px py +Se pz px py +Se pz px py +Se pz px py + +SURFACE ! (001) surface + 1 0 0 + 0 1 0 + + +!> bulk band structure calculation flag +&CONTROL +BulkBand_calc = T +SlabBand_calc = T +SlabSS_calc = T +SlabArc_calc = T +SlabSpintexture_calc = T +/ + +&SYSTEM +NSLAB = 20 ! for thin film system +NSLAB1= 4 ! nanowire system +NSLAB2= 4 ! nanowire system +NumOccupied = 18 ! NumOccupied +SOC = 1 ! soc +E_FERMI = 4.4195 ! e-fermi +/ + +&PARAMETERS +Fermi_broadening = 0.0010 ! infinite small value, like brodening +iso_energy = 0.0 ! energy for calculate Fermi Arc +OmegaNum = 201 ! omega number +OmegaMin = -1.0 ! energy interval +OmegaMax = 1.0 ! energy interval +Nk1 =101 ! number k points odd number would be better +Nk2 =101 ! number k points odd number would be better +NP = 1 ! number of principle layers +/ + +KPATH_BULK ! k point path +4 ! number of k line only for bulk band +G 0.00000 0.00000 0.0000 Z 0.00000 0.00000 0.5000 +Z 0.00000 0.00000 0.5000 F 0.50000 0.50000 0.0000 +F 0.50000 0.50000 0.0000 G 0.00000 0.00000 0.0000 +G 0.00000 0.00000 0.0000 L 0.50000 0.00000 0.0000 + +KPATH_SLAB +2 ! numker of k line for 2D case +K 0.33 0.67 G 0.0 0.0 ! k path for 2D case +G 0.0 0.0 M 0.5 0.5 + +KPLANE_SLAB +-0.1 -0.1 ! Original point for 2D k plane + 0.2 0.0 ! The first vector to define 2D k plane + 0.0 0.2 ! The second vector to define 2D k plane for arc plots + +KPLANE_BULK + 0.00 0.00 0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 0.50 0.00 ! The second vector to define 3d k space plane + + +KCUBE_BULK + 0.00 0.00 0.00 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + + +EFFECTIVE_MASS ! optional +2 ! The i'th band to be calculated +0.01 ! k step in unit of (1/Angstrom) +0.0 0.0 0.0 ! k point where the effective mass calculated. + +KPOINTS_3D +4 +Direct +0.0 0.0 0.0 +0.5 0.0 0.0 +0.0 0.5 0.0 +0.0 0.0 0.5 + +SINGLEKPOINT_2D +Direct +0.0 0.0 + + +WANNIER_CENTRES ! copy from wannier90.wout +Cartesian + -0.000040 -1.194745 6.638646 + 0.000038 -1.196699 6.640059 + -0.000032 -1.192363 6.640243 + -0.000086 -3.583414 2.908040 + 0.000047 -3.581457 2.906587 + -0.000033 -3.585864 2.906443 + -0.000001 1.194527 4.773338 + 0.000003 1.194538 4.773336 + -0.000037 1.194536 4.773327 + 0.000006 -1.194384 1.130261 + -0.000018 -1.216986 1.140267 + 0.000007 -1.172216 1.140684 + 0.000011 -3.583770 8.416406 + -0.000002 -3.561169 8.406398 + -0.000007 -3.605960 8.405979 + 0.000086 -1.194737 6.638626 + -0.000047 -1.196693 6.640080 + 0.000033 -1.192286 6.640223 + 0.000040 -3.583406 2.908021 + -0.000038 -3.581452 2.906608 + 0.000032 -3.585788 2.906424 + 0.000001 1.194548 4.773330 + -0.000003 1.194537 4.773332 + 0.000037 1.194539 4.773340 + -0.000011 -1.194381 1.130260 + 0.000002 -1.216981 1.140268 + 0.000007 -1.172191 1.140687 + -0.000006 -3.583766 8.416405 + 0.000018 -3.561165 8.406400 + -0.000007 -3.605935 8.405982 + diff --git a/examples/Bi2Se3/wt.in-z2 b/examples/Bi2Se3/wt.in-z2 new file mode 100644 index 00000000..83aa8eac --- /dev/null +++ b/examples/Bi2Se3/wt.in-z2 @@ -0,0 +1,89 @@ +&TB_FILE +Hrfile = 'wannier90_hr.dat' +!Hrfile = 'wannier90_hr.dat_nsymm12' +Package = 'VASP' ! obtained from VASP, it could be 'VASP', 'QE', 'Wien2k', 'OpenMx' +/ + +LATTICE +Angstrom +-2.069 -3.583614 0.000000 ! crystal lattice information + 2.069 -3.583614 0.000000 + 0.000 2.389075 9.546667 + +ATOM_POSITIONS +5 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate + Bi 0.3990 0.3990 0.6970 + Bi 0.6010 0.6010 0.3030 + Se 0.0000 0.0000 0.5000 + Se 0.2060 0.2060 0.1180 + Se 0.7940 0.7940 0.8820 + +PROJECTORS + 3 3 3 3 3 ! number of projectors +Bi pz px py ! projectors +Bi pz px py +Se pz px py +Se pz px py +Se pz px py + +SURFACE ! See doc for details + 1 0 0 + 0 1 0 + + +!> bulk band structure calculation flag +&CONTROL +Z2_3D_calc = T +Wanniercenter_calc = T +/ + +&SYSTEM +NumOccupied = 18 ! NumOccupied +SOC = 1 ! soc +E_FERMI = 4.4195 ! e-fermi +/ + +&PARAMETERS +Nk1 = 41 ! number k points odd number would be better +Nk2 = 41 ! number k points odd number would be better +/ + +KPLANE_BULK + 0.00 0.00 0.00 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 0.50 0.00 ! The second vector to define 3d k space plane + +WANNIER_CENTRES ! copy from wannier90.wout +Cartesian + -0.000040 -1.194745 6.638646 + 0.000038 -1.196699 6.640059 + -0.000032 -1.192363 6.640243 + -0.000086 -3.583414 2.908040 + 0.000047 -3.581457 2.906587 + -0.000033 -3.585864 2.906443 + -0.000001 1.194527 4.773338 + 0.000003 1.194538 4.773336 + -0.000037 1.194536 4.773327 + 0.000006 -1.194384 1.130261 + -0.000018 -1.216986 1.140267 + 0.000007 -1.172216 1.140684 + 0.000011 -3.583770 8.416406 + -0.000002 -3.561169 8.406398 + -0.000007 -3.605960 8.405979 + 0.000086 -1.194737 6.638626 + -0.000047 -1.196693 6.640080 + 0.000033 -1.192286 6.640223 + 0.000040 -3.583406 2.908021 + -0.000038 -3.581452 2.906608 + 0.000032 -3.585788 2.906424 + 0.000001 1.194548 4.773330 + -0.000003 1.194537 4.773332 + 0.000037 1.194539 4.773340 + -0.000011 -1.194381 1.130260 + 0.000002 -1.216981 1.140268 + 0.000007 -1.172191 1.140687 + -0.000006 -3.583766 8.416405 + 0.000018 -3.561165 8.406400 + -0.000007 -3.605935 8.405982 + diff --git a/examples/Co2MnGa/wt.in b/examples/Co2MnGa/wt.in index c4d6c0f0..c3cf1c5a 100644 --- a/examples/Co2MnGa/wt.in +++ b/examples/Co2MnGa/wt.in @@ -5,7 +5,7 @@ Package = 'VASP' ! obtained from VASP, it could be 'VASP', 'QE', 'Wi !> bulk band structure calculation flag &CONTROL -ANE_calc = T +AHC_calc = T / &SYSTEM @@ -19,12 +19,9 @@ Eta_arc = 0.01 OmegaNum = 901 OmegaMin = -1 OmegaMax = 1 -Nk1 = 261 ! number k points odd number would be better -Nk2 = 261 ! number k points odd number would be better -Nk3 = 261 ! number k points odd number would be better -TMin = 20 ! energy interval -TMax = 320 ! energy interval -NumT = 33 ! omega number +Nk1 = 101 ! number k points odd number would be better +Nk2 = 101 ! number k points odd number would be better +Nk3 = 101 ! number k points odd number would be better / LATTICE @@ -61,38 +58,9 @@ T 0.50000 0.50000 0.50000 U 0.75424 0.37288 0.37288 U 0.75424 0.37288 0.37288 L 0.50000 0.00000 0.00000 L 0.50000 0.00000 0.00000 G 0.00000 0.00000 0.00000 -KPATH_SLAB -2 ! numker of k line for 2D case -M 0.5 0.5 G 0.0 0.0 ! k path for 2D case -G 0.0 0.0 X 0.0 0.5 - -KPLANE_SLAB --0.5 -0.5 ! Original point for 2D k plane - 3.0 0.0 ! The first vector to define 2D k plane - 0.0 3.0 ! The second vector to define 2D k plane for arc plots - -KPLANE_BULK - 0.00 0.00 0.50 ! Original point for 3D k plane - 1.00 0.00 0.00 ! The first vector to define 3d k space plane - 0.00 0.50 0.00 ! The second vector to define 3d k space plane - - KCUBE_BULK -0.50 -0.50 -0.50 ! Original point for 3D k plane 1.00 0.00 0.00 ! The first vector to define 3d k space plane 0.00 1.00 0.00 ! The second vector to define 3d k space plane 0.00 0.00 1.00 ! The third vector to define 3d k cube - -EFFECTIVE_MASS ! optional -2 ! The i'th band to be calculated -0.01 ! k step in unit of (1/Angstrom) -0.0 0.0 0.0 ! k point where the effective mass calculated. - -KPOINTS_3D -4 -Direct -0.0 0.0 0.0 -0.5 0.0 0.0 -0.0 0.5 0.0 -0.0 0.0 0.5 diff --git a/examples/Co2MnGa/wt.in-ahe b/examples/Co2MnGa/wt.in-ahe new file mode 100644 index 00000000..3a8ae9c4 --- /dev/null +++ b/examples/Co2MnGa/wt.in-ahe @@ -0,0 +1,66 @@ +&TB_FILE +Hrfile = 'wannier90_hr.dat' +Package = 'VASP' ! obtained from VASP, it could be 'VASP', 'QE', 'Wien2k', 'OpenMx' +/ + +!> bulk band structure calculation flag +&CONTROL +AHC_calc = T +/ + +&SYSTEM +NumOccupied = 28 ! NumOccupied +SOC = 1 ! soc +E_FERMI = 7.2170 ! e-fermi +/ + +&PARAMETERS +Eta_arc = 0.01 +OmegaNum = 901 +OmegaMin = -1 +OmegaMax = 1 +Nk1 = 21 ! 251*251*251 is enough to get a good convergence +Nk2 = 21 ! number k points odd number would be better +Nk3 = 21 ! number k points odd number would be better +/ + +LATTICE +Angstrom + 0.0000000000000000 2.8849999904499999 2.8849999904499999 + 2.8849999904499999 0.0000000000000000 2.8849999904499999 + 2.8849999904499999 2.8849999904499999 0.0000000000000000 + +ATOM_POSITIONS +4 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +Co 0.2500000000000000 0.2500000000000000 0.2500000000000000 +Co 0.7500000000000000 0.7500000000000000 0.7500000000000000 +Mn 0.5000000000000000 0.5000000000000000 0.5000000000000000 +Ga 0.0000000000000000 0.0000000000000000 0.0000000000000000 + + +PROJECTORS + 9 9 9 4 ! number of projectors + Co s px py pz dz2 dxz dyz dx2-y2 dxy + Co s px py pz dz2 dxz dyz dx2-y2 dxy + Mn s px py pz dz2 dxz dyz dx2-y2 dxy + Ga s px py pz + +SURFACE ! Specify surface with two vectors, see doc + 1 0 0 + 0 1 0 + 0 0 1 + +KPATH_BULK ! k point path +4 ! number of k line only for bulk band +W 0.50000 0.24576 0.75424 T 0.50000 0.50000 0.50000 +T 0.50000 0.50000 0.50000 U 0.75424 0.37288 0.37288 +U 0.75424 0.37288 0.37288 L 0.50000 0.00000 0.00000 +L 0.50000 0.00000 0.00000 G 0.00000 0.00000 0.00000 + +KCUBE_BULK + -0.50 -0.50 -0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + diff --git a/examples/Co2MnGa/wt.in-ane b/examples/Co2MnGa/wt.in-ane new file mode 100644 index 00000000..32f87bcc --- /dev/null +++ b/examples/Co2MnGa/wt.in-ane @@ -0,0 +1,71 @@ +&TB_FILE +Hrfile = 'wannier90_hr.dat' +Package = 'VASP' ! obtained from VASP, it could be 'VASP', 'QE', 'Wien2k', 'OpenMx' +/ + +!> bulk band structure calculation flag +&CONTROL +ANE_calc = T +/ + +&SYSTEM +NumOccupied = 28 ! NumOccupied +SOC = 1 ! soc +E_FERMI = 7.2170 ! e-fermi +/ + +&PARAMETERS +Eta_arc = 0.01 +OmegaNum = 901 +OmegaMin = -1 +OmegaMax = 1 +Nk1 = 21 ! 251*251*251 is enough to get a good convergence +Nk2 = 21 ! number k points odd number would be better +Nk3 = 21 ! number k points odd number would be better +TMin = 20 ! energy interval +TMax = 320 ! energy interval +NumT = 33 ! omega number +/ + +LATTICE +Angstrom + 0.0000000000000000 2.8849999904499999 2.8849999904499999 + 2.8849999904499999 0.0000000000000000 2.8849999904499999 + 2.8849999904499999 2.8849999904499999 0.0000000000000000 + +ATOM_POSITIONS +4 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +Co 0.2500000000000000 0.2500000000000000 0.2500000000000000 +Co 0.7500000000000000 0.7500000000000000 0.7500000000000000 +Mn 0.5000000000000000 0.5000000000000000 0.5000000000000000 +Ga 0.0000000000000000 0.0000000000000000 0.0000000000000000 + + +PROJECTORS + 9 9 9 4 ! number of projectors + Co s px py pz dz2 dxz dyz dx2-y2 dxy + Co s px py pz dz2 dxz dyz dx2-y2 dxy + Mn s px py pz dz2 dxz dyz dx2-y2 dxy + Ga s px py pz + +SURFACE ! Specify surface with two vectors, see doc + 1 0 0 + 0 1 0 + 0 0 1 + +KPATH_BULK ! k point path +4 ! number of k line only for bulk band +W 0.50000 0.24576 0.75424 T 0.50000 0.50000 0.50000 +T 0.50000 0.50000 0.50000 U 0.75424 0.37288 0.37288 +U 0.75424 0.37288 0.37288 L 0.50000 0.00000 0.00000 +L 0.50000 0.00000 0.00000 G 0.00000 0.00000 0.00000 + + +KCUBE_BULK + -0.50 -0.50 -0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + + diff --git a/examples/Co3Sn2S2/non-magnetic/POSCAR b/examples/Co3Sn2S2/non-magnetic/POSCAR new file mode 100644 index 00000000..34189c54 --- /dev/null +++ b/examples/Co3Sn2S2/non-magnetic/POSCAR @@ -0,0 +1,15 @@ +Co3Sn2S2 a = 5.3689; c=13.176 https://static-content.springer.com/esm/art%3A10.1038%2Fs41567-018-0234-5/MediaObjects/41567_2018_234_MOESM1_ESM.pdf +1 + 3.09973586025218176708 -0.00000 4.39200000 + -1.54986793012609088354 2.68445 4.39200000 + -1.54986793012609088354 -2.68445 4.39200000 + Co S Sn + 3 2 2 +Direct + 0.5000000000000000 -0.0000000000000000 -0.0000000000000000 Co +-0.0000000000000000 0.5000000000000000 0.0000000000000001 Co +-0.0000000000000000 0.0000000000000000 0.5000000000000000 Co + 0.2837100597000001 0.2837100597000000 0.2837100597000001 S +-0.2837100596999999 -0.2837100597000000 -0.2837100597000001 S + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Sn + 0.5000000000000000 0.5000000000000000 -0.5000000000000000 Sn diff --git a/examples/Co3Sn2S2/non-magnetic/wannier90.win b/examples/Co3Sn2S2/non-magnetic/wannier90.win new file mode 100644 index 00000000..adfacb98 --- /dev/null +++ b/examples/Co3Sn2S2/non-magnetic/wannier90.win @@ -0,0 +1,568 @@ + +#exclude_bands 1-36 + +#fermi_energy = 6.6224 +dis_win_min = -3 #-4 +dis_win_max = 20 #2.47 +dis_froz_min = -3 +dis_froz_max = 7 + +dis_num_iter = 100 + +!!restart=wannierise +num_iter = 0 +num_print_cycles = 10 + +hr_plot = .true. +iprint=3 + +!restart = plot +!bands_plot = true +!bands_plot_format = xmgrace +#!bands_num_points = 100 + +begin projections +Co:l=2 +S:l=1 +Sn:l=0;l=1 +end projections + + +# This part was generated automatically by VASP +num_bands = 72 +num_wann = 58 + +spinors = .true. + +begin unit_cell_cart + 3.0997359 0.0000000 4.3920000 + -1.5498679 2.6844500 4.3920000 + -1.5498679 -2.6844500 4.3920000 +end unit_cell_cart + +begin atoms_cart +Co 1.5498679 0.0000000 2.1960000 +Co -0.7749340 1.3422250 2.1960000 +Co -0.7749340 -1.3422250 2.1960000 +S 0.0000000 0.0000000 3.7381637 +S 0.0000000 0.0000000 9.4378363 +Sn 0.0000000 0.0000000 0.0000000 +Sn 0.0000000 0.0000000 6.5880000 +end atoms_cart + +mp_grid = 8 8 8 + +begin kpoints + 0.000000000000 0.000000000000 0.000000000000 + 0.125000000000 0.000000000000 0.000000000000 + 0.250000000000 0.000000000000 0.000000000000 + 0.375000000000 0.000000000000 0.000000000000 + 0.500000000000 0.000000000000 0.000000000000 + -0.375000000000 0.000000000000 0.000000000000 + -0.250000000000 0.000000000000 0.000000000000 + -0.125000000000 0.000000000000 0.000000000000 + 0.000000000000 0.125000000000 -0.000000000000 + 0.125000000000 0.125000000000 0.000000000000 + 0.250000000000 0.125000000000 0.000000000000 + 0.375000000000 0.125000000000 0.000000000000 + 0.500000000000 0.125000000000 -0.000000000000 + -0.375000000000 0.125000000000 0.000000000000 + -0.250000000000 0.125000000000 0.000000000000 + -0.125000000000 0.125000000000 0.000000000000 + 0.000000000000 0.250000000000 -0.000000000000 + 0.125000000000 0.250000000000 0.000000000000 + 0.250000000000 0.250000000000 0.000000000000 + 0.375000000000 0.250000000000 0.000000000000 + 0.500000000000 0.250000000000 0.000000000000 + -0.375000000000 0.250000000000 -0.000000000000 + -0.250000000000 0.250000000000 0.000000000000 + -0.125000000000 0.250000000000 -0.000000000000 + 0.000000000000 0.375000000000 0.000000000000 + 0.125000000000 0.375000000000 0.000000000000 + 0.250000000000 0.375000000000 -0.000000000000 + 0.375000000000 0.375000000000 0.000000000000 + 0.500000000000 0.375000000000 0.000000000000 + -0.375000000000 0.375000000000 0.000000000000 + -0.250000000000 0.375000000000 -0.000000000000 + -0.125000000000 0.375000000000 0.000000000000 + 0.000000000000 0.500000000000 -0.000000000000 + 0.125000000000 0.500000000000 -0.000000000000 + 0.250000000000 0.500000000000 0.000000000000 + 0.375000000000 0.500000000000 0.000000000000 + 0.500000000000 0.500000000000 0.000000000000 + -0.375000000000 0.500000000000 -0.000000000000 + -0.250000000000 0.500000000000 -0.000000000000 + -0.125000000000 0.500000000000 0.000000000000 + 0.000000000000 -0.375000000000 0.000000000000 + 0.125000000000 -0.375000000000 0.000000000000 + 0.250000000000 -0.375000000000 0.000000000000 + 0.375000000000 -0.375000000000 0.000000000000 + 0.500000000000 -0.375000000000 -0.000000000000 + -0.375000000000 -0.375000000000 0.000000000000 + -0.250000000000 -0.375000000000 0.000000000000 + -0.125000000000 -0.375000000000 0.000000000000 + 0.000000000000 -0.250000000000 0.000000000000 + 0.125000000000 -0.250000000000 0.000000000000 + 0.250000000000 -0.250000000000 0.000000000000 + 0.375000000000 -0.250000000000 0.000000000000 + 0.500000000000 -0.250000000000 -0.000000000000 + -0.375000000000 -0.250000000000 0.000000000000 + -0.250000000000 -0.250000000000 0.000000000000 + -0.125000000000 -0.250000000000 0.000000000000 + 0.000000000000 -0.125000000000 0.000000000000 + 0.125000000000 -0.125000000000 0.000000000000 + 0.250000000000 -0.125000000000 -0.000000000000 + 0.375000000000 -0.125000000000 0.000000000000 + 0.500000000000 -0.125000000000 0.000000000000 + -0.375000000000 -0.125000000000 0.000000000000 + -0.250000000000 -0.125000000000 0.000000000000 + -0.125000000000 -0.125000000000 0.000000000000 + 0.000000000000 -0.000000000000 0.125000000000 + 0.125000000000 0.000000000000 0.125000000000 + 0.250000000000 0.000000000000 0.125000000000 + 0.375000000000 0.000000000000 0.125000000000 + 0.500000000000 -0.000000000000 0.125000000000 + -0.375000000000 0.000000000000 0.125000000000 + -0.250000000000 0.000000000000 0.125000000000 + -0.125000000000 0.000000000000 0.125000000000 + 0.000000000000 0.125000000000 0.125000000000 + 0.125000000000 0.125000000000 0.125000000000 + 0.250000000000 0.125000000000 0.125000000000 + 0.375000000000 0.125000000000 0.125000000000 + 0.500000000000 0.125000000000 0.125000000000 + -0.375000000000 0.125000000000 0.125000000000 + -0.250000000000 0.125000000000 0.125000000000 + -0.125000000000 0.125000000000 0.125000000000 + 0.000000000000 0.250000000000 0.125000000000 + 0.125000000000 0.250000000000 0.125000000000 + 0.250000000000 0.250000000000 0.125000000000 + 0.375000000000 0.250000000000 0.125000000000 + 0.500000000000 0.250000000000 0.125000000000 + -0.375000000000 0.250000000000 0.125000000000 + -0.250000000000 0.250000000000 0.125000000000 + -0.125000000000 0.250000000000 0.125000000000 + 0.000000000000 0.375000000000 0.125000000000 + 0.125000000000 0.375000000000 0.125000000000 + 0.250000000000 0.375000000000 0.125000000000 + 0.375000000000 0.375000000000 0.125000000000 + 0.500000000000 0.375000000000 0.125000000000 + -0.375000000000 0.375000000000 0.125000000000 + -0.250000000000 0.375000000000 0.125000000000 + -0.125000000000 0.375000000000 0.125000000000 + -0.000000000000 0.500000000000 0.125000000000 + 0.125000000000 0.500000000000 0.125000000000 + 0.250000000000 0.500000000000 0.125000000000 + 0.375000000000 0.500000000000 0.125000000000 + 0.500000000000 0.500000000000 0.125000000000 + -0.375000000000 0.500000000000 0.125000000000 + -0.250000000000 0.500000000000 0.125000000000 + -0.125000000000 0.500000000000 0.125000000000 + -0.000000000000 -0.375000000000 0.125000000000 + 0.125000000000 -0.375000000000 0.125000000000 + 0.250000000000 -0.375000000000 0.125000000000 + 0.375000000000 -0.375000000000 0.125000000000 + 0.500000000000 -0.375000000000 0.125000000000 + -0.375000000000 -0.375000000000 0.125000000000 + -0.250000000000 -0.375000000000 0.125000000000 + -0.125000000000 -0.375000000000 0.125000000000 + 0.000000000000 -0.250000000000 0.125000000000 + 0.125000000000 -0.250000000000 0.125000000000 + 0.250000000000 -0.250000000000 0.125000000000 + 0.375000000000 -0.250000000000 0.125000000000 + 0.500000000000 -0.250000000000 0.125000000000 + -0.375000000000 -0.250000000000 0.125000000000 + -0.250000000000 -0.250000000000 0.125000000000 + -0.125000000000 -0.250000000000 0.125000000000 + 0.000000000000 -0.125000000000 0.125000000000 + 0.125000000000 -0.125000000000 0.125000000000 + 0.250000000000 -0.125000000000 0.125000000000 + 0.375000000000 -0.125000000000 0.125000000000 + 0.500000000000 -0.125000000000 0.125000000000 + -0.375000000000 -0.125000000000 0.125000000000 + -0.250000000000 -0.125000000000 0.125000000000 + -0.125000000000 -0.125000000000 0.125000000000 + 0.000000000000 -0.000000000000 0.250000000000 + 0.125000000000 0.000000000000 0.250000000000 + 0.250000000000 0.000000000000 0.250000000000 + 0.375000000000 0.000000000000 0.250000000000 + 0.500000000000 0.000000000000 0.250000000000 + -0.375000000000 -0.000000000000 0.250000000000 + -0.250000000000 0.000000000000 0.250000000000 + -0.125000000000 -0.000000000000 0.250000000000 + 0.000000000000 0.125000000000 0.250000000000 + 0.125000000000 0.125000000000 0.250000000000 + 0.250000000000 0.125000000000 0.250000000000 + 0.375000000000 0.125000000000 0.250000000000 + 0.500000000000 0.125000000000 0.250000000000 + -0.375000000000 0.125000000000 0.250000000000 + -0.250000000000 0.125000000000 0.250000000000 + -0.125000000000 0.125000000000 0.250000000000 + 0.000000000000 0.250000000000 0.250000000000 + 0.125000000000 0.250000000000 0.250000000000 + 0.250000000000 0.250000000000 0.250000000000 + 0.375000000000 0.250000000000 0.250000000000 + 0.500000000000 0.250000000000 0.250000000000 + -0.375000000000 0.250000000000 0.250000000000 + -0.250000000000 0.250000000000 0.250000000000 + -0.125000000000 0.250000000000 0.250000000000 + 0.000000000000 0.375000000000 0.250000000000 + 0.125000000000 0.375000000000 0.250000000000 + 0.250000000000 0.375000000000 0.250000000000 + 0.375000000000 0.375000000000 0.250000000000 + 0.500000000000 0.375000000000 0.250000000000 + -0.375000000000 0.375000000000 0.250000000000 + -0.250000000000 0.375000000000 0.250000000000 + -0.125000000000 0.375000000000 0.250000000000 + 0.000000000000 0.500000000000 0.250000000000 + 0.125000000000 0.500000000000 0.250000000000 + 0.250000000000 0.500000000000 0.250000000000 + 0.375000000000 0.500000000000 0.250000000000 + 0.500000000000 0.500000000000 0.250000000000 + -0.375000000000 0.500000000000 0.250000000000 + -0.250000000000 0.500000000000 0.250000000000 + -0.125000000000 0.500000000000 0.250000000000 + -0.000000000000 -0.375000000000 0.250000000000 + 0.125000000000 -0.375000000000 0.250000000000 + 0.250000000000 -0.375000000000 0.250000000000 + 0.375000000000 -0.375000000000 0.250000000000 + 0.500000000000 -0.375000000000 0.250000000000 + -0.375000000000 -0.375000000000 0.250000000000 + -0.250000000000 -0.375000000000 0.250000000000 + -0.125000000000 -0.375000000000 0.250000000000 + 0.000000000000 -0.250000000000 0.250000000000 + 0.125000000000 -0.250000000000 0.250000000000 + 0.250000000000 -0.250000000000 0.250000000000 + 0.375000000000 -0.250000000000 0.250000000000 + 0.500000000000 -0.250000000000 0.250000000000 + -0.375000000000 -0.250000000000 0.250000000000 + -0.250000000000 -0.250000000000 0.250000000000 + -0.125000000000 -0.250000000000 0.250000000000 + 0.000000000000 -0.125000000000 0.250000000000 + 0.125000000000 -0.125000000000 0.250000000000 + 0.250000000000 -0.125000000000 0.250000000000 + 0.375000000000 -0.125000000000 0.250000000000 + 0.500000000000 -0.125000000000 0.250000000000 + -0.375000000000 -0.125000000000 0.250000000000 + -0.250000000000 -0.125000000000 0.250000000000 + -0.125000000000 -0.125000000000 0.250000000000 + 0.000000000000 0.000000000000 0.375000000000 + 0.125000000000 0.000000000000 0.375000000000 + 0.250000000000 -0.000000000000 0.375000000000 + 0.375000000000 0.000000000000 0.375000000000 + 0.500000000000 0.000000000000 0.375000000000 + -0.375000000000 0.000000000000 0.375000000000 + -0.250000000000 -0.000000000000 0.375000000000 + -0.125000000000 0.000000000000 0.375000000000 + 0.000000000000 0.125000000000 0.375000000000 + 0.125000000000 0.125000000000 0.375000000000 + 0.250000000000 0.125000000000 0.375000000000 + 0.375000000000 0.125000000000 0.375000000000 + 0.500000000000 0.125000000000 0.375000000000 + -0.375000000000 0.125000000000 0.375000000000 + -0.250000000000 0.125000000000 0.375000000000 + -0.125000000000 0.125000000000 0.375000000000 + 0.000000000000 0.250000000000 0.375000000000 + 0.125000000000 0.250000000000 0.375000000000 + 0.250000000000 0.250000000000 0.375000000000 + 0.375000000000 0.250000000000 0.375000000000 + 0.500000000000 0.250000000000 0.375000000000 + -0.375000000000 0.250000000000 0.375000000000 + -0.250000000000 0.250000000000 0.375000000000 + -0.125000000000 0.250000000000 0.375000000000 + 0.000000000000 0.375000000000 0.375000000000 + 0.125000000000 0.375000000000 0.375000000000 + 0.250000000000 0.375000000000 0.375000000000 + 0.375000000000 0.375000000000 0.375000000000 + 0.500000000000 0.375000000000 0.375000000000 + -0.375000000000 0.375000000000 0.375000000000 + -0.250000000000 0.375000000000 0.375000000000 + -0.125000000000 0.375000000000 0.375000000000 + 0.000000000000 0.500000000000 0.375000000000 + 0.125000000000 0.500000000000 0.375000000000 + 0.250000000000 0.500000000000 0.375000000000 + 0.375000000000 0.500000000000 0.375000000000 + 0.500000000000 0.500000000000 0.375000000000 + -0.375000000000 0.500000000000 0.375000000000 + -0.250000000000 0.500000000000 0.375000000000 + -0.125000000000 0.500000000000 0.375000000000 + 0.000000000000 -0.375000000000 0.375000000000 + 0.125000000000 -0.375000000000 0.375000000000 + 0.250000000000 -0.375000000000 0.375000000000 + 0.375000000000 -0.375000000000 0.375000000000 + 0.500000000000 -0.375000000000 0.375000000000 + -0.375000000000 -0.375000000000 0.375000000000 + -0.250000000000 -0.375000000000 0.375000000000 + -0.125000000000 -0.375000000000 0.375000000000 + 0.000000000000 -0.250000000000 0.375000000000 + 0.125000000000 -0.250000000000 0.375000000000 + 0.250000000000 -0.250000000000 0.375000000000 + 0.375000000000 -0.250000000000 0.375000000000 + 0.500000000000 -0.250000000000 0.375000000000 + -0.375000000000 -0.250000000000 0.375000000000 + -0.250000000000 -0.250000000000 0.375000000000 + -0.125000000000 -0.250000000000 0.375000000000 + 0.000000000000 -0.125000000000 0.375000000000 + 0.125000000000 -0.125000000000 0.375000000000 + 0.250000000000 -0.125000000000 0.375000000000 + 0.375000000000 -0.125000000000 0.375000000000 + 0.500000000000 -0.125000000000 0.375000000000 + -0.375000000000 -0.125000000000 0.375000000000 + -0.250000000000 -0.125000000000 0.375000000000 + -0.125000000000 -0.125000000000 0.375000000000 + 0.000000000000 -0.000000000000 0.500000000000 + 0.125000000000 -0.000000000000 0.500000000000 + 0.250000000000 0.000000000000 0.500000000000 + 0.375000000000 0.000000000000 0.500000000000 + 0.500000000000 0.000000000000 0.500000000000 + -0.375000000000 -0.000000000000 0.500000000000 + -0.250000000000 -0.000000000000 0.500000000000 + -0.125000000000 0.000000000000 0.500000000000 + -0.000000000000 0.125000000000 0.500000000000 + 0.125000000000 0.125000000000 0.500000000000 + 0.250000000000 0.125000000000 0.500000000000 + 0.375000000000 0.125000000000 0.500000000000 + 0.500000000000 0.125000000000 0.500000000000 + -0.375000000000 0.125000000000 0.500000000000 + -0.250000000000 0.125000000000 0.500000000000 + -0.125000000000 0.125000000000 0.500000000000 + 0.000000000000 0.250000000000 0.500000000000 + 0.125000000000 0.250000000000 0.500000000000 + 0.250000000000 0.250000000000 0.500000000000 + 0.375000000000 0.250000000000 0.500000000000 + 0.500000000000 0.250000000000 0.500000000000 + -0.375000000000 0.250000000000 0.500000000000 + -0.250000000000 0.250000000000 0.500000000000 + -0.125000000000 0.250000000000 0.500000000000 + 0.000000000000 0.375000000000 0.500000000000 + 0.125000000000 0.375000000000 0.500000000000 + 0.250000000000 0.375000000000 0.500000000000 + 0.375000000000 0.375000000000 0.500000000000 + 0.500000000000 0.375000000000 0.500000000000 + -0.375000000000 0.375000000000 0.500000000000 + -0.250000000000 0.375000000000 0.500000000000 + -0.125000000000 0.375000000000 0.500000000000 + 0.000000000000 0.500000000000 0.500000000000 + 0.125000000000 0.500000000000 0.500000000000 + 0.250000000000 0.500000000000 0.500000000000 + 0.375000000000 0.500000000000 0.500000000000 + 0.500000000000 0.500000000000 0.500000000000 + -0.375000000000 0.500000000000 0.500000000000 + -0.250000000000 0.500000000000 0.500000000000 + -0.125000000000 0.500000000000 0.500000000000 + 0.000000000000 -0.375000000000 0.500000000000 + 0.125000000000 -0.375000000000 0.500000000000 + 0.250000000000 -0.375000000000 0.500000000000 + 0.375000000000 -0.375000000000 0.500000000000 + 0.500000000000 -0.375000000000 0.500000000000 + -0.375000000000 -0.375000000000 0.500000000000 + -0.250000000000 -0.375000000000 0.500000000000 + -0.125000000000 -0.375000000000 0.500000000000 + 0.000000000000 -0.250000000000 0.500000000000 + 0.125000000000 -0.250000000000 0.500000000000 + 0.250000000000 -0.250000000000 0.500000000000 + 0.375000000000 -0.250000000000 0.500000000000 + 0.500000000000 -0.250000000000 0.500000000000 + -0.375000000000 -0.250000000000 0.500000000000 + -0.250000000000 -0.250000000000 0.500000000000 + -0.125000000000 -0.250000000000 0.500000000000 + 0.000000000000 -0.125000000000 0.500000000000 + 0.125000000000 -0.125000000000 0.500000000000 + 0.250000000000 -0.125000000000 0.500000000000 + 0.375000000000 -0.125000000000 0.500000000000 + 0.500000000000 -0.125000000000 0.500000000000 + -0.375000000000 -0.125000000000 0.500000000000 + -0.250000000000 -0.125000000000 0.500000000000 + -0.125000000000 -0.125000000000 0.500000000000 + 0.000000000000 0.000000000000 -0.375000000000 + 0.125000000000 0.000000000000 -0.375000000000 + 0.250000000000 0.000000000000 -0.375000000000 + 0.375000000000 0.000000000000 -0.375000000000 + 0.500000000000 -0.000000000000 -0.375000000000 + -0.375000000000 0.000000000000 -0.375000000000 + -0.250000000000 0.000000000000 -0.375000000000 + -0.125000000000 0.000000000000 -0.375000000000 + -0.000000000000 0.125000000000 -0.375000000000 + 0.125000000000 0.125000000000 -0.375000000000 + 0.250000000000 0.125000000000 -0.375000000000 + 0.375000000000 0.125000000000 -0.375000000000 + 0.500000000000 0.125000000000 -0.375000000000 + -0.375000000000 0.125000000000 -0.375000000000 + -0.250000000000 0.125000000000 -0.375000000000 + -0.125000000000 0.125000000000 -0.375000000000 + -0.000000000000 0.250000000000 -0.375000000000 + 0.125000000000 0.250000000000 -0.375000000000 + 0.250000000000 0.250000000000 -0.375000000000 + 0.375000000000 0.250000000000 -0.375000000000 + 0.500000000000 0.250000000000 -0.375000000000 + -0.375000000000 0.250000000000 -0.375000000000 + -0.250000000000 0.250000000000 -0.375000000000 + -0.125000000000 0.250000000000 -0.375000000000 + 0.000000000000 0.375000000000 -0.375000000000 + 0.125000000000 0.375000000000 -0.375000000000 + 0.250000000000 0.375000000000 -0.375000000000 + 0.375000000000 0.375000000000 -0.375000000000 + 0.500000000000 0.375000000000 -0.375000000000 + -0.375000000000 0.375000000000 -0.375000000000 + -0.250000000000 0.375000000000 -0.375000000000 + -0.125000000000 0.375000000000 -0.375000000000 + 0.000000000000 0.500000000000 -0.375000000000 + 0.125000000000 0.500000000000 -0.375000000000 + 0.250000000000 0.500000000000 -0.375000000000 + 0.375000000000 0.500000000000 -0.375000000000 + 0.500000000000 0.500000000000 -0.375000000000 + -0.375000000000 0.500000000000 -0.375000000000 + -0.250000000000 0.500000000000 -0.375000000000 + -0.125000000000 0.500000000000 -0.375000000000 + 0.000000000000 -0.375000000000 -0.375000000000 + 0.125000000000 -0.375000000000 -0.375000000000 + 0.250000000000 -0.375000000000 -0.375000000000 + 0.375000000000 -0.375000000000 -0.375000000000 + 0.500000000000 -0.375000000000 -0.375000000000 + -0.375000000000 -0.375000000000 -0.375000000000 + -0.250000000000 -0.375000000000 -0.375000000000 + -0.125000000000 -0.375000000000 -0.375000000000 + 0.000000000000 -0.250000000000 -0.375000000000 + 0.125000000000 -0.250000000000 -0.375000000000 + 0.250000000000 -0.250000000000 -0.375000000000 + 0.375000000000 -0.250000000000 -0.375000000000 + 0.500000000000 -0.250000000000 -0.375000000000 + -0.375000000000 -0.250000000000 -0.375000000000 + -0.250000000000 -0.250000000000 -0.375000000000 + -0.125000000000 -0.250000000000 -0.375000000000 + 0.000000000000 -0.125000000000 -0.375000000000 + 0.125000000000 -0.125000000000 -0.375000000000 + 0.250000000000 -0.125000000000 -0.375000000000 + 0.375000000000 -0.125000000000 -0.375000000000 + 0.500000000000 -0.125000000000 -0.375000000000 + -0.375000000000 -0.125000000000 -0.375000000000 + -0.250000000000 -0.125000000000 -0.375000000000 + -0.125000000000 -0.125000000000 -0.375000000000 + 0.000000000000 0.000000000000 -0.250000000000 + 0.125000000000 0.000000000000 -0.250000000000 + 0.250000000000 0.000000000000 -0.250000000000 + 0.375000000000 0.000000000000 -0.250000000000 + 0.500000000000 -0.000000000000 -0.250000000000 + -0.375000000000 0.000000000000 -0.250000000000 + -0.250000000000 0.000000000000 -0.250000000000 + -0.125000000000 0.000000000000 -0.250000000000 + 0.000000000000 0.125000000000 -0.250000000000 + 0.125000000000 0.125000000000 -0.250000000000 + 0.250000000000 0.125000000000 -0.250000000000 + 0.375000000000 0.125000000000 -0.250000000000 + 0.500000000000 0.125000000000 -0.250000000000 + -0.375000000000 0.125000000000 -0.250000000000 + -0.250000000000 0.125000000000 -0.250000000000 + -0.125000000000 0.125000000000 -0.250000000000 + 0.000000000000 0.250000000000 -0.250000000000 + 0.125000000000 0.250000000000 -0.250000000000 + 0.250000000000 0.250000000000 -0.250000000000 + 0.375000000000 0.250000000000 -0.250000000000 + 0.500000000000 0.250000000000 -0.250000000000 + -0.375000000000 0.250000000000 -0.250000000000 + -0.250000000000 0.250000000000 -0.250000000000 + -0.125000000000 0.250000000000 -0.250000000000 + 0.000000000000 0.375000000000 -0.250000000000 + 0.125000000000 0.375000000000 -0.250000000000 + 0.250000000000 0.375000000000 -0.250000000000 + 0.375000000000 0.375000000000 -0.250000000000 + 0.500000000000 0.375000000000 -0.250000000000 + -0.375000000000 0.375000000000 -0.250000000000 + -0.250000000000 0.375000000000 -0.250000000000 + -0.125000000000 0.375000000000 -0.250000000000 + 0.000000000000 0.500000000000 -0.250000000000 + 0.125000000000 0.500000000000 -0.250000000000 + 0.250000000000 0.500000000000 -0.250000000000 + 0.375000000000 0.500000000000 -0.250000000000 + 0.500000000000 0.500000000000 -0.250000000000 + -0.375000000000 0.500000000000 -0.250000000000 + -0.250000000000 0.500000000000 -0.250000000000 + -0.125000000000 0.500000000000 -0.250000000000 + 0.000000000000 -0.375000000000 -0.250000000000 + 0.125000000000 -0.375000000000 -0.250000000000 + 0.250000000000 -0.375000000000 -0.250000000000 + 0.375000000000 -0.375000000000 -0.250000000000 + 0.500000000000 -0.375000000000 -0.250000000000 + -0.375000000000 -0.375000000000 -0.250000000000 + -0.250000000000 -0.375000000000 -0.250000000000 + -0.125000000000 -0.375000000000 -0.250000000000 + 0.000000000000 -0.250000000000 -0.250000000000 + 0.125000000000 -0.250000000000 -0.250000000000 + 0.250000000000 -0.250000000000 -0.250000000000 + 0.375000000000 -0.250000000000 -0.250000000000 + 0.500000000000 -0.250000000000 -0.250000000000 + -0.375000000000 -0.250000000000 -0.250000000000 + -0.250000000000 -0.250000000000 -0.250000000000 + -0.125000000000 -0.250000000000 -0.250000000000 + 0.000000000000 -0.125000000000 -0.250000000000 + 0.125000000000 -0.125000000000 -0.250000000000 + 0.250000000000 -0.125000000000 -0.250000000000 + 0.375000000000 -0.125000000000 -0.250000000000 + 0.500000000000 -0.125000000000 -0.250000000000 + -0.375000000000 -0.125000000000 -0.250000000000 + -0.250000000000 -0.125000000000 -0.250000000000 + -0.125000000000 -0.125000000000 -0.250000000000 + 0.000000000000 0.000000000000 -0.125000000000 + 0.125000000000 0.000000000000 -0.125000000000 + 0.250000000000 -0.000000000000 -0.125000000000 + 0.375000000000 0.000000000000 -0.125000000000 + 0.500000000000 0.000000000000 -0.125000000000 + -0.375000000000 0.000000000000 -0.125000000000 + -0.250000000000 0.000000000000 -0.125000000000 + -0.125000000000 0.000000000000 -0.125000000000 + 0.000000000000 0.125000000000 -0.125000000000 + 0.125000000000 0.125000000000 -0.125000000000 + 0.250000000000 0.125000000000 -0.125000000000 + 0.375000000000 0.125000000000 -0.125000000000 + 0.500000000000 0.125000000000 -0.125000000000 + -0.375000000000 0.125000000000 -0.125000000000 + -0.250000000000 0.125000000000 -0.125000000000 + -0.125000000000 0.125000000000 -0.125000000000 + 0.000000000000 0.250000000000 -0.125000000000 + 0.125000000000 0.250000000000 -0.125000000000 + 0.250000000000 0.250000000000 -0.125000000000 + 0.375000000000 0.250000000000 -0.125000000000 + 0.500000000000 0.250000000000 -0.125000000000 + -0.375000000000 0.250000000000 -0.125000000000 + -0.250000000000 0.250000000000 -0.125000000000 + -0.125000000000 0.250000000000 -0.125000000000 + 0.000000000000 0.375000000000 -0.125000000000 + 0.125000000000 0.375000000000 -0.125000000000 + 0.250000000000 0.375000000000 -0.125000000000 + 0.375000000000 0.375000000000 -0.125000000000 + 0.500000000000 0.375000000000 -0.125000000000 + -0.375000000000 0.375000000000 -0.125000000000 + -0.250000000000 0.375000000000 -0.125000000000 + -0.125000000000 0.375000000000 -0.125000000000 + 0.000000000000 0.500000000000 -0.125000000000 + 0.125000000000 0.500000000000 -0.125000000000 + 0.250000000000 0.500000000000 -0.125000000000 + 0.375000000000 0.500000000000 -0.125000000000 + 0.500000000000 0.500000000000 -0.125000000000 + -0.375000000000 0.500000000000 -0.125000000000 + -0.250000000000 0.500000000000 -0.125000000000 + -0.125000000000 0.500000000000 -0.125000000000 + 0.000000000000 -0.375000000000 -0.125000000000 + 0.125000000000 -0.375000000000 -0.125000000000 + 0.250000000000 -0.375000000000 -0.125000000000 + 0.375000000000 -0.375000000000 -0.125000000000 + 0.500000000000 -0.375000000000 -0.125000000000 + -0.375000000000 -0.375000000000 -0.125000000000 + -0.250000000000 -0.375000000000 -0.125000000000 + -0.125000000000 -0.375000000000 -0.125000000000 + 0.000000000000 -0.250000000000 -0.125000000000 + 0.125000000000 -0.250000000000 -0.125000000000 + 0.250000000000 -0.250000000000 -0.125000000000 + 0.375000000000 -0.250000000000 -0.125000000000 + 0.500000000000 -0.250000000000 -0.125000000000 + -0.375000000000 -0.250000000000 -0.125000000000 + -0.250000000000 -0.250000000000 -0.125000000000 + -0.125000000000 -0.250000000000 -0.125000000000 + 0.000000000000 -0.125000000000 -0.125000000000 + 0.125000000000 -0.125000000000 -0.125000000000 + 0.250000000000 -0.125000000000 -0.125000000000 + 0.375000000000 -0.125000000000 -0.125000000000 + 0.500000000000 -0.125000000000 -0.125000000000 + -0.375000000000 -0.125000000000 -0.125000000000 + -0.250000000000 -0.125000000000 -0.125000000000 + -0.125000000000 -0.125000000000 -0.125000000000 +end kpoints diff --git a/examples/Co3Sn2S2/non-magnetic/wannier90_hr.dat.tar.gz b/examples/Co3Sn2S2/non-magnetic/wannier90_hr.dat.tar.gz new file mode 100644 index 00000000..37b1902e Binary files /dev/null and b/examples/Co3Sn2S2/non-magnetic/wannier90_hr.dat.tar.gz differ diff --git a/examples/Co3Sn2S2/non-magnetic/wt.in b/examples/Co3Sn2S2/non-magnetic/wt.in new file mode 100644 index 00000000..8aed3c78 --- /dev/null +++ b/examples/Co3Sn2S2/non-magnetic/wt.in @@ -0,0 +1,84 @@ +&TB_FILE +Hrfile='wannier90_hr.dat' +!Hrfile='hr_symmed.dat_nsymm12' +Particle='electron' +/ + +!> +&CONTROL +BulkBand_calc = T +!BulkFS_calc = T +!FindNodes_calc = T +!WeylChirality_calc = T +SHC_calc = T +/ + +&SYSTEM +NumOccupied =22 +SOC = 1 +E_FERMI = 8.3168 +/ + +&PARAMETERS +Fermi_broadening = 0.01 +Nk1 = 21 ! No. of slices for the 1st reciprocal vector +Nk2 = 21 ! No. of slices for the 2nd reciprocal vector +Nk3 = 21 ! No. of slices for the 3rd reciprocal vector +Gap_threshold = 0.0001 ! a value to determine which point should be identified as a node +/ + +KCUBE_BULK +-0.00 -0.00 -0.00 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The 1st vector to define 3d k cube + 0.00 1.00 0.00 ! The 2nd vector to define 3d k cube + 0.00 0.00 1.00 ! The 3rd vector to define 3d k cube + +LATTICE +Angstrom + 2.6844500 1.5498679 4.3920000 + -2.6844500 1.5498679 4.3920000 + 0.0000000 -3.0997359 4.3920000 +end unit_cell_cart + +ATOM_POSITIONS +7 ! number of atoms in unit cell +Direct +Co 0.5000000000000000 -0.0000000000000000 -0.0000000000000000 Co +Co -0.0000000000000000 0.5000000000000000 0.0000000000000001 Co +Co -0.0000000000000000 0.0000000000000000 0.5000000000000000 Co +S 0.2837100597000001 0.2837100597000000 0.2837100597000001 S +S -0.2837100596999999 -0.2837100597000000 -0.2837100597000001 S +Sn 0.0000000000000000 0.0000000000000000 0.0000000000000000 Sn +Sn 0.5000000000000000 0.5000000000000000 -0.5000000000000000 Sn + +PROJECTORS +5 5 5 3 3 4 4 ! number of projectors for each atom +Co dz2 dx2-y2 dyz dxy dxz +Co dz2 dx2-y2 dyz dxy dxz +Co dz2 dx2-y2 dyz dxy dxz +S px py pz +S px py pz +Sn s px py pz +Sn s px py pz + +KPATH_BULK +4 + W 0.249 0.500 0.751 Z 0.500 0.500 0.500 + Z 0.500 0.500 0.500 U 0.347 0.751 0.374 + U 0.347 0.751 0.374 L 0.000 0.500 0.000 + L 0.000 0.500 0.000 \Gamma 0.000 0.000 0.000 + +SURFACE ! See doc for details +1 0 0 +0 1 0 +0 0 1 + +!KPATH_SLAB +!5 ! numker of k line for 2D case + + +KCUBE_BULK +0 0 0 +1 0 0 +0 1 0 +0 0 1 diff --git a/examples/Cu/AMR-xy/AMR_rhoT.py b/examples/Cu/AMR-xy/AMR_rhoT.py new file mode 100644 index 00000000..d23f98b0 --- /dev/null +++ b/examples/Cu/AMR-xy/AMR_rhoT.py @@ -0,0 +1,53 @@ +# Merge data of the same temperature from different folders. +import os +import re + +def extract_different_temp_data(f, ca_num, output_dir): + """ + :param f: + :param ca_num + :return: + """ + with open(f, 'r', encoding='utf-8') as data_file: + line = data_file.readline() + while line: + if '# T' in line: + line=line.strip() + tmp = line.split(' ')[-2] + output_file = './{}/{}K.dat'.format(output_dir, tmp) + with open(output_file, 'a+', encoding='utf-8') as out: + out.write('# {}\n'.format(ca_num)) + line = data_file.readline() + while line: + if '# T' not in line: + out.write(line) + line = data_file.readline() + else: + break + else: + line = data_file.readline() + + +if __name__ == '__main__': + number=1 #Btheta as the variable, number=0; Bphi as the variable, number=1 + dirs = os.listdir('.') + if not os.path.exists('./rho'): + os.mkdir('./rho') + files= os.listdir('./rho') + for file in files: + if file.endswith('K.dat'): + file_path = os.path.join('./rho', file) + os.remove(file_path) + + tmp_list = [] + for dir_name in dirs: + if 'Btheta' in dir_name: + angle=re.findall(r'\d+',dir_name) + tmp=int(angle[number]) + tmp_list.append(tmp) + tmp_list.sort() + for dir_name_num in tmp_list: + ca_num = str(int(dir_name_num)) + #dir_name = 'Btheta' + str(dir_name_num) + 'Bphi90' + dir_name = 'Btheta90'+ 'Bphi' + str(dir_name_num) + extract_different_temp_data('./{}/rho_total_mu_0.00eV.dat'.format(dir_name), ca_num=ca_num, output_dir='rho') diff --git a/examples/Cu/AMR-xy/AMR_rhotheta.py b/examples/Cu/AMR-xy/AMR_rhotheta.py new file mode 100644 index 00000000..834f3537 --- /dev/null +++ b/examples/Cu/AMR-xy/AMR_rhotheta.py @@ -0,0 +1,54 @@ +import os +import re +import numpy as np +def extract_rho_theta(f,dtheta,num_show,interval_line,choose,output_file, output_dir): + index = -1 + for _ in range(num_show): + theta=-dtheta + index = index+1 + with open(f, 'r', encoding='utf-8') as data_file: + line = data_file.readline() + outfile = './{}/{}'.format(output_dir,output_file) + with open(outfile, 'a+', encoding='utf-8') as out: + out.write('#Btau = {:.2f}\n'.format(choose[index])) + out.write('\n') + while line: + if 'BTau' in line: + theta=theta+dtheta + for __ in range(index*interval_line+1): + line=data_file.readline() + parts=line.split() + formparts=['{:>14}'.format(part) for part in parts] + formparts[0]='{:>5}'.format(str(theta)) + line=' '.join(formparts)+'\n' + out.write(line) + line = data_file.readline() + else: + line = data_file.readline() + + +if __name__ == '__main__': + theta_interval=15 + Btau_show=6 + Btau_num=101 + Btau_max=10 + Btau_list=np.linspace(0,Btau_max,Btau_num) + Btau_interval=int((Btau_num-1)/(Btau_show-1)) + Btau_choose=Btau_list[::Btau_interval] + dirs = os.listdir('.') + if not os.path.exists('./rhotheta'): + os.mkdir('./rhotheta') + files= os.listdir('./rhotheta') + for file in files: + if file.endswith('K_Btau.dat'): + file_path = os.path.join('./rhotheta', file) + os.remove(file_path) + tmp_list = [] + for dir_name in dirs: + if 'K.dat' in dir_name: + number=re.findall(r'\d+\.\d+',dir_name) + tmp_list.append(number[0]) + for temperature_name in tmp_list: + temperature_name = str(temperature_name) + extract_rho_theta('./{}K.dat'.format(temperature_name),dtheta=theta_interval,num_show=Btau_show, interval_line=Btau_interval,choose=Btau_choose,output_file='./{}K_Btau.dat'.format(temperature_name), output_dir='rhotheta') + diff --git a/examples/Cu/AMR-xy/AMR_rhoxx.gnu b/examples/Cu/AMR-xy/AMR_rhoxx.gnu new file mode 100644 index 00000000..717d6555 --- /dev/null +++ b/examples/Cu/AMR-xy/AMR_rhoxx.gnu @@ -0,0 +1,41 @@ +set encoding iso_8859_1 +set terminal pdfcairo enhanced color font "Arial,20" size 8, 6 +set output 'rhoxx.pdf' +set border lw 10 +set autoscale fix +set ylabel '{/Symbol r}_{xx}*{/Symbol t} ({/Symbol W}*m*s)' +set format y "%1.1e" +set xlabel '{/Symbol \161}' +set xrange [0:180] +#set yrange [1.2e-21:2.5e-21] +set xtics 30 +set key outside +#unset key +set palette defined (0 'red', 1 'green') +unset colorbox + +set lmargin at screen 0.25 # 左边距占页面宽度的10% +set rmargin at screen 0.80 # 右边距占页面宽度的90% +set bmargin at screen 0.2 # 下边距占页面高度的10% +set tmargin at screen 0.9 # 上边距占页面高度的90% + +set ylabel offset -5,0 +set xlabel offset 0,-1 +set key right vertical spacing 5 +set xtics font ",33" +set ytics font ",33" +set ylabel font ",40" +set xlabel font ",40" +set key font ",27" +set key spacing 1.2 +set key samplen 1.0 +set xtics 30 +set ytics 0.3e-21 + + +Bmin = 2.00 +Bmax = 10.00 +NumB = 6 +lw = 10 + +plot for [i=0:NumB-1] '90.0000K_Btau.dat' every :::i::i+1 u 1:2 w l lw lw title sprintf('B=%.0f T',2*i) diff --git a/examples/Cu/AMR-xy/AMR_rhozz.gnu b/examples/Cu/AMR-xy/AMR_rhozz.gnu new file mode 100644 index 00000000..6a5c4131 --- /dev/null +++ b/examples/Cu/AMR-xy/AMR_rhozz.gnu @@ -0,0 +1,41 @@ +set encoding iso_8859_1 +set terminal pdfcairo enhanced color font "Arial,20" size 8, 6 +set output 'rhozz.pdf' +set border lw 10 +set autoscale fix +set ylabel '{/Symbol r}_{zz}*{/Symbol t} ({/Symbol W}*m*s)' +set format y "%1.1e" +set xlabel '{/Symbol \161}' +set xrange [0:180] +#set yrange [1.2e-21:2.7e-21] +set xtics 30 +set key outside +#unset key +set palette defined (0 'red', 1 'green') +unset colorbox + +set lmargin at screen 0.25 # 左边距占页面宽度的10% +set rmargin at screen 0.80 # 右边距占页面宽度的90% +set bmargin at screen 0.2 # 下边距占页面高度的10% +set tmargin at screen 0.9 # 上边距占页面高度的90% + +set ylabel offset -5,0 +set xlabel offset 0,-1 +set key right vertical spacing 5 +set xtics font ",33" +set ytics font ",33" +set ylabel font ",40" +set xlabel font ",40" +set key font ",27" +set key spacing 1.2 +set key samplen 1.0 +set xtics 30 +set ytics 0.3e-21 + + +Bmin = 2.00 +Bmax = 10.00 +NumB = 6 +lw = 10 + +plot for [i=0:NumB-1] '90.0000K_Btau.dat' every :::i::i+1 u 1:10 w l lw lw title sprintf('B=%.0f T',2*i) diff --git a/examples/Cu/AMR-xy/xyplane.sh b/examples/Cu/AMR-xy/xyplane.sh new file mode 100755 index 00000000..a6156404 --- /dev/null +++ b/examples/Cu/AMR-xy/xyplane.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +# alpha is the angle between the magnetic field and the z' axis in the z'-b plane, where z' axis is +# perpendicular to a and b axis. + +for ((iphi=0; iphi<=12; iphi++)) +do + +theta=90 +phi=`echo "$iphi*15"|bc` +dir='Btheta'$theta'Bphi'$phi +echo $theta $phi $dir +mkdir $dir + +cat >$dir/wt.in <$dir/wt-theta.sh<\$dir/wt-theta.sh<5.4 +# Please open the data file to check the data: Berrycurvature_line.dat +set terminal pdf enhanced color font ",24" +set palette defined ( 0 "green", 5 "yellow", 10 "red" ) +set output 'Berrycurvature_line.pdf' +set style data linespoints +unset key +set pointsize 0.8 +#set xtics font ",24" +#set ytics font ",24" +#set ylabel font ",24" +set ylabel offset 0.5,0 +set border lw 2 +set xrange [0: 7.30156] +emin= -0.110000 +emax= 0.110000 +set ylabel "Energy (eV)" +set yrange [ emin : emax ] +set xtics ("M " 0.00000,"K' " 3.05921,"G " 4.75615,"K " 6.45309,"M " 7.30156) +set arrow from 3.05921, emin to 3.05921, emax nohead lw 2 +set arrow from 4.75615, emin to 4.75615, emax nohead lw 2 +set arrow from 6.45309, emin to 6.45309, emax nohead lw 2 +# please comment the following lines to plot the fatband +# uncomment the following lines to plot the fatband +plot 'Berrycurvature_line.dat' u 1:2:5 w lp lw 2 pt 7 ps 0.2 lc palette, 0 w l lw 2 dt 2 +# uncomment the following lines to plot the spin if necessary +#plot 'Berrycurvature_line.dat u 1:2 w lp lw 2 pt 7 ps 0.2, \ +#plot 'Berrycurvature_line.dat u 1:2:($3/6):($4/6) w vec diff --git a/examples/Haldane_model/bulkek_plane.gnu0 b/examples/Haldane_model/bulkek_plane.gnu0 new file mode 100644 index 00000000..0ed7d8e7 --- /dev/null +++ b/examples/Haldane_model/bulkek_plane.gnu0 @@ -0,0 +1,26 @@ +set encoding iso_8859_1 +#set terminal postscript enhanced color +#set output 'bulkek_plane.eps' +set terminal png truecolor enhanced size 1920, 1680 font ",36" +set output 'bulkek_plane.png' +set palette rgbformulae 33,13,10 +unset key +set pm3d +set origin 0.2, 0 +set size 0.8, 1 +set border lw 3 +#set xtics font ",24" +#set ytics font ",24" +set size ratio -1 +set ticslevel 0 +unset xtics +unset ytics +set view 80,60 +set xlabel "k_1" +set ylabel "k_2" +set zlabel "Energy (eV)" rotate by 90 +unset colorbox +set autoscale fix +set pm3d interpolate 4,4 +splot 'bulkek_plane.dat' u 4:5:7 w pm3d, \ + 'bulkek_plane.dat' u 4:5:8 w pm3d diff --git a/examples/Haldane_model/wt.in-BerryCurvature_kpath_sepband_calc b/examples/Haldane_model/wt.in-BerryCurvature_kpath_sepband_calc new file mode 100644 index 00000000..b1cb7d67 --- /dev/null +++ b/examples/Haldane_model/wt.in-BerryCurvature_kpath_sepband_calc @@ -0,0 +1,72 @@ +&TB_FILE +Hrfile = "Haldane_hr.dat" +/ + + +!> bulk band structure calculation flag +&CONTROL +BerryCurvature_kpath_sepband_calc = T ! calculate BC sum over 1~NumOccupied bands +/ + +&SYSTEM +NSLAB =60 +NumOccupied = 1 ! NumOccupied +SOC = 0 ! soc +E_FERMI = 0 ! e-fermi +/ + +&PARAMETERS +Eta_Arc = 0.01 ! infinite small value, like brodening +E_arc = 0.0 ! energy for calculate Fermi Arc +OmegaNum = 1000 ! omega number +OmegaMin = -5.0 ! energy interval +OmegaMax = 5.0 ! energy interval +Nk1 = 60 ! number k points +Nk2 = 60 ! number k points +NP = 1 ! number of principle layers +/ + +LATTICE +Angstrom +2.1377110 -1.2342080 0.0000000 +0.0000000 2.4684160 0.0000000 +0.0000000 0.0000000 10.000000 + +ATOM_POSITIONS +2 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +C 0.333333 0.666667 0.500000 +C 0.666667 0.333333 0.500000 + +PROJECTORS +1 1 ! number of projectors +C pz +C pz + + +SURFACE ! See doc for details + 0 0 1 + 1 0 0 + 0 1 0 + +KPATH_BULK ! k point path +4 ! number of k line only for bulk band + M 0.50000 0.00000 0.00000 K' -.33333 -.33333 0.00000 + K' -.33333 -.33333 0.00000 G 0.00000 0.00000 0.00000 + G 0.00000 0.00000 0.00000 K 0.33333 0.33333 0.00000 + K 0.33333 0.33333 0.00000 M 0.50000 0.00000 0.00000 + +KPATH_SLAB +1 ! numker of k line for 2D case +0 0.0 0.0 1 0. 1.0 ! k path for 2D case + +KPLANE_SLAB +-0.5 -0.5 ! Original point for 2D k plane + 1.0 0.0 ! The first vector to define 2D k plane + 0.0 1.0 ! The second vector to define 2D k plane for arc plots + +KPLANE_BULK + 0.00 0.00 0.00 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + diff --git a/examples/Haldane_model/wt.in-ahe b/examples/Haldane_model/wt.in-ahe new file mode 100644 index 00000000..28e16b72 --- /dev/null +++ b/examples/Haldane_model/wt.in-ahe @@ -0,0 +1,55 @@ +&TB_FILE +Hrfile = "Haldane_hr.dat" +/ + + +!> bulk band structure calculation flag +&CONTROL +BulkBand_calc = T ! calculate band structure in kpath mode +AHC_calc = T +/ + +&SYSTEM +SOC = 0 ! soc +E_FERMI = 0 ! e-fermi +/ + +&PARAMETERS +Fermi_broadening = 0.01 ! infinite small value, like brodening +OmegaNum = 1000 ! omega number +OmegaMin = -5.0 ! energy interval +OmegaMax = 5.0 ! energy interval +Nk1 = 60 ! number k points +Nk2 = 60 ! number k points +Nk3 = 1 ! number k points +/ + +LATTICE +Angstrom +2.1377110 -1.2342080 0.0000000 +0.0000000 2.4684160 0.0000000 +0.0000000 0.0000000 10.000000 + +ATOM_POSITIONS +2 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +C 0.333333 0.666667 0.500000 +C 0.666667 0.333333 0.500000 + +PROJECTORS +1 1 ! number of projectors +C pz +C pz + + +KPATH_BULK ! k point path +3 ! number of k line only for bulk band + M 0.50000 0.00000 0.00000 K' -.33333 -.33333 0.00000 + K' -.33333 -.33333 0.00000 G 0.00000 0.00000 0.00000 + G 0.00000 0.00000 0.00000 K 0.33333 0.33333 0.00000 + +KCUBE_BULK +0 0 0 +1 0 0 +0 1 0 +0 0 1 diff --git a/examples/Half-BHZ-model/Half_BHZ_hr_gen-case1.py b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case1.py new file mode 100644 index 00000000..c5e5404e --- /dev/null +++ b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case1.py @@ -0,0 +1,129 @@ +#!/bin/python3 +import numpy as np +import cmath + +# The Hamiltonian is +# ( M-Bk^2 Delta_0+A*k+ ) +# ( Delta_0+A*k_ -M+Bk^2 ) +# where k^2=kx^2+ky^2 + +# phase II, trivial insulator +# A=0, M*B<0 + +# phase III, trivial insulator with band inversion +# A=0, M*B>0 + +# phase I, trivial insulator +# Delta_0=0, M*B<0 + +# phase IV, Chern insulator with band inversion +# Delta_0=0, M*B>0 + + +# from the kp to TB we use sustitution +# k->sin(k) +# k^2->2(1-cos(k)) + +# Constants +dp = np.float64 +pi = np.arctan(1) * 4 +zi = 1j + +# Lattice constants +M = 2.0 +B =-1.0 +A = 0.0 +Delta_0= 1.0 + + +# Number of Wannier functions and R points +num_wann = 4 +nrpts = 7 + +# R coordinates +Irvec = np.zeros((3, nrpts), dtype=int) + +# Hamiltonian m,n are band indexes +HmnR = np.zeros((num_wann, num_wann, nrpts), dtype=complex) + +# No of degeneracy of R point +ndegen = np.ones(nrpts, dtype=int) + +# Initialization of matrices +Irvec[:, :] = 0 +HmnR[:, :, :] = 0.0 + +# 0 0 0 +ir = 0 +Irvec[:, ir] = [0, 0, 0] +HmnR[0, 0, ir] = M - 4 * B +HmnR[1, 1, ir] = -M + 4 * B +HmnR[2, 2, ir] = M - 4 * B +HmnR[3, 3, ir] = -M + 4 * B +HmnR[0, 1, ir] = Delta_0 +HmnR[1, 0, ir] = Delta_0 +HmnR[2, 3, ir] = Delta_0 +HmnR[3, 2, ir] = Delta_0 + +# 1 0 +ir = 1 +Irvec[:, ir] = [1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir] =-0.5*zi*A +HmnR[1, 0, ir] =-0.5*zi*A +HmnR[2, 3, ir] = 0.5*zi*A +HmnR[3, 2, ir] = 0.5*zi*A + +# 0 1 +ir = 2 +Irvec[:, ir] = [0, 1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= -A/2 +HmnR[1, 0, ir]= A/2 +HmnR[2, 3, ir]= -A/2 +HmnR[3, 2, ir]= A/2 + + +# -1 0 +ir = 3 +Irvec[:, ir] = [-1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= 0.5*zi*A +HmnR[1, 0, ir]= 0.5*zi*A +HmnR[2, 3, ir]=-0.5*zi*A +HmnR[3, 2, ir]=-0.5*zi*A + + +# 0 -1 +ir = 4 +Irvec[:, ir] = [0, -1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= A/2 +HmnR[1, 0, ir]= -A/2 +HmnR[2, 3, ir]= A/2 +HmnR[3, 2, ir]= -A/2 + +nrpts= ir+1 +# Writing to a file +with open('HalfBHZ_hr.dat', 'w') as file: + file.write('2-band half of BHZ model\n') + file.write('2\n') + file.write(f'{nrpts}\n') + file.write(' '.join(f'{x:5d}' for x in ndegen) + '\n') + for ir in range(nrpts): + for i in range(2): + for j in range(2): + file.write(f"{Irvec[0, ir]:5d}{Irvec[1, ir]:5d}{Irvec[2, ir]:5d}{i+1:5d}{j+1:5d} {HmnR[i, j, ir].real:16.8f} {HmnR[i, j, ir].imag:16.8f}\n") + diff --git a/examples/Half-BHZ-model/Half_BHZ_hr_gen-case2.py b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case2.py new file mode 100644 index 00000000..13ff2afc --- /dev/null +++ b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case2.py @@ -0,0 +1,129 @@ +#!/bin/python3 +import numpy as np +import cmath + +# The Hamiltonian is +# ( M-Bk^2 Delta_0+A*k+ ) +# ( Delta_0+A*k_ -M+Bk^2 ) +# where k^2=kx^2+ky^2 + +# phase II, trivial insulator +# A=0, M*B<0 + +# phase III, trivial insulator with band inversion +# A=0, M*B>0 + +# phase I, trivial insulator +# Delta_0=0, M*B<0 + +# phase IV, Chern insulator with band inversion +# Delta_0=0, M*B>0 + + +# from the kp to TB we use sustitution +# k->sin(k) +# k^2->2(1-cos(k)) + +# Constants +dp = np.float64 +pi = np.arctan(1) * 4 +zi = 1j + +# Lattice constants +M = 2.0 +B = 1.0 +A = 0.0 +Delta_0= 1.0 + + +# Number of Wannier functions and R points +num_wann = 4 +nrpts = 7 + +# R coordinates +Irvec = np.zeros((3, nrpts), dtype=int) + +# Hamiltonian m,n are band indexes +HmnR = np.zeros((num_wann, num_wann, nrpts), dtype=complex) + +# No of degeneracy of R point +ndegen = np.ones(nrpts, dtype=int) + +# Initialization of matrices +Irvec[:, :] = 0 +HmnR[:, :, :] = 0.0 + +# 0 0 0 +ir = 0 +Irvec[:, ir] = [0, 0, 0] +HmnR[0, 0, ir] = M - 4 * B +HmnR[1, 1, ir] = -M + 4 * B +HmnR[2, 2, ir] = M - 4 * B +HmnR[3, 3, ir] = -M + 4 * B +HmnR[0, 1, ir] = Delta_0 +HmnR[1, 0, ir] = Delta_0 +HmnR[2, 3, ir] = Delta_0 +HmnR[3, 2, ir] = Delta_0 + +# 1 0 +ir = 1 +Irvec[:, ir] = [1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir] =-0.5*zi*A +HmnR[1, 0, ir] =-0.5*zi*A +HmnR[2, 3, ir] = 0.5*zi*A +HmnR[3, 2, ir] = 0.5*zi*A + +# 0 1 +ir = 2 +Irvec[:, ir] = [0, 1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= -A/2 +HmnR[1, 0, ir]= A/2 +HmnR[2, 3, ir]= -A/2 +HmnR[3, 2, ir]= A/2 + + +# -1 0 +ir = 3 +Irvec[:, ir] = [-1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= 0.5*zi*A +HmnR[1, 0, ir]= 0.5*zi*A +HmnR[2, 3, ir]=-0.5*zi*A +HmnR[3, 2, ir]=-0.5*zi*A + + +# 0 -1 +ir = 4 +Irvec[:, ir] = [0, -1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= A/2 +HmnR[1, 0, ir]= -A/2 +HmnR[2, 3, ir]= A/2 +HmnR[3, 2, ir]= -A/2 + +nrpts= ir+1 +# Writing to a file +with open('HalfBHZ_hr.dat', 'w') as file: + file.write('2-band half of BHZ model\n') + file.write('2\n') + file.write(f'{nrpts}\n') + file.write(' '.join(f'{x:5d}' for x in ndegen) + '\n') + for ir in range(nrpts): + for i in range(2): + for j in range(2): + file.write(f"{Irvec[0, ir]:5d}{Irvec[1, ir]:5d}{Irvec[2, ir]:5d}{i+1:5d}{j+1:5d} {HmnR[i, j, ir].real:16.8f} {HmnR[i, j, ir].imag:16.8f}\n") + diff --git a/examples/Half-BHZ-model/Half_BHZ_hr_gen-case3.py b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case3.py new file mode 100644 index 00000000..b544f547 --- /dev/null +++ b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case3.py @@ -0,0 +1,129 @@ +#!/bin/python3 +import numpy as np +import cmath + +# The Hamiltonian is +# ( M-Bk^2 Delta_0+A*k+ ) +# ( Delta_0+A*k_ -M+Bk^2 ) +# where k^2=kx^2+ky^2 + +# phase II, trivial insulator +# A=0, M*B<0 + +# phase III, trivial insulator with band inversion +# A=0, M*B>0 + +# phase I, trivial insulator +# Delta_0=0, M*B<0 + +# phase IV, Chern insulator with band inversion +# Delta_0=0, M*B>0 + + +# from the kp to TB we use sustitution +# k->sin(k) +# k^2->2(1-cos(k)) + +# Constants +dp = np.float64 +pi = np.arctan(1) * 4 +zi = 1j + +# Lattice constants +M = 2.0 +B =-1.0 +A = 1.0 +Delta_0= 0.0 + + +# Number of Wannier functions and R points +num_wann = 4 +nrpts = 7 + +# R coordinates +Irvec = np.zeros((3, nrpts), dtype=int) + +# Hamiltonian m,n are band indexes +HmnR = np.zeros((num_wann, num_wann, nrpts), dtype=complex) + +# No of degeneracy of R point +ndegen = np.ones(nrpts, dtype=int) + +# Initialization of matrices +Irvec[:, :] = 0 +HmnR[:, :, :] = 0.0 + +# 0 0 0 +ir = 0 +Irvec[:, ir] = [0, 0, 0] +HmnR[0, 0, ir] = M - 4 * B +HmnR[1, 1, ir] = -M + 4 * B +HmnR[2, 2, ir] = M - 4 * B +HmnR[3, 3, ir] = -M + 4 * B +HmnR[0, 1, ir] = Delta_0 +HmnR[1, 0, ir] = Delta_0 +HmnR[2, 3, ir] = Delta_0 +HmnR[3, 2, ir] = Delta_0 + +# 1 0 +ir = 1 +Irvec[:, ir] = [1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir] =-0.5*zi*A +HmnR[1, 0, ir] =-0.5*zi*A +HmnR[2, 3, ir] = 0.5*zi*A +HmnR[3, 2, ir] = 0.5*zi*A + +# 0 1 +ir = 2 +Irvec[:, ir] = [0, 1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= -A/2 +HmnR[1, 0, ir]= A/2 +HmnR[2, 3, ir]= -A/2 +HmnR[3, 2, ir]= A/2 + + +# -1 0 +ir = 3 +Irvec[:, ir] = [-1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= 0.5*zi*A +HmnR[1, 0, ir]= 0.5*zi*A +HmnR[2, 3, ir]=-0.5*zi*A +HmnR[3, 2, ir]=-0.5*zi*A + + +# 0 -1 +ir = 4 +Irvec[:, ir] = [0, -1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= A/2 +HmnR[1, 0, ir]= -A/2 +HmnR[2, 3, ir]= A/2 +HmnR[3, 2, ir]= -A/2 + +nrpts= ir+1 +# Writing to a file +with open('HalfBHZ_hr.dat', 'w') as file: + file.write('2-band half of BHZ model\n') + file.write('2\n') + file.write(f'{nrpts}\n') + file.write(' '.join(f'{x:5d}' for x in ndegen) + '\n') + for ir in range(nrpts): + for i in range(2): + for j in range(2): + file.write(f"{Irvec[0, ir]:5d}{Irvec[1, ir]:5d}{Irvec[2, ir]:5d}{i+1:5d}{j+1:5d} {HmnR[i, j, ir].real:16.8f} {HmnR[i, j, ir].imag:16.8f}\n") + diff --git a/examples/Half-BHZ-model/Half_BHZ_hr_gen-case4.py b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case4.py new file mode 100644 index 00000000..661cec8a --- /dev/null +++ b/examples/Half-BHZ-model/Half_BHZ_hr_gen-case4.py @@ -0,0 +1,129 @@ +#!/bin/python3 +import numpy as np +import cmath + +# The Hamiltonian is +# ( M-Bk^2 Delta_0+A*k+ ) +# ( Delta_0+A*k_ -M+Bk^2 ) +# where k^2=kx^2+ky^2 + +# phase II, trivial insulator +# A=0, M*B<0 + +# phase III, trivial insulator with band inversion +# A=0, M*B>0 + +# phase I, trivial insulator +# Delta_0=0, M*B<0 + +# phase IV, Chern insulator with band inversion +# Delta_0=0, M*B>0 + + +# from the kp to TB we use sustitution +# k->sin(k) +# k^2->2(1-cos(k)) + +# Constants +dp = np.float64 +pi = np.arctan(1) * 4 +zi = 1j + +# Lattice constants +M = 2.0 +B = 1.0 +A = 1.0 +Delta_0= 0.0 + + +# Number of Wannier functions and R points +num_wann = 4 +nrpts = 7 + +# R coordinates +Irvec = np.zeros((3, nrpts), dtype=int) + +# Hamiltonian m,n are band indexes +HmnR = np.zeros((num_wann, num_wann, nrpts), dtype=complex) + +# No of degeneracy of R point +ndegen = np.ones(nrpts, dtype=int) + +# Initialization of matrices +Irvec[:, :] = 0 +HmnR[:, :, :] = 0.0 + +# 0 0 0 +ir = 0 +Irvec[:, ir] = [0, 0, 0] +HmnR[0, 0, ir] = M - 4 * B +HmnR[1, 1, ir] = -M + 4 * B +HmnR[2, 2, ir] = M - 4 * B +HmnR[3, 3, ir] = -M + 4 * B +HmnR[0, 1, ir] = Delta_0 +HmnR[1, 0, ir] = Delta_0 +HmnR[2, 3, ir] = Delta_0 +HmnR[3, 2, ir] = Delta_0 + +# 1 0 +ir = 1 +Irvec[:, ir] = [1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir] =-0.5*zi*A +HmnR[1, 0, ir] =-0.5*zi*A +HmnR[2, 3, ir] = 0.5*zi*A +HmnR[3, 2, ir] = 0.5*zi*A + +# 0 1 +ir = 2 +Irvec[:, ir] = [0, 1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= -A/2 +HmnR[1, 0, ir]= A/2 +HmnR[2, 3, ir]= -A/2 +HmnR[3, 2, ir]= A/2 + + +# -1 0 +ir = 3 +Irvec[:, ir] = [-1, 0, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= 0.5*zi*A +HmnR[1, 0, ir]= 0.5*zi*A +HmnR[2, 3, ir]=-0.5*zi*A +HmnR[3, 2, ir]=-0.5*zi*A + + +# 0 -1 +ir = 4 +Irvec[:, ir] = [0, -1, 0] +HmnR[0, 0, ir] = B +HmnR[1, 1, ir] = -B +HmnR[2, 2, ir] = B +HmnR[3, 3, ir] = -B +HmnR[0, 1, ir]= A/2 +HmnR[1, 0, ir]= -A/2 +HmnR[2, 3, ir]= A/2 +HmnR[3, 2, ir]= -A/2 + +nrpts= ir+1 +# Writing to a file +with open('HalfBHZ_hr.dat', 'w') as file: + file.write('2-band half of BHZ model\n') + file.write('2\n') + file.write(f'{nrpts}\n') + file.write(' '.join(f'{x:5d}' for x in ndegen) + '\n') + for ir in range(nrpts): + for i in range(2): + for j in range(2): + file.write(f"{Irvec[0, ir]:5d}{Irvec[1, ir]:5d}{Irvec[2, ir]:5d}{i+1:5d}{j+1:5d} {HmnR[i, j, ir].real:16.8f} {HmnR[i, j, ir].imag:16.8f}\n") + diff --git a/examples/Half-BHZ-model/readme.txt b/examples/Half-BHZ-model/readme.txt new file mode 100644 index 00000000..ed6b2c3a --- /dev/null +++ b/examples/Half-BHZ-model/readme.txt @@ -0,0 +1,21 @@ +# An example to show how does the band inversion and hybridization affect the band topology +# we prepared four python scripts and one wt.in file to calculate the band structure, slab bands +# AHC, Wilson loop, Berry curvature + +# to run it, first, you need to generate the wannier TB model HalfBHZ_hr.dat +python3 Half_BHZ_hr_gen-case1.py + +# 2nd run wanniertools wt.x +wt.x + +# 3rd get the plots + +gnuplot bulkek.gnu +gnuplot slabek.gnu +gnuplot wcc.gnu +gnuplot sigma_ahc.gnu +gnuplot Berrycurvature.gnu + +# use ll -tr to check the latest files +ll -tr + diff --git a/examples/Half-BHZ-model/wt.in b/examples/Half-BHZ-model/wt.in new file mode 100644 index 00000000..ae25fa3f --- /dev/null +++ b/examples/Half-BHZ-model/wt.in @@ -0,0 +1,81 @@ +&TB_FILE +Hrfile = "HalfBHZ_hr.dat" +/ + +!> bulk band structure calculation flag +&CONTROL +AHC_calc = T +BulkBand_calc = T +BulkBand_plane_calc = F +SlabBand_calc = T +FindNodes_calc = F +SlabSS_calc = F +SlabArc_calc = F +Wanniercenter_calc = T +LandauLevel_B_calc = F +LandauLevel_B_dos_calc = F +BerryCurvature_calc = T +/ + +&SYSTEM +NSLAB =40 +NumOccupied = 1 ! NumOccupied +SOC = 0 ! soc +E_FERMI = 0 ! e-fermi +/ + +&PARAMETERS +Fermi_broadening = 0.01 ! infinite small value, like brodening +iso_energy = 0.0 ! energy for calculate Fermi Arc +OmegaNum = 400 ! omega number +OmegaMin = -4.0 ! energy interval +OmegaMax = 4.0 ! energy interval +Nk1 = 60 ! number k points +Nk2 = 60 ! number k points +Nk3 = 1 ! number k points +NP = 2 ! number of principle layers +/ + +LATTICE +Angstrom +3 0 0 +0 3 0 +0 0 10 + +ATOM_POSITIONS +1 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate +C 0 0 0 + +PROJECTORS +2 ! number of projectors +C s pz + + +SURFACE ! See doc for details + 0 0 1 + 1 0 0 + 0 1 0 + +KPATH_BULK ! k point path +2 ! number of k line only for bulk band + X 0.50000 0.00000 0.00000 G 0.00000 0.00000 0.00000 + G 0.00000 0.00000 0.00000 Y 0.00000 0.50000 0.00000 + +KPATH_SLAB +2 ! numker of k line for 2D case +-X 0. -0.5 G 0.0 0.0 ! k path for 2D case +G 0.0 0.0 X 0.0 0.5 + +KPLANE_BULK + 0.00 0.00 0.00 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + + +KCUBE_BULK +-0.50 -0.50 -0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + diff --git a/examples/MoS2-1Tp/wt.in b/examples/MoS2-1Tp/wt.in index fa5031e1..e5725823 100644 --- a/examples/MoS2-1Tp/wt.in +++ b/examples/MoS2-1Tp/wt.in @@ -6,15 +6,15 @@ Package = 'VASP' !> bulk band structure calculation flag &CONTROL -BulkBand_calc = T +BulkBand_calc = F DOS_calc = F SlabBand_calc = F SlabSS_calc = T -wanniercenter_calc = T +wanniercenter_calc = F / &SYSTEM -NSLAB = 20 +NSLAB = 10 NumOccupied = 28 ! NumOccupied SOC = 1 ! soc E_FERMI = -3.60 ! e-fermi @@ -56,8 +56,8 @@ S pz px py SURFACE ! MoS2 conventional (010) surface 0 1 0 - 0 0 1 1 0 0 + 0 0 1 KPATH_BULK ! k point path 4 ! number of k line only for bulk band diff --git a/examples/Pt/wt.in b/examples/Pt/wt.in index c954c7f8..60283ba6 100644 --- a/examples/Pt/wt.in +++ b/examples/Pt/wt.in @@ -1,6 +1,6 @@ &TB_FILE -!Hrfile = 'wannier90_hr.dat' -Hrfile = 'wannier90_hr.dat_nsymm48' +Hrfile = 'wannier90_hr.dat' +!Hrfile = 'wannier90_hr.dat_nsymm48' / LATTICE diff --git a/examples/TBG-2.44degree/TBG_hr.dat.tar.gz b/examples/TBG-2.44degree/TBG_hr.dat.tar.gz new file mode 100644 index 00000000..7075bb89 Binary files /dev/null and b/examples/TBG-2.44degree/TBG_hr.dat.tar.gz differ diff --git a/examples/TBG-2.44degree/readme.txt b/examples/TBG-2.44degree/readme.txt new file mode 100644 index 00000000..38ac32dd --- /dev/null +++ b/examples/TBG-2.44degree/readme.txt @@ -0,0 +1,9 @@ +# this is an example to calculate the 4 flat bands and their Wilson loop + +cp wt.in-wilsonloop-flatbands wt.in +tar xzvf TBG_hr.dat.tar.gz + +mpiexec -np 32 wt.x & + +gnuplot wcc.gnu +gnuplot bulkek.gnu diff --git a/examples/TBG-2.44degree/wcc.pdf b/examples/TBG-2.44degree/wcc.pdf new file mode 100644 index 00000000..b89bb677 Binary files /dev/null and b/examples/TBG-2.44degree/wcc.pdf differ diff --git a/examples/TBG-2.44degree/wt.in-wilsonloop-flatbands b/examples/TBG-2.44degree/wt.in-wilsonloop-flatbands new file mode 100644 index 00000000..b2711786 --- /dev/null +++ b/examples/TBG-2.44degree/wt.in-wilsonloop-flatbands @@ -0,0 +1,4441 @@ + &TB_FILE + Hrfile = 'TBG_hr.dat' + Is_HrFile=T + Is_Sparse=T + / + + !> Task control flag + &CONTROL + BulkBand_calc = T + Wilsonloop_calc = T + Landaulevel_B_calc = F + BulkBand_plane_calc = F + LandauLevel_wavefunction_calc = F + LandauLevel_B_dos_calc= F + / + + &SYSTEM + NSLAB =10 + NumOccupied =4 ! NumOccupied + SOC = 0 ! without spin orbital in hr.dat + E_FERMI = 0.00 ! e-fermi + / + + &PARAMETERS + Fermi_broadening = 0.001 ! infinite small value, like brodening + iso_energy = 0.00 ! a iso-energy for contour plots like Fermi arc + OmegaNum = 4 ! omega number + OmegaMin = -0.5 ! energy interval + OmegaMax = 0.5 ! energy interval + Nk1 = 21 ! number k points + Nk2 = 21 ! number k points + Nk3 = 2 ! number k points + NumLCZVecs = 60 ! usually NumLCZVecs should be 4 times larger than NumSelectedEigenVals + NumSelectedEigenVals = 4 +!arpack_solver='zndrv1' ! zndrv1 is faster than zndrv2 + / + + + SURFACE + 1 0 0 + 0 1 0 + + KPLANE_BULK ! try to calculate valley Chern number + 0 0 0 + 1 0 0 + 0 1 0 + + KPATH_BULK + 3 ! number of k-path + G 0.00000 0.00000 0.00000 K 0.33333 0.33333 0.00000 + K 0.33333 0.33333 0.00000 M 0.00000 0.50000 0.00000 + M 0.00000 0.50000 0.00000 G 0.00000 0.00000 0.00000 + + LATTICE + Angstrom + 57.442128 0.000000 0.000000 + -28.721064 49.746342 0.000000 + 0.000000 0.000000 23.360000 + + ATOM_POSITIONS + 2188 + Direct + C 0.682881 0.650420 0.426066 + C 0.707234 0.675447 0.426285 + C 0.732253 0.676136 0.426151 + C 0.756621 0.701151 0.426426 + C 0.781644 0.701847 0.426324 + C 0.806027 0.726843 0.426635 + C 0.831055 0.727541 0.426558 + C 0.855457 0.752516 0.426881 + C 0.880486 0.753209 0.426822 + C 0.904909 0.778160 0.427130 + C 0.929936 0.778843 0.427082 + C 0.954378 0.803772 0.427354 + C 0.979403 0.804441 0.427305 + C 0.003861 0.829349 0.427527 + C 0.028882 0.830005 0.427468 + C 0.053349 0.854895 0.427629 + C 0.078371 0.855542 0.427555 + C 0.102845 0.880421 0.427647 + C 0.127862 0.881060 0.427554 + C 0.152340 0.905932 0.427570 + C 0.177358 0.906573 0.427457 + C 0.201832 0.931447 0.427390 + C 0.226855 0.932095 0.427259 + C 0.251319 0.956977 0.427103 + C 0.276345 0.957636 0.426957 + C 0.300795 0.982533 0.426711 + C 0.325826 0.983208 0.426557 + C 0.350257 0.008127 0.426233 + C 0.375292 0.008819 0.426080 + C 0.399701 0.033762 0.425702 + C 0.424740 0.034468 0.425567 + C 0.449124 0.059438 0.425169 + C 0.474166 0.060155 0.425070 + C 0.498530 0.085148 0.424690 + C 0.523573 0.085872 0.424642 + C 0.547918 0.110884 0.424308 + C 0.572961 0.111611 0.424319 + C 0.597294 0.136636 0.424048 + C 0.622334 0.137362 0.424122 + C 0.646658 0.162396 0.423919 + C 0.671692 0.163114 0.424053 + C 0.696010 0.188155 0.423922 + C 0.721037 0.188858 0.424116 + C 0.745353 0.213901 0.424056 + C 0.770368 0.214585 0.424308 + C 0.794683 0.239628 0.424319 + C 0.819685 0.240285 0.424625 + C 0.844002 0.265324 0.424702 + C 0.868987 0.265949 0.425050 + C 0.893307 0.290980 0.425178 + C 0.918272 0.291563 0.425547 + C 0.942598 0.316584 0.425706 + C 0.967539 0.317119 0.426066 + C 0.991874 0.342130 0.426233 + C 0.016791 0.342618 0.426557 + C 0.041135 0.367617 0.426708 + C 0.066034 0.368065 0.426978 + C 0.090387 0.393054 0.427096 + C 0.115272 0.393474 0.427304 + C 0.139632 0.418455 0.427379 + C 0.164510 0.418859 0.427526 + C 0.188874 0.443838 0.427555 + C 0.213753 0.444242 0.427647 + C 0.238118 0.469222 0.427631 + C 0.263002 0.469637 0.427673 + C 0.287364 0.494623 0.427622 + C 0.312257 0.495058 0.427617 + C 0.336615 0.520054 0.427542 + C 0.361521 0.520517 0.427494 + C 0.385873 0.545526 0.427413 + C 0.410795 0.546022 0.427325 + C 0.435142 0.571041 0.427253 + C 0.460082 0.571576 0.427130 + C 0.484426 0.596603 0.427082 + C 0.509383 0.597174 0.426931 + C 0.533727 0.622207 0.426917 + C 0.558702 0.622812 0.426751 + C 0.583048 0.647849 0.426783 + C 0.706745 0.699875 0.426583 + C 0.731114 0.724898 0.426797 + C 0.756126 0.725575 0.426691 + C 0.780507 0.750582 0.426947 + C 0.805523 0.751263 0.426859 + C 0.829921 0.776250 0.427133 + C 0.854939 0.776929 0.427055 + C 0.879356 0.801894 0.427325 + C 0.904373 0.802566 0.427253 + C 0.928808 0.827508 0.427500 + C 0.953823 0.828167 0.427429 + C 0.978272 0.853090 0.427640 + C 0.003286 0.853735 0.427563 + C 0.027746 0.878639 0.427727 + C 0.052756 0.879271 0.427636 + C 0.077222 0.904163 0.427744 + C 0.102229 0.904784 0.427631 + C 0.126699 0.929668 0.427673 + C 0.151707 0.930287 0.427534 + C 0.176174 0.955170 0.427498 + C 0.201184 0.955795 0.427330 + C 0.225643 0.980681 0.427206 + C 0.250658 0.981318 0.427012 + C 0.275103 0.006216 0.426797 + C 0.300125 0.006870 0.426583 + C 0.324552 0.031788 0.426285 + C 0.349580 0.032462 0.426066 + C 0.373986 0.057402 0.425706 + C 0.399020 0.058096 0.425501 + C 0.423404 0.083062 0.425115 + C 0.448442 0.083770 0.424944 + C 0.472804 0.108760 0.424569 + C 0.497847 0.109480 0.424449 + C 0.522192 0.134488 0.424116 + C 0.547235 0.135215 0.424056 + C 0.571567 0.160238 0.423782 + C 0.596609 0.160968 0.423787 + C 0.620931 0.186000 0.423579 + C 0.645972 0.186728 0.423650 + C 0.670288 0.211766 0.423512 + C 0.695323 0.212486 0.423648 + C 0.719635 0.237529 0.423582 + C 0.744663 0.238235 0.423782 + C 0.768975 0.263276 0.423787 + C 0.793991 0.263961 0.424048 + C 0.818305 0.289000 0.424122 + C 0.843308 0.289659 0.424440 + C 0.867626 0.314692 0.424573 + C 0.892614 0.315318 0.424937 + C 0.916939 0.340343 0.425115 + C 0.941905 0.340926 0.425501 + C 0.966238 0.365938 0.425702 + C 0.991181 0.366475 0.426080 + C 0.015524 0.391474 0.426276 + C 0.040447 0.391964 0.426618 + C 0.064802 0.416953 0.426783 + C 0.089708 0.417410 0.427068 + C 0.114072 0.442386 0.427186 + C 0.138967 0.442818 0.427407 + C 0.163338 0.467789 0.427468 + C 0.188229 0.468211 0.427629 + C 0.212604 0.493182 0.427636 + C 0.237497 0.493608 0.427744 + C 0.261872 0.518583 0.427705 + C 0.286770 0.519021 0.427768 + C 0.311141 0.544004 0.427697 + C 0.336049 0.544464 0.427722 + C 0.360416 0.569459 0.427637 + C 0.385336 0.569947 0.427627 + C 0.409698 0.594954 0.427542 + C 0.434633 0.595475 0.427500 + C 0.458990 0.620492 0.427429 + C 0.483940 0.621045 0.427354 + C 0.508296 0.646070 0.427305 + C 0.533260 0.646655 0.427203 + C 0.557614 0.671686 0.427186 + C 0.582592 0.672299 0.427068 + C 0.606948 0.697334 0.427096 + C 0.730660 0.749342 0.427012 + C 0.755038 0.774358 0.427206 + C 0.780043 0.775022 0.427125 + C 0.804435 0.800021 0.427347 + C 0.829443 0.800684 0.427268 + C 0.853851 0.825663 0.427494 + C 0.878857 0.826318 0.427413 + C 0.903282 0.851279 0.427627 + C 0.928287 0.851924 0.427542 + C 0.952725 0.876862 0.427733 + C 0.977728 0.877494 0.427644 + C 0.002175 0.902416 0.427803 + C 0.027173 0.903029 0.427705 + C 0.051629 0.927938 0.427822 + C 0.076624 0.928539 0.427705 + C 0.101083 0.953437 0.427768 + C 0.126074 0.954030 0.427622 + C 0.150533 0.978924 0.427617 + C 0.175527 0.979519 0.427434 + C 0.199979 0.004415 0.427347 + C 0.224978 0.005022 0.427125 + C 0.249420 0.029925 0.426947 + C 0.274425 0.030550 0.426691 + C 0.298849 0.055469 0.426426 + C 0.323864 0.056117 0.426151 + C 0.348268 0.081057 0.425817 + C 0.373291 0.081729 0.425547 + C 0.397674 0.106693 0.425178 + C 0.422704 0.107386 0.424937 + C 0.447065 0.132373 0.424573 + C 0.472103 0.133083 0.424381 + C 0.496447 0.158088 0.424053 + C 0.521488 0.158810 0.423922 + C 0.545819 0.183830 0.423648 + C 0.570862 0.184559 0.423582 + C 0.595184 0.209589 0.423372 + C 0.620225 0.210321 0.423373 + C 0.644541 0.235360 0.423231 + C 0.669580 0.236088 0.423302 + C 0.693892 0.261131 0.423231 + C 0.718927 0.261850 0.423372 + C 0.743238 0.286893 0.423373 + C 0.768265 0.287599 0.423579 + C 0.792577 0.312638 0.423650 + C 0.817596 0.313326 0.423919 + C 0.841912 0.338359 0.424053 + C 0.866918 0.339020 0.424381 + C 0.891241 0.364045 0.424569 + C 0.916229 0.364672 0.424944 + C 0.940563 0.389687 0.425169 + C 0.965532 0.390272 0.425567 + C 0.989876 0.415273 0.425803 + C 0.014824 0.415813 0.426190 + C 0.039181 0.440800 0.426405 + C 0.064110 0.441299 0.426751 + C 0.088480 0.466273 0.426917 + C 0.113395 0.466740 0.427203 + C 0.137774 0.491704 0.427305 + C 0.162682 0.492155 0.427527 + C 0.187068 0.517115 0.427563 + C 0.211974 0.517562 0.427727 + C 0.236362 0.542522 0.427705 + C 0.261270 0.542975 0.427822 + C 0.285658 0.567943 0.427758 + C 0.310574 0.568414 0.427839 + C 0.334957 0.593392 0.427752 + C 0.359881 0.593883 0.427803 + C 0.384259 0.618874 0.427709 + C 0.409196 0.619392 0.427733 + C 0.433567 0.644393 0.427644 + C 0.458516 0.644940 0.427640 + C 0.482884 0.669953 0.427563 + C 0.507845 0.670528 0.427527 + C 0.532210 0.695549 0.427468 + C 0.557182 0.696148 0.427407 + C 0.581545 0.721177 0.427379 + C 0.606527 0.721798 0.427304 + C 0.630890 0.746831 0.427322 + C 0.754611 0.798817 0.427330 + C 0.778996 0.823827 0.427498 + C 0.803992 0.824473 0.427434 + C 0.828390 0.849467 0.427617 + C 0.853387 0.850107 0.427542 + C 0.877798 0.875081 0.427722 + C 0.902793 0.875711 0.427637 + C 0.927216 0.900669 0.427803 + C 0.952207 0.901282 0.427709 + C 0.976640 0.926223 0.427856 + C 0.001626 0.926818 0.427754 + C 0.026069 0.951746 0.427874 + C 0.051048 0.952325 0.427758 + C 0.075494 0.977240 0.427839 + C 0.100472 0.977809 0.427697 + C 0.124918 0.002716 0.427722 + C 0.149894 0.003281 0.427542 + C 0.174337 0.028188 0.427494 + C 0.199317 0.028760 0.427268 + C 0.223751 0.053672 0.427133 + C 0.248737 0.054260 0.426859 + C 0.273156 0.079184 0.426635 + C 0.298153 0.079797 0.426324 + C 0.322554 0.104739 0.426024 + C 0.347562 0.105380 0.425700 + C 0.371943 0.130344 0.425356 + C 0.396962 0.131013 0.425050 + C 0.421322 0.155998 0.424702 + C 0.446351 0.156691 0.424440 + C 0.470696 0.181695 0.424122 + C 0.495730 0.182405 0.423919 + C 0.520061 0.207422 0.423650 + C 0.545101 0.208146 0.423512 + C 0.569422 0.233175 0.423302 + C 0.594464 0.233905 0.423231 + C 0.618777 0.258942 0.423086 + C 0.643820 0.259673 0.423086 + C 0.668130 0.284714 0.423012 + C 0.693170 0.285444 0.423086 + C 0.717479 0.310487 0.423086 + C 0.742514 0.311207 0.423231 + C 0.766826 0.336248 0.423302 + C 0.791855 0.336955 0.423512 + C 0.816169 0.361988 0.423648 + C 0.841189 0.362678 0.423922 + C 0.865512 0.387703 0.424116 + C 0.890520 0.388366 0.424449 + C 0.914852 0.413381 0.424690 + C 0.939844 0.414010 0.425070 + C 0.964190 0.439013 0.425337 + C 0.989163 0.439602 0.425736 + C 0.013522 0.464587 0.425997 + C 0.038477 0.465136 0.426378 + C 0.062850 0.490104 0.426596 + C 0.087790 0.490617 0.426931 + C 0.112176 0.515574 0.427082 + C 0.137105 0.516060 0.427354 + C 0.161501 0.541011 0.427429 + C 0.186424 0.541483 0.427640 + C 0.210826 0.566432 0.427644 + C 0.235748 0.566906 0.427803 + C 0.260152 0.591859 0.427754 + C 0.285079 0.592345 0.427874 + C 0.309479 0.617306 0.427791 + C 0.334413 0.617808 0.427884 + C 0.358808 0.642781 0.427785 + C 0.383751 0.643308 0.427856 + C 0.408141 0.668292 0.427754 + C 0.433094 0.668843 0.427803 + C 0.457477 0.693840 0.427705 + C 0.482439 0.694413 0.427727 + C 0.506817 0.719422 0.427636 + C 0.531788 0.720017 0.427629 + C 0.556162 0.745036 0.427555 + C 0.581139 0.745651 0.427526 + C 0.605510 0.770678 0.427485 + C 0.630495 0.771307 0.427448 + C 0.654864 0.796338 0.427456 + C 0.778582 0.848294 0.427534 + C 0.802969 0.873302 0.427673 + C 0.827956 0.873926 0.427622 + C 0.852355 0.898918 0.427768 + C 0.877338 0.899529 0.427697 + C 0.901746 0.924506 0.427839 + C 0.926724 0.925101 0.427752 + C 0.951141 0.950062 0.427884 + C 0.976115 0.950641 0.427785 + C 0.000542 0.975587 0.427902 + C 0.025507 0.976146 0.427791 + C 0.049938 0.001080 0.427884 + C 0.074898 0.001623 0.427752 + C 0.099332 0.026548 0.427803 + C 0.124290 0.027083 0.427637 + C 0.148722 0.052003 0.427627 + C 0.173681 0.052539 0.427413 + C 0.198106 0.077462 0.427325 + C 0.223071 0.078011 0.427055 + C 0.247484 0.102942 0.426881 + C 0.272459 0.103514 0.426558 + C 0.296857 0.128459 0.426303 + C 0.321844 0.129062 0.425947 + C 0.346223 0.154026 0.425637 + C 0.371225 0.154662 0.425279 + C 0.395585 0.179647 0.424952 + C 0.420601 0.180314 0.424625 + C 0.444944 0.205318 0.424319 + C 0.469970 0.206009 0.424048 + C 0.494301 0.231026 0.423787 + C 0.519335 0.231736 0.423579 + C 0.543655 0.256763 0.423373 + C 0.568694 0.257486 0.423231 + C 0.593007 0.282521 0.423086 + C 0.618048 0.283251 0.423012 + C 0.642357 0.308292 0.422937 + C 0.667399 0.309024 0.422937 + C 0.691709 0.334067 0.422937 + C 0.716749 0.334796 0.423012 + C 0.741059 0.359838 0.423086 + C 0.766095 0.360559 0.423231 + C 0.790411 0.385594 0.423372 + C 0.815440 0.386302 0.423582 + C 0.839762 0.411329 0.423782 + C 0.864783 0.412018 0.424056 + C 0.889116 0.437035 0.424308 + C 0.914127 0.437701 0.424642 + C 0.938471 0.462701 0.424932 + C 0.963468 0.463335 0.425307 + C 0.987828 0.488319 0.425606 + C 0.012808 0.488914 0.425991 + C 0.037185 0.513881 0.426259 + C 0.062150 0.514438 0.426619 + C 0.086542 0.539390 0.426822 + C 0.111493 0.539917 0.427130 + C 0.135898 0.564858 0.427253 + C 0.160842 0.565366 0.427500 + C 0.185256 0.590303 0.427542 + C 0.210197 0.590805 0.427733 + C 0.234615 0.615742 0.427709 + C 0.259556 0.616248 0.427856 + C 0.283973 0.641191 0.427785 + C 0.308920 0.641714 0.427902 + C 0.333333 0.666666 0.427804 + C 0.358287 0.667207 0.427902 + C 0.382694 0.692174 0.427791 + C 0.407656 0.692734 0.427874 + C 0.432056 0.717715 0.427758 + C 0.457025 0.718296 0.427822 + C 0.481417 0.743289 0.427705 + C 0.506392 0.743888 0.427744 + C 0.530778 0.768897 0.427631 + C 0.555758 0.769512 0.427647 + C 0.580135 0.794529 0.427554 + C 0.605122 0.795158 0.427554 + C 0.629494 0.820185 0.427500 + C 0.654481 0.820818 0.427498 + C 0.678852 0.845847 0.427498 + C 0.802556 0.897771 0.427631 + C 0.826941 0.922777 0.427744 + C 0.851916 0.923376 0.427705 + C 0.876309 0.948371 0.427822 + C 0.901278 0.948952 0.427758 + C 0.925678 0.973933 0.427874 + C 0.950640 0.974494 0.427791 + C 0.975047 0.999460 0.427902 + C 1.000000 0.999999 0.427804 + C 0.024413 0.024954 0.427902 + C 0.049360 0.025475 0.427785 + C 0.073777 0.050418 0.427856 + C 0.098719 0.050925 0.427709 + C 0.123137 0.075862 0.427733 + C 0.148077 0.076364 0.427542 + C 0.172491 0.101300 0.427500 + C 0.197435 0.101808 0.427253 + C 0.221840 0.126749 0.427130 + C 0.246791 0.127277 0.426822 + C 0.271184 0.152228 0.426619 + C 0.296148 0.152786 0.426259 + C 0.320525 0.177753 0.425991 + C 0.345505 0.178347 0.425606 + C 0.369865 0.203334 0.425307 + C 0.394861 0.203965 0.424932 + C 0.419206 0.228968 0.424642 + C 0.444217 0.229631 0.424308 + C 0.468549 0.254648 0.424056 + C 0.493571 0.255337 0.423782 + C 0.517893 0.280364 0.423582 + C 0.542925 0.281074 0.423372 + C 0.567237 0.306107 0.423231 + C 0.592274 0.306831 0.423086 + C 0.616585 0.331870 0.423012 + C 0.641625 0.332599 0.422937 + C 0.665934 0.357642 0.422937 + C 0.690975 0.358374 0.422937 + C 0.715285 0.383415 0.423012 + C 0.740325 0.384145 0.423086 + C 0.764642 0.409182 0.423231 + C 0.789678 0.409904 0.423373 + C 0.814001 0.434932 0.423579 + C 0.839032 0.435642 0.423787 + C 0.863365 0.460659 0.424048 + C 0.888389 0.461351 0.424319 + C 0.912734 0.486353 0.424625 + C 0.937747 0.487019 0.424952 + C 0.962107 0.512003 0.425279 + C 0.987110 0.512641 0.425637 + C 0.011490 0.537605 0.425947 + C 0.036476 0.538206 0.426303 + C 0.060874 0.563153 0.426558 + C 0.085849 0.563724 0.426881 + C 0.110263 0.588656 0.427055 + C 0.135228 0.589205 0.427325 + C 0.159652 0.614128 0.427413 + C 0.184612 0.614664 0.427627 + C 0.209044 0.639585 0.427637 + C 0.234002 0.640119 0.427803 + C 0.258435 0.665044 0.427752 + C 0.283396 0.665587 0.427884 + C 0.307827 0.690521 0.427791 + C 0.332793 0.691080 0.427902 + C 0.357218 0.716027 0.427785 + C 0.382191 0.716605 0.427884 + C 0.406608 0.741564 0.427752 + C 0.431587 0.742161 0.427839 + C 0.455996 0.767138 0.427697 + C 0.480979 0.767749 0.427768 + C 0.505378 0.792742 0.427622 + C 0.530364 0.793365 0.427673 + C 0.554751 0.818372 0.427534 + C 0.579741 0.819007 0.427570 + C 0.604120 0.844026 0.427457 + C 0.629109 0.844665 0.427488 + C 0.653480 0.869692 0.427422 + C 0.678469 0.870329 0.427456 + C 0.702840 0.895360 0.427448 + C 0.826517 0.947246 0.427636 + C 0.850894 0.972254 0.427727 + C 0.875856 0.972827 0.427705 + C 0.900239 0.997824 0.427803 + C 0.925194 0.998375 0.427754 + C 0.949582 0.023359 0.427856 + C 0.974525 0.023885 0.427785 + C 0.998919 0.048858 0.427884 + C 0.023854 0.049361 0.427791 + C 0.048255 0.074322 0.427874 + C 0.073181 0.074807 0.427754 + C 0.097585 0.099760 0.427803 + C 0.122507 0.100234 0.427644 + C 0.146909 0.125183 0.427640 + C 0.171832 0.125656 0.427429 + C 0.196229 0.150607 0.427354 + C 0.221157 0.151093 0.427082 + C 0.245543 0.176051 0.426931 + C 0.270483 0.176562 0.426596 + C 0.294857 0.201532 0.426378 + C 0.319811 0.202079 0.425997 + C 0.344170 0.227066 0.425736 + C 0.369145 0.227655 0.425337 + C 0.393489 0.252656 0.425070 + C 0.418481 0.253285 0.424690 + C 0.442814 0.278300 0.424449 + C 0.467821 0.278963 0.424116 + C 0.492144 0.303990 0.423922 + C 0.517163 0.304678 0.423648 + C 0.541479 0.329713 0.423512 + C 0.566507 0.330418 0.423302 + C 0.590818 0.355459 0.423231 + C 0.615855 0.356181 0.423086 + C 0.640163 0.381222 0.423086 + C 0.665203 0.381952 0.423012 + C 0.689514 0.406993 0.423086 + C 0.714556 0.407726 0.423086 + C 0.738870 0.432761 0.423231 + C 0.763911 0.433493 0.423302 + C 0.788233 0.458520 0.423512 + C 0.813272 0.459244 0.423650 + C 0.837603 0.484261 0.423919 + C 0.862639 0.484972 0.424122 + C 0.886982 0.509975 0.424440 + C 0.912011 0.510669 0.424702 + C 0.936371 0.535653 0.425050 + C 0.961391 0.536323 0.425356 + C 0.985771 0.561288 0.425700 + C 0.010778 0.561927 0.426024 + C 0.035180 0.586869 0.426324 + C 0.060177 0.587482 0.426635 + C 0.084596 0.612407 0.426859 + C 0.109583 0.612996 0.427133 + C 0.134016 0.637906 0.427268 + C 0.158997 0.638479 0.427494 + C 0.183439 0.663385 0.427542 + C 0.208415 0.663950 0.427722 + C 0.232863 0.688859 0.427697 + C 0.257839 0.689426 0.427839 + C 0.282286 0.714342 0.427758 + C 0.307265 0.714921 0.427874 + C 0.331707 0.739847 0.427754 + C 0.356693 0.740444 0.427856 + C 0.381126 0.765385 0.427709 + C 0.406117 0.765998 0.427803 + C 0.430541 0.790957 0.427637 + C 0.455535 0.791584 0.427722 + C 0.479946 0.816561 0.427542 + C 0.504943 0.817200 0.427617 + C 0.529341 0.842195 0.427434 + C 0.554337 0.842840 0.427498 + C 0.578723 0.867851 0.427330 + C 0.603718 0.868498 0.427390 + C 0.628093 0.893521 0.427259 + C 0.653086 0.894168 0.427324 + C 0.677453 0.919197 0.427248 + C 0.702442 0.919836 0.427322 + C 0.726806 0.944867 0.427304 + C 0.850449 0.996714 0.427563 + C 0.874816 0.021726 0.427640 + C 0.899767 0.022273 0.427644 + C 0.924139 0.047275 0.427733 + C 0.949075 0.047793 0.427709 + C 0.973451 0.072784 0.427803 + C 0.998378 0.073275 0.427752 + C 0.022760 0.098254 0.427839 + C 0.047675 0.098723 0.427758 + C 0.072062 0.123691 0.427822 + C 0.096971 0.124144 0.427705 + C 0.121360 0.149106 0.427727 + C 0.146265 0.149551 0.427563 + C 0.170651 0.174512 0.427527 + C 0.195559 0.174962 0.427305 + C 0.219938 0.199926 0.427203 + C 0.244854 0.200394 0.426917 + C 0.269223 0.225367 0.426751 + C 0.294153 0.225868 0.426405 + C 0.318510 0.250855 0.426190 + C 0.343457 0.251393 0.425803 + C 0.367802 0.276394 0.425567 + C 0.392771 0.276981 0.425169 + C 0.417103 0.301994 0.424944 + C 0.442094 0.302621 0.424569 + C 0.466416 0.327646 0.424381 + C 0.491422 0.328308 0.424053 + C 0.515740 0.353343 0.423919 + C 0.540756 0.354028 0.423650 + C 0.565068 0.379067 0.423579 + C 0.590095 0.379775 0.423373 + C 0.614407 0.404816 0.423372 + C 0.639441 0.405537 0.423231 + C 0.663753 0.430578 0.423302 + C 0.688793 0.431308 0.423231 + C 0.713108 0.456345 0.423373 + C 0.738150 0.457077 0.423372 + C 0.762473 0.482108 0.423582 + C 0.787513 0.482836 0.423648 + C 0.811846 0.507856 0.423922 + C 0.836886 0.508578 0.424053 + C 0.861230 0.533583 0.424381 + C 0.886268 0.534295 0.424573 + C 0.910629 0.559281 0.424937 + C 0.935660 0.559973 0.425178 + C 0.960042 0.584937 0.425547 + C 0.985065 0.585609 0.425817 + C 0.009469 0.610549 0.426151 + C 0.034484 0.611197 0.426426 + C 0.058909 0.636117 0.426691 + C 0.083913 0.636740 0.426947 + C 0.108355 0.661645 0.427125 + C 0.133355 0.662252 0.427347 + C 0.157805 0.687146 0.427434 + C 0.182800 0.687743 0.427617 + C 0.207258 0.712635 0.427622 + C 0.232251 0.713230 0.427768 + C 0.256711 0.738129 0.427705 + C 0.281705 0.738730 0.427822 + C 0.306161 0.763638 0.427705 + C 0.331158 0.764251 0.427803 + C 0.355606 0.789174 0.427644 + C 0.380608 0.789803 0.427733 + C 0.405046 0.814743 0.427542 + C 0.430052 0.815389 0.427627 + C 0.454475 0.840347 0.427413 + C 0.479483 0.841005 0.427494 + C 0.503890 0.865983 0.427268 + C 0.528898 0.866647 0.427347 + C 0.553290 0.891645 0.427125 + C 0.578295 0.892309 0.427206 + C 0.602673 0.917324 0.427012 + C 0.627675 0.917985 0.427103 + C 0.652043 0.943012 0.426957 + C 0.677038 0.943663 0.427063 + C 0.701399 0.968698 0.426978 + C 0.726387 0.969334 0.427096 + C 0.750742 0.994369 0.427068 + C 0.874343 0.046176 0.427429 + C 0.898701 0.071192 0.427500 + C 0.923635 0.071713 0.427542 + C 0.947997 0.096718 0.427627 + C 0.972917 0.097208 0.427637 + C 0.997285 0.122202 0.427722 + C 0.022192 0.122662 0.427697 + C 0.046564 0.147646 0.427768 + C 0.071462 0.148084 0.427705 + C 0.095837 0.173059 0.427744 + C 0.120729 0.173484 0.427636 + C 0.145105 0.198455 0.427629 + C 0.169995 0.198877 0.427468 + C 0.194366 0.223848 0.427407 + C 0.219261 0.224280 0.427186 + C 0.243626 0.249259 0.427068 + C 0.268531 0.249713 0.426783 + C 0.292886 0.274702 0.426618 + C 0.317809 0.275192 0.426276 + C 0.342152 0.300193 0.426080 + C 0.367095 0.300728 0.425702 + C 0.391430 0.325743 0.425501 + C 0.416394 0.326323 0.425115 + C 0.440720 0.351348 0.424937 + C 0.465706 0.351974 0.424573 + C 0.490024 0.377007 0.424440 + C 0.515027 0.377666 0.424122 + C 0.539341 0.402705 0.424048 + C 0.564358 0.403390 0.423787 + C 0.588670 0.428434 0.423782 + C 0.613698 0.429139 0.423582 + C 0.638010 0.454180 0.423648 + C 0.663045 0.454900 0.423512 + C 0.687362 0.479939 0.423650 + C 0.712401 0.480666 0.423579 + C 0.736725 0.505699 0.423787 + C 0.761766 0.506429 0.423782 + C 0.786099 0.531452 0.424056 + C 0.811143 0.532180 0.424116 + C 0.835488 0.557187 0.424449 + C 0.860528 0.557906 0.424569 + C 0.884891 0.582897 0.424944 + C 0.909929 0.583605 0.425115 + C 0.934313 0.608571 0.425501 + C 0.959347 0.609265 0.425706 + C 0.983753 0.634205 0.426066 + C 0.008781 0.634879 0.426285 + C 0.033208 0.659795 0.426583 + C 0.058230 0.660451 0.426797 + C 0.082675 0.685349 0.427012 + C 0.107690 0.685986 0.427206 + C 0.132151 0.710872 0.427330 + C 0.157161 0.711498 0.427498 + C 0.181627 0.736378 0.427534 + C 0.206635 0.736999 0.427673 + C 0.231104 0.761881 0.427631 + C 0.256111 0.762504 0.427744 + C 0.280578 0.787395 0.427636 + C 0.305587 0.788026 0.427727 + C 0.330048 0.812932 0.427563 + C 0.355059 0.813575 0.427640 + C 0.379509 0.838500 0.427429 + C 0.404525 0.839157 0.427500 + C 0.428960 0.864102 0.427253 + C 0.453978 0.864773 0.427325 + C 0.478394 0.889738 0.427055 + C 0.503412 0.890417 0.427133 + C 0.527811 0.915404 0.426859 + C 0.552827 0.916085 0.426947 + C 0.577208 0.941092 0.426691 + C 0.602221 0.941770 0.426797 + C 0.626587 0.966791 0.426583 + C 0.651595 0.967462 0.426711 + C 0.675951 0.992493 0.426557 + C 0.700950 0.993148 0.426708 + C 0.725299 0.018185 0.426618 + C 0.750287 0.018818 0.426783 + C 0.774631 0.043855 0.426751 + C 0.898193 0.095626 0.427253 + C 0.922538 0.120644 0.427325 + C 0.947460 0.121142 0.427413 + C 0.971812 0.146149 0.427494 + C 0.996719 0.146613 0.427542 + C 0.021077 0.171609 0.427617 + C 0.045970 0.172044 0.427622 + C 0.070332 0.197030 0.427673 + C 0.095215 0.197444 0.427631 + C 0.119580 0.222424 0.427647 + C 0.144459 0.222828 0.427555 + C 0.168823 0.247807 0.427526 + C 0.193701 0.248211 0.427379 + C 0.218062 0.273194 0.427304 + C 0.242947 0.273614 0.427096 + C 0.267300 0.298603 0.426978 + C 0.292199 0.299051 0.426708 + C 0.316542 0.324048 0.426557 + C 0.341461 0.324536 0.426233 + C 0.365795 0.349547 0.426066 + C 0.390736 0.350082 0.425706 + C 0.415063 0.375105 0.425547 + C 0.440025 0.375686 0.425178 + C 0.464346 0.400717 0.425050 + C 0.489332 0.401342 0.424702 + C 0.513648 0.426381 0.424625 + C 0.538650 0.427038 0.424319 + C 0.562964 0.452081 0.424308 + C 0.587981 0.452765 0.424056 + C 0.612295 0.477808 0.424116 + C 0.637323 0.478512 0.423922 + C 0.661641 0.503553 0.424053 + C 0.686675 0.504270 0.423919 + C 0.710999 0.529305 0.424122 + C 0.736039 0.530031 0.424048 + C 0.760372 0.555056 0.424319 + C 0.785415 0.555784 0.424308 + C 0.809762 0.580794 0.424642 + C 0.834804 0.581518 0.424690 + C 0.859166 0.606511 0.425070 + C 0.884209 0.607229 0.425169 + C 0.908593 0.632199 0.425567 + C 0.933634 0.632905 0.425702 + C 0.958040 0.657847 0.426080 + C 0.983077 0.658539 0.426233 + C 0.007507 0.683457 0.426557 + C 0.032539 0.684133 0.426711 + C 0.056987 0.709029 0.426957 + C 0.082016 0.709690 0.427103 + C 0.106479 0.734573 0.427259 + C 0.131501 0.735220 0.427390 + C 0.155975 0.760094 0.427457 + C 0.180994 0.760733 0.427570 + C 0.205470 0.785606 0.427554 + C 0.230489 0.786247 0.427647 + C 0.254963 0.811125 0.427555 + C 0.279984 0.811772 0.427629 + C 0.304452 0.836663 0.427468 + C 0.329473 0.837318 0.427527 + C 0.353931 0.862226 0.427305 + C 0.378955 0.862896 0.427354 + C 0.403398 0.887824 0.427082 + C 0.428424 0.888506 0.427130 + C 0.452848 0.913458 0.426822 + C 0.477876 0.914152 0.426881 + C 0.502279 0.939126 0.426558 + C 0.527306 0.939824 0.426635 + C 0.551690 0.964821 0.426324 + C 0.576714 0.965516 0.426426 + C 0.601081 0.990531 0.426151 + C 0.626098 0.991219 0.426285 + C 0.650452 0.016248 0.426066 + C 0.675463 0.016923 0.426233 + C 0.699807 0.041960 0.426080 + C 0.724807 0.042616 0.426276 + C 0.749146 0.067656 0.426190 + C 0.774133 0.068285 0.426405 + C 0.798467 0.093324 0.426378 + C 0.921989 0.145060 0.427055 + C 0.946329 0.170079 0.427133 + C 0.971240 0.170557 0.427268 + C 0.995585 0.195565 0.427347 + C 0.020480 0.196007 0.427434 + C 0.044830 0.221003 0.427498 + C 0.069712 0.221417 0.427534 + C 0.094067 0.246406 0.427570 + C 0.118939 0.246802 0.427554 + C 0.143296 0.271787 0.427554 + C 0.168166 0.272177 0.427485 + C 0.192521 0.297162 0.427448 + C 0.217393 0.297558 0.427322 + C 0.241744 0.322546 0.427248 + C 0.266626 0.322962 0.427063 + C 0.290970 0.347957 0.426957 + C 0.315867 0.348406 0.426711 + C 0.340204 0.373412 0.426583 + C 0.365121 0.373901 0.426285 + C 0.389449 0.398920 0.426151 + C 0.414391 0.399457 0.425817 + C 0.438713 0.424483 0.425700 + C 0.463677 0.425068 0.425356 + C 0.487995 0.450103 0.425279 + C 0.512981 0.450729 0.424952 + C 0.537297 0.475770 0.424932 + C 0.562300 0.476427 0.424642 + C 0.586617 0.501470 0.424690 + C 0.611634 0.502154 0.424449 + C 0.635955 0.527195 0.424569 + C 0.660982 0.527898 0.424381 + C 0.685306 0.552933 0.424573 + C 0.710341 0.553649 0.424440 + C 0.734676 0.578678 0.424702 + C 0.759714 0.579399 0.424625 + C 0.784063 0.604414 0.424952 + C 0.809103 0.605138 0.424932 + C 0.833467 0.630135 0.425307 + C 0.858510 0.630856 0.425337 + C 0.882894 0.655829 0.425736 + C 0.907937 0.656543 0.425803 + C 0.932345 0.681491 0.426190 + C 0.957384 0.682191 0.426276 + C 0.981815 0.707113 0.426618 + C 0.006852 0.707801 0.426708 + C 0.031302 0.732701 0.426978 + C 0.056337 0.733375 0.427063 + C 0.080802 0.758257 0.427248 + C 0.105832 0.758918 0.427324 + C 0.130307 0.783788 0.427422 + C 0.155335 0.784444 0.427488 + C 0.179816 0.809310 0.427500 + C 0.204843 0.809963 0.427554 + C 0.229322 0.834831 0.427485 + C 0.254349 0.835489 0.427526 + C 0.278823 0.860369 0.427379 + C 0.303852 0.861034 0.427407 + C 0.328315 0.885928 0.427186 + C 0.353346 0.886606 0.427203 + C 0.377793 0.911520 0.426917 + C 0.402826 0.912210 0.426931 + C 0.427255 0.937150 0.426596 + C 0.452289 0.937850 0.426619 + C 0.476696 0.962815 0.426259 + C 0.501731 0.963524 0.426303 + C 0.526116 0.988511 0.425947 + C 0.551148 0.989220 0.426024 + C 0.575516 0.014229 0.425700 + C 0.600544 0.014934 0.425817 + C 0.624896 0.039958 0.425547 + C 0.649917 0.040653 0.425706 + C 0.674258 0.065687 0.425501 + C 0.699271 0.066367 0.425702 + C 0.723605 0.091407 0.425567 + C 0.748607 0.092064 0.425803 + C 0.772934 0.117105 0.425736 + C 0.797921 0.117732 0.425997 + C 0.822248 0.142772 0.425991 + C 0.945740 0.194477 0.426859 + C 0.970075 0.219494 0.426947 + C 0.994978 0.219956 0.427125 + C 0.019320 0.244963 0.427206 + C 0.044206 0.245389 0.427330 + C 0.068553 0.270386 0.427390 + C 0.093426 0.270786 0.427457 + C 0.117777 0.295775 0.427488 + C 0.142643 0.296160 0.427500 + C 0.166995 0.321147 0.427498 + C 0.191860 0.321531 0.427456 + C 0.216212 0.346520 0.427422 + C 0.241081 0.346914 0.427324 + C 0.265428 0.371907 0.427259 + C 0.290310 0.372325 0.427103 + C 0.314651 0.397328 0.427012 + C 0.339550 0.397780 0.426797 + C 0.363884 0.422793 0.426691 + C 0.388803 0.423287 0.426426 + C 0.413130 0.448310 0.426324 + C 0.438072 0.448851 0.426024 + C 0.462395 0.473884 0.425947 + C 0.487359 0.474469 0.425637 + C 0.511680 0.499508 0.425606 + C 0.536666 0.500135 0.425307 + C 0.560988 0.525176 0.425337 + C 0.585988 0.525834 0.425070 + C 0.610315 0.550877 0.425169 + C 0.635329 0.551558 0.424944 + C 0.659657 0.576595 0.425115 + C 0.684682 0.577297 0.424937 + C 0.709020 0.602328 0.425178 + C 0.734052 0.603039 0.425050 + C 0.758401 0.628056 0.425356 + C 0.783437 0.628776 0.425279 + C 0.807804 0.653777 0.425637 + C 0.832841 0.654494 0.425606 + C 0.857229 0.679475 0.425991 + C 0.882268 0.680189 0.425997 + C 0.906675 0.705143 0.426378 + C 0.931715 0.705847 0.426405 + C 0.956145 0.730777 0.426751 + C 0.981182 0.731469 0.426783 + C 0.005631 0.756373 0.427068 + C 0.030667 0.757053 0.427096 + C 0.055132 0.781939 0.427304 + C 0.080164 0.782606 0.427322 + C 0.104640 0.807478 0.427448 + C 0.129670 0.808140 0.427456 + C 0.154151 0.833004 0.427498 + C 0.179181 0.833661 0.427498 + C 0.203663 0.858527 0.427456 + C 0.228692 0.859187 0.427448 + C 0.253168 0.884059 0.427322 + C 0.278202 0.884728 0.427304 + C 0.302666 0.909613 0.427096 + C 0.327701 0.910292 0.427068 + C 0.352152 0.935198 0.426783 + C 0.377189 0.935890 0.426751 + C 0.401618 0.960818 0.426405 + C 0.426657 0.961522 0.426378 + C 0.451066 0.986479 0.425997 + C 0.476105 0.987190 0.425991 + C 0.500491 0.012172 0.425606 + C 0.525531 0.012890 0.425637 + C 0.549896 0.037892 0.425279 + C 0.574932 0.038609 0.425356 + C 0.599283 0.063628 0.425050 + C 0.624314 0.064340 0.425178 + C 0.648652 0.089371 0.424937 + C 0.673675 0.090071 0.425115 + C 0.698006 0.115109 0.424944 + C 0.723020 0.115791 0.425169 + C 0.747345 0.140833 0.425070 + C 0.772347 0.141490 0.425337 + C 0.796668 0.166532 0.425307 + C 0.821652 0.167158 0.425606 + C 0.845973 0.192197 0.425637 + C 0.969450 0.243875 0.426691 + C 0.993784 0.268888 0.426797 + C 0.018683 0.269340 0.427012 + C 0.043023 0.294341 0.427103 + C 0.067905 0.294759 0.427259 + C 0.092252 0.319752 0.427324 + C 0.117122 0.320148 0.427422 + C 0.141473 0.345135 0.427456 + C 0.166338 0.345519 0.427498 + C 0.190690 0.370506 0.427500 + C 0.215556 0.370892 0.427488 + C 0.239907 0.395880 0.427457 + C 0.264781 0.396282 0.427390 + C 0.289127 0.421277 0.427330 + C 0.314014 0.421705 0.427206 + C 0.338355 0.446710 0.427125 + C 0.363259 0.447173 0.426947 + C 0.387593 0.472189 0.426859 + C 0.412517 0.472694 0.426635 + C 0.436848 0.497721 0.426558 + C 0.461792 0.498270 0.426303 + C 0.486120 0.523305 0.426259 + C 0.511087 0.523896 0.425991 + C 0.535414 0.548935 0.425997 + C 0.560399 0.549562 0.425736 + C 0.584728 0.574603 0.425803 + C 0.609728 0.575260 0.425567 + C 0.634061 0.600299 0.425702 + C 0.659075 0.600979 0.425501 + C 0.683416 0.626014 0.425706 + C 0.708438 0.626709 0.425547 + C 0.732789 0.651732 0.425817 + C 0.757819 0.652438 0.425700 + C 0.782184 0.677445 0.426024 + C 0.807217 0.678156 0.425947 + C 0.831603 0.703143 0.426303 + C 0.856637 0.703851 0.426259 + C 0.881044 0.728815 0.426619 + C 0.906079 0.729517 0.426596 + C 0.930507 0.754457 0.426931 + C 0.955541 0.755147 0.426917 + C 0.979988 0.780061 0.427203 + C 0.005018 0.780739 0.427186 + C 0.029483 0.805633 0.427407 + C 0.054511 0.806298 0.427379 + C 0.078983 0.831177 0.427526 + C 0.104012 0.831834 0.427485 + C 0.128492 0.856704 0.427554 + C 0.153518 0.857358 0.427500 + C 0.177997 0.882222 0.427488 + C 0.203026 0.882879 0.427422 + C 0.227501 0.907747 0.427324 + C 0.252531 0.908411 0.427248 + C 0.276998 0.933293 0.427063 + C 0.302031 0.933966 0.426978 + C 0.326481 0.958864 0.426708 + C 0.351518 0.959552 0.426618 + C 0.375949 0.984474 0.426276 + C 0.400989 0.985176 0.426190 + C 0.425397 0.010124 0.425803 + C 0.450438 0.010837 0.425736 + C 0.474823 0.035811 0.425337 + C 0.499865 0.036532 0.425307 + C 0.524229 0.061528 0.424932 + C 0.549272 0.062252 0.424952 + C 0.573619 0.087267 0.424625 + C 0.598657 0.087989 0.424702 + C 0.622994 0.113017 0.424440 + C 0.648027 0.113733 0.424573 + C 0.672353 0.138769 0.424381 + C 0.697378 0.139472 0.424569 + C 0.721700 0.164513 0.424449 + C 0.746715 0.165196 0.424690 + C 0.771033 0.190239 0.424642 + C 0.796035 0.190897 0.424932 + C 0.820352 0.215937 0.424952 + C 0.845338 0.216563 0.425279 + C 0.869656 0.241600 0.425356 + C 0.993129 0.293254 0.426583 + C 0.017466 0.318261 0.426711 + C 0.042363 0.318709 0.426957 + C 0.066708 0.343706 0.427063 + C 0.091589 0.344120 0.427248 + C 0.115940 0.369109 0.427322 + C 0.140812 0.369505 0.427448 + C 0.165167 0.394489 0.427485 + C 0.190037 0.394879 0.427554 + C 0.214394 0.419864 0.427554 + C 0.239266 0.420260 0.427570 + C 0.263621 0.445249 0.427534 + C 0.288503 0.445663 0.427498 + C 0.312853 0.470660 0.427434 + C 0.337748 0.471102 0.427347 + C 0.362093 0.496109 0.427268 + C 0.387005 0.496587 0.427133 + C 0.411344 0.521606 0.427055 + C 0.436275 0.522125 0.426881 + C 0.460609 0.547152 0.426822 + C 0.485562 0.547711 0.426619 + C 0.509895 0.572746 0.426596 + C 0.534865 0.573343 0.426378 + C 0.559200 0.598382 0.426405 + C 0.584187 0.599011 0.426190 + C 0.608525 0.624050 0.426276 + C 0.633526 0.624707 0.426080 + C 0.657872 0.649744 0.426233 + C 0.608034 0.648482 0.426618 + C 0.632384 0.673519 0.426708 + C 0.657383 0.674174 0.426557 + C 0.681739 0.699205 0.426711 + C 0.631935 0.697969 0.426978 + C 0.656295 0.723002 0.427063 + C 0.681292 0.723655 0.426957 + C 0.705659 0.748682 0.427103 + C 0.655879 0.747468 0.427248 + C 0.680246 0.772499 0.427324 + C 0.705239 0.773144 0.427259 + C 0.729615 0.798167 0.427390 + C 0.679853 0.796975 0.427422 + C 0.704225 0.822002 0.427488 + C 0.729215 0.822641 0.427457 + C 0.753593 0.847660 0.427570 + C 0.703838 0.846482 0.427500 + C 0.728212 0.871509 0.427554 + C 0.753196 0.872136 0.427554 + C 0.777575 0.897155 0.427647 + C 0.727824 0.895989 0.427485 + C 0.752193 0.921016 0.427526 + C 0.777171 0.921630 0.427555 + C 0.801546 0.946651 0.427629 + C 0.751787 0.945489 0.427379 + C 0.776152 0.970518 0.427407 + C 0.801124 0.971119 0.427468 + C 0.825488 0.996140 0.427527 + C 0.775720 0.994982 0.427186 + C 0.800074 0.020012 0.427203 + C 0.825039 0.020597 0.427305 + C 0.849393 0.045622 0.427354 + C 0.799605 0.044460 0.426917 + C 0.823949 0.069493 0.426931 + C 0.848907 0.070064 0.427082 + C 0.873251 0.095091 0.427130 + C 0.823438 0.093921 0.426596 + C 0.847772 0.118956 0.426619 + C 0.872723 0.119515 0.426822 + C 0.897058 0.144542 0.426881 + C 0.847215 0.143363 0.426259 + C 0.871541 0.168397 0.426303 + C 0.896487 0.168946 0.426558 + C 0.920815 0.193972 0.426635 + C 0.870938 0.192782 0.425947 + C 0.895261 0.217815 0.426024 + C 0.920203 0.218356 0.426324 + C 0.944531 0.243381 0.426426 + C 0.894619 0.242183 0.425700 + C 0.918944 0.267212 0.425817 + C 0.943883 0.267746 0.426151 + C 0.968213 0.292765 0.426285 + C 0.626588 0.659795 0.573416 + C 0.651594 0.684133 0.573288 + C 0.675950 0.683457 0.573442 + C 0.700949 0.707801 0.573292 + C 0.725298 0.707113 0.573382 + C 0.750287 0.731469 0.573215 + C 0.774632 0.730777 0.573249 + C 0.799607 0.755147 0.573082 + C 0.823950 0.754457 0.573069 + C 0.848907 0.778843 0.572920 + C 0.873251 0.778160 0.572868 + C 0.898192 0.802566 0.572748 + C 0.922538 0.801894 0.572676 + C 0.947460 0.826318 0.572586 + C 0.971811 0.825663 0.572504 + C 0.996719 0.850107 0.572457 + C 0.021077 0.849467 0.572384 + C 0.045969 0.873926 0.572380 + C 0.070333 0.873302 0.572329 + C 0.095215 0.897771 0.572367 + C 0.119580 0.897155 0.572354 + C 0.144458 0.921630 0.572444 + C 0.168823 0.921016 0.572474 + C 0.193702 0.945489 0.572620 + C 0.218061 0.944867 0.572697 + C 0.242947 0.969334 0.572902 + C 0.267299 0.968698 0.573022 + C 0.292198 0.993148 0.573292 + C 0.316542 0.992493 0.573442 + C 0.341461 0.016923 0.573767 + C 0.365795 0.016248 0.573934 + C 0.390736 0.040653 0.574294 + C 0.415062 0.039958 0.574452 + C 0.440026 0.064340 0.574820 + C 0.464347 0.063628 0.574949 + C 0.489332 0.087989 0.575300 + C 0.513647 0.087267 0.575372 + C 0.538650 0.111611 0.575681 + C 0.562965 0.110884 0.575693 + C 0.587980 0.135215 0.575946 + C 0.612297 0.134488 0.575886 + C 0.637323 0.158810 0.576079 + C 0.661641 0.158088 0.575946 + C 0.686675 0.182405 0.576083 + C 0.711000 0.181695 0.575878 + C 0.736040 0.206009 0.575950 + C 0.760373 0.205318 0.575681 + C 0.785414 0.229631 0.575693 + C 0.809761 0.228968 0.575360 + C 0.834804 0.253285 0.575308 + C 0.859166 0.252656 0.574932 + C 0.884210 0.276981 0.574829 + C 0.908593 0.276394 0.574435 + C 0.933632 0.300728 0.574298 + C 0.958040 0.300193 0.573921 + C 0.983077 0.324536 0.573767 + C 0.007506 0.324048 0.573442 + C 0.032539 0.348406 0.573288 + C 0.056987 0.347957 0.573044 + C 0.082015 0.372325 0.572898 + C 0.106478 0.371907 0.572740 + C 0.131502 0.396282 0.572611 + C 0.155974 0.395880 0.572543 + C 0.180994 0.420260 0.572432 + C 0.205470 0.419864 0.572444 + C 0.230489 0.444242 0.572354 + C 0.254963 0.443838 0.572444 + C 0.279983 0.468211 0.572372 + C 0.304451 0.467789 0.572530 + C 0.329473 0.492155 0.572474 + C 0.353931 0.491704 0.572697 + C 0.378955 0.516060 0.572646 + C 0.403398 0.515574 0.572920 + C 0.428424 0.539917 0.572868 + C 0.452848 0.539390 0.573176 + C 0.477875 0.563724 0.573121 + C 0.502279 0.563153 0.573442 + C 0.527305 0.587482 0.573365 + C 0.652042 0.709029 0.573044 + C 0.677038 0.733375 0.572937 + C 0.701399 0.732701 0.573022 + C 0.726386 0.757053 0.572902 + C 0.750742 0.756373 0.572932 + C 0.775721 0.780739 0.572813 + C 0.800073 0.780061 0.572795 + C 0.825039 0.804441 0.572697 + C 0.849394 0.803772 0.572646 + C 0.874343 0.828167 0.572573 + C 0.898700 0.827508 0.572500 + C 0.923637 0.851924 0.572457 + C 0.947996 0.851279 0.572372 + C 0.972917 0.875711 0.572363 + C 0.997283 0.875081 0.572277 + C 0.022192 0.899529 0.572303 + C 0.046563 0.898918 0.572230 + C 0.071461 0.923376 0.572295 + C 0.095836 0.922777 0.572256 + C 0.120728 0.947246 0.572363 + C 0.145104 0.946651 0.572372 + C 0.169995 0.971119 0.572530 + C 0.194366 0.970518 0.572594 + C 0.219261 0.994982 0.572813 + C 0.243626 0.994369 0.572932 + C 0.268533 0.018818 0.573215 + C 0.292886 0.018185 0.573382 + C 0.317808 0.042616 0.573724 + C 0.342152 0.041960 0.573921 + C 0.367095 0.066367 0.574298 + C 0.391429 0.065687 0.574499 + C 0.416395 0.090071 0.574884 + C 0.440719 0.089371 0.575064 + C 0.465706 0.113733 0.575428 + C 0.490025 0.113017 0.575561 + C 0.515028 0.137362 0.575878 + C 0.539342 0.136636 0.575950 + C 0.564359 0.160968 0.576211 + C 0.588671 0.160238 0.576220 + C 0.613698 0.184559 0.576417 + C 0.638011 0.183830 0.576353 + C 0.663046 0.208146 0.576490 + C 0.687361 0.207422 0.576348 + C 0.712402 0.231736 0.576421 + C 0.736724 0.231026 0.576211 + C 0.761766 0.255337 0.576220 + C 0.786098 0.254648 0.575946 + C 0.811142 0.278963 0.575886 + C 0.835487 0.278300 0.575552 + C 0.860529 0.302621 0.575432 + C 0.884890 0.301994 0.575056 + C 0.909929 0.326323 0.574884 + C 0.934314 0.325743 0.574499 + C 0.959347 0.350082 0.574294 + C 0.983753 0.349547 0.573934 + C 0.008780 0.373901 0.573716 + C 0.033208 0.373412 0.573416 + C 0.058230 0.397780 0.573202 + C 0.082676 0.397328 0.572988 + C 0.107691 0.421705 0.572795 + C 0.132150 0.421277 0.572671 + C 0.157160 0.445663 0.572500 + C 0.181627 0.445249 0.572466 + C 0.206635 0.469637 0.572329 + C 0.231104 0.469222 0.572367 + C 0.256112 0.493608 0.572256 + C 0.280578 0.493182 0.572363 + C 0.305588 0.517562 0.572273 + C 0.330047 0.517115 0.572436 + C 0.355059 0.541483 0.572359 + C 0.379509 0.541011 0.572573 + C 0.404525 0.565366 0.572500 + C 0.428959 0.564858 0.572748 + C 0.453977 0.589205 0.572676 + C 0.478393 0.588656 0.572945 + C 0.503413 0.612996 0.572868 + C 0.527811 0.612407 0.573142 + C 0.552827 0.636740 0.573052 + C 0.677455 0.758257 0.572753 + C 0.702442 0.782606 0.572680 + C 0.726807 0.781939 0.572697 + C 0.751787 0.806298 0.572620 + C 0.776151 0.805633 0.572594 + C 0.801123 0.830005 0.572530 + C 0.825488 0.829349 0.572474 + C 0.850449 0.853735 0.572436 + C 0.874817 0.853090 0.572359 + C 0.899766 0.877494 0.572354 + C 0.924137 0.876862 0.572269 + C 0.949075 0.901282 0.572290 + C 0.973452 0.900669 0.572196 + C 0.998377 0.925101 0.572247 + C 0.022760 0.924506 0.572162 + C 0.047674 0.948952 0.572243 + C 0.072063 0.948371 0.572179 + C 0.096971 0.972827 0.572295 + C 0.121360 0.972254 0.572273 + C 0.146265 0.996714 0.572436 + C 0.170652 0.996140 0.572474 + C 0.195560 0.020597 0.572697 + C 0.219939 0.020012 0.572795 + C 0.244854 0.044460 0.573082 + C 0.269223 0.043855 0.573249 + C 0.294152 0.068285 0.573596 + C 0.318509 0.067656 0.573810 + C 0.343458 0.092064 0.574195 + C 0.367802 0.091407 0.574435 + C 0.392772 0.115791 0.574829 + C 0.417104 0.115109 0.575056 + C 0.442093 0.139472 0.575432 + C 0.466417 0.138769 0.575621 + C 0.491422 0.163114 0.575946 + C 0.515738 0.162396 0.576083 + C 0.540757 0.186728 0.576348 + C 0.565068 0.186000 0.576421 + C 0.590096 0.210321 0.576627 + C 0.614407 0.209589 0.576627 + C 0.639442 0.233905 0.576768 + C 0.663752 0.233175 0.576699 + C 0.688794 0.257486 0.576768 + C 0.713107 0.256763 0.576627 + C 0.738151 0.281074 0.576627 + C 0.762471 0.280364 0.576417 + C 0.787514 0.304678 0.576353 + C 0.811845 0.303990 0.576079 + C 0.836887 0.328308 0.575946 + C 0.861232 0.327648 0.575621 + C 0.886267 0.351974 0.575428 + C 0.910630 0.351348 0.575064 + C 0.935660 0.375686 0.574820 + C 0.960043 0.375105 0.574452 + C 0.985066 0.399457 0.574182 + C 0.009470 0.398920 0.573848 + C 0.034485 0.423287 0.573574 + C 0.058909 0.422793 0.573309 + C 0.083914 0.447173 0.573052 + C 0.108355 0.446710 0.572877 + C 0.133354 0.471102 0.572654 + C 0.157806 0.470660 0.572564 + C 0.182801 0.495058 0.572384 + C 0.207259 0.494623 0.572380 + C 0.232251 0.519021 0.572230 + C 0.256711 0.518583 0.572295 + C 0.281704 0.542975 0.572179 + C 0.306160 0.542522 0.572295 + C 0.331158 0.566906 0.572196 + C 0.355606 0.566432 0.572354 + C 0.380609 0.590805 0.572269 + C 0.405046 0.590303 0.572457 + C 0.430052 0.614664 0.572372 + C 0.454475 0.614128 0.572586 + C 0.479483 0.638479 0.572504 + C 0.503891 0.637906 0.572731 + C 0.528897 0.662252 0.572654 + C 0.553290 0.661645 0.572877 + C 0.578296 0.685986 0.572795 + C 0.702839 0.807478 0.572551 + C 0.727822 0.831834 0.572517 + C 0.752193 0.831177 0.572474 + C 0.777172 0.855542 0.572444 + C 0.801546 0.854895 0.572372 + C 0.826515 0.879271 0.572363 + C 0.850894 0.878639 0.572273 + C 0.875856 0.903029 0.572295 + C 0.900241 0.902416 0.572196 + C 0.925192 0.926818 0.572247 + C 0.949582 0.926223 0.572145 + C 0.974525 0.950641 0.572213 + C 0.998920 0.950062 0.572115 + C 0.023854 0.974494 0.572209 + C 0.048255 0.973933 0.572128 + C 0.073181 0.998375 0.572247 + C 0.097585 0.997824 0.572196 + C 0.122507 0.022273 0.572354 + C 0.146909 0.021726 0.572359 + C 0.171832 0.046176 0.572573 + C 0.196229 0.045622 0.572646 + C 0.221157 0.070064 0.572920 + C 0.245543 0.069493 0.573069 + C 0.270483 0.093921 0.573403 + C 0.294856 0.093324 0.573622 + C 0.319812 0.117732 0.574003 + C 0.344170 0.117105 0.574264 + C 0.369144 0.141490 0.574662 + C 0.393488 0.140833 0.574932 + C 0.418481 0.165196 0.575308 + C 0.442814 0.164513 0.575552 + C 0.467821 0.188858 0.575886 + C 0.492144 0.188155 0.576079 + C 0.517163 0.212486 0.576353 + C 0.541478 0.211766 0.576490 + C 0.566507 0.236088 0.576699 + C 0.590819 0.235360 0.576768 + C 0.615855 0.259673 0.576914 + C 0.640164 0.258942 0.576914 + C 0.665203 0.283251 0.576986 + C 0.689513 0.282521 0.576914 + C 0.714556 0.306831 0.576914 + C 0.738869 0.306107 0.576768 + C 0.763911 0.330418 0.576699 + C 0.788233 0.329713 0.576490 + C 0.813272 0.354028 0.576348 + C 0.837604 0.353343 0.576083 + C 0.862638 0.377666 0.575878 + C 0.886982 0.377007 0.575561 + C 0.912011 0.401342 0.575300 + C 0.936371 0.400717 0.574949 + C 0.961391 0.425068 0.574645 + C 0.985770 0.424483 0.574298 + C 0.010779 0.448851 0.573977 + C 0.035181 0.448310 0.573677 + C 0.060177 0.472694 0.573365 + C 0.084596 0.472189 0.573142 + C 0.109582 0.496587 0.572868 + C 0.134016 0.496109 0.572731 + C 0.158996 0.520517 0.572504 + C 0.183439 0.520054 0.572457 + C 0.208415 0.544464 0.572277 + C 0.232863 0.544004 0.572303 + C 0.257840 0.568414 0.572162 + C 0.282285 0.567943 0.572243 + C 0.307266 0.592345 0.572128 + C 0.331707 0.591859 0.572247 + C 0.356692 0.616248 0.572145 + C 0.381127 0.615742 0.572290 + C 0.406117 0.640119 0.572196 + C 0.430541 0.639585 0.572363 + C 0.455535 0.663950 0.572277 + C 0.479946 0.663385 0.572457 + C 0.504943 0.687743 0.572384 + C 0.529341 0.687146 0.572564 + C 0.554336 0.711498 0.572500 + C 0.578722 0.710872 0.572671 + C 0.603719 0.735220 0.572611 + C 0.728212 0.856704 0.572444 + C 0.753198 0.881060 0.572444 + C 0.777576 0.880421 0.572354 + C 0.802555 0.904784 0.572367 + C 0.826941 0.904163 0.572256 + C 0.851915 0.928539 0.572295 + C 0.876309 0.927938 0.572179 + C 0.901277 0.952325 0.572243 + C 0.925677 0.951746 0.572128 + C 0.950640 0.976146 0.572209 + C 0.975046 0.975587 0.572098 + C 1.000000 0.000000 0.572196 + C 0.024414 0.999460 0.572098 + C 0.049360 0.023885 0.572213 + C 0.073777 0.023359 0.572145 + C 0.098719 0.047793 0.572290 + C 0.123137 0.047275 0.572269 + C 0.148077 0.071713 0.572457 + C 0.172491 0.071192 0.572500 + C 0.197435 0.095626 0.572748 + C 0.221839 0.095091 0.572868 + C 0.246791 0.119515 0.573176 + C 0.271185 0.118956 0.573382 + C 0.296149 0.143363 0.573741 + C 0.320525 0.142772 0.574011 + C 0.345505 0.167158 0.574396 + C 0.369864 0.166532 0.574692 + C 0.394861 0.190897 0.575068 + C 0.419206 0.190239 0.575360 + C 0.444216 0.214585 0.575693 + C 0.468549 0.213901 0.575946 + C 0.493571 0.238235 0.576220 + C 0.517893 0.237529 0.576417 + C 0.542924 0.261850 0.576627 + C 0.567238 0.261131 0.576768 + C 0.592274 0.285444 0.576914 + C 0.616584 0.284714 0.576986 + C 0.641625 0.309024 0.577063 + C 0.665934 0.308292 0.577063 + C 0.690976 0.332599 0.577063 + C 0.715286 0.331870 0.576986 + C 0.740326 0.356181 0.576914 + C 0.764640 0.355459 0.576768 + C 0.789679 0.379775 0.576627 + C 0.813999 0.379067 0.576421 + C 0.839032 0.403390 0.576211 + C 0.863363 0.402705 0.575950 + C 0.888388 0.427038 0.575681 + C 0.912733 0.426381 0.575372 + C 0.937747 0.450729 0.575047 + C 0.962108 0.450103 0.574722 + C 0.987109 0.474469 0.574362 + C 0.011489 0.473884 0.574054 + C 0.036477 0.498270 0.573699 + C 0.060873 0.497721 0.573442 + C 0.085850 0.522125 0.573121 + C 0.110262 0.521606 0.572945 + C 0.135227 0.546022 0.572676 + C 0.159652 0.545526 0.572586 + C 0.184611 0.569947 0.572372 + C 0.209043 0.569459 0.572363 + C 0.234002 0.593883 0.572196 + C 0.258435 0.593392 0.572247 + C 0.283395 0.617808 0.572115 + C 0.307826 0.617306 0.572209 + C 0.332793 0.641714 0.572098 + C 0.357218 0.641191 0.572213 + C 0.382191 0.665587 0.572115 + C 0.406609 0.665044 0.572247 + C 0.431587 0.689426 0.572162 + C 0.455996 0.688859 0.572303 + C 0.480979 0.713230 0.572230 + C 0.505377 0.712635 0.572380 + C 0.530364 0.736999 0.572329 + C 0.554751 0.736378 0.572466 + C 0.579739 0.760733 0.572432 + C 0.604120 0.760094 0.572543 + C 0.629109 0.784444 0.572513 + C 0.753592 0.905932 0.572432 + C 0.778581 0.930287 0.572466 + C 0.802969 0.929668 0.572329 + C 0.827956 0.954030 0.572380 + C 0.852354 0.953437 0.572230 + C 0.877337 0.977809 0.572303 + C 0.901745 0.977240 0.572162 + C 0.926724 0.001623 0.572247 + C 0.951142 0.001080 0.572115 + C 0.976116 0.025475 0.572213 + C 0.000540 0.024954 0.572098 + C 0.025507 0.049361 0.572209 + C 0.049938 0.048858 0.572115 + C 0.074898 0.073275 0.572247 + C 0.099332 0.072784 0.572196 + C 0.124290 0.097208 0.572363 + C 0.148722 0.096718 0.572372 + C 0.173681 0.121142 0.572586 + C 0.198106 0.120644 0.572676 + C 0.223071 0.145060 0.572945 + C 0.247484 0.144542 0.573121 + C 0.272460 0.168946 0.573442 + C 0.296856 0.168397 0.573699 + C 0.321844 0.192782 0.574054 + C 0.346223 0.192197 0.574362 + C 0.371224 0.216563 0.574722 + C 0.395585 0.215937 0.575047 + C 0.420600 0.240285 0.575372 + C 0.444945 0.239628 0.575681 + C 0.469969 0.263961 0.575950 + C 0.494300 0.263276 0.576211 + C 0.519334 0.287599 0.576421 + C 0.543655 0.286893 0.576627 + C 0.568692 0.311207 0.576768 + C 0.593008 0.310487 0.576914 + C 0.618048 0.334796 0.576986 + C 0.642359 0.334067 0.577063 + C 0.667399 0.358376 0.577063 + C 0.691708 0.357642 0.577063 + C 0.716749 0.381952 0.576986 + C 0.741059 0.381222 0.576914 + C 0.766096 0.405537 0.576768 + C 0.790410 0.404816 0.576627 + C 0.815440 0.429139 0.576417 + C 0.839763 0.428434 0.576220 + C 0.864785 0.452765 0.575946 + C 0.889117 0.452081 0.575693 + C 0.914127 0.476427 0.575360 + C 0.938472 0.475770 0.575068 + C 0.963469 0.500135 0.574692 + C 0.987827 0.499508 0.574396 + C 0.012808 0.523896 0.574011 + C 0.037185 0.523305 0.573741 + C 0.062148 0.547711 0.573382 + C 0.086542 0.547152 0.573176 + C 0.111494 0.571576 0.572868 + C 0.135899 0.571041 0.572748 + C 0.160842 0.595475 0.572500 + C 0.185257 0.594954 0.572457 + C 0.210197 0.619392 0.572269 + C 0.234615 0.618874 0.572290 + C 0.259556 0.643308 0.572145 + C 0.283973 0.642781 0.572213 + C 0.308920 0.667207 0.572098 + C 0.333333 0.666666 0.572196 + C 0.358287 0.691080 0.572098 + C 0.382695 0.690521 0.572209 + C 0.407656 0.714921 0.572128 + C 0.432056 0.714342 0.572243 + C 0.457025 0.738730 0.572179 + C 0.481418 0.738129 0.572295 + C 0.506393 0.762504 0.572256 + C 0.530778 0.761881 0.572367 + C 0.555758 0.786247 0.572354 + C 0.580136 0.785606 0.572444 + C 0.605120 0.809963 0.572444 + C 0.629493 0.809310 0.572500 + C 0.654480 0.833661 0.572500 + C 0.778996 0.955170 0.572500 + C 0.803992 0.979519 0.572564 + C 0.828391 0.978924 0.572384 + C 0.853386 0.003281 0.572457 + C 0.877798 0.002716 0.572277 + C 0.902793 0.027083 0.572363 + C 0.927216 0.026548 0.572196 + C 0.952208 0.050925 0.572290 + C 0.976641 0.050418 0.572145 + C 0.001626 0.074807 0.572247 + C 0.026068 0.074322 0.572128 + C 0.051048 0.098723 0.572243 + C 0.075494 0.098254 0.572162 + C 0.100471 0.122662 0.572303 + C 0.124918 0.122202 0.572277 + C 0.149894 0.146613 0.572457 + C 0.174337 0.146149 0.572504 + C 0.199317 0.170557 0.572731 + C 0.223751 0.170079 0.572868 + C 0.248737 0.194477 0.573142 + C 0.273157 0.193972 0.573365 + C 0.298152 0.218356 0.573677 + C 0.322554 0.217815 0.573977 + C 0.347563 0.242183 0.574298 + C 0.371943 0.241600 0.574645 + C 0.396962 0.265949 0.574949 + C 0.421323 0.265324 0.575300 + C 0.446351 0.289659 0.575561 + C 0.470694 0.289000 0.575878 + C 0.495731 0.313326 0.576083 + C 0.520061 0.312638 0.576348 + C 0.545100 0.336955 0.576490 + C 0.569422 0.336248 0.576699 + C 0.594463 0.360559 0.576768 + C 0.618778 0.359838 0.576914 + C 0.643819 0.384145 0.576914 + C 0.668130 0.383415 0.576986 + C 0.693170 0.407726 0.576914 + C 0.717480 0.406993 0.576914 + C 0.742515 0.431308 0.576768 + C 0.766825 0.430578 0.576699 + C 0.791854 0.454900 0.576490 + C 0.816170 0.454180 0.576353 + C 0.841189 0.478512 0.576079 + C 0.865512 0.477808 0.575886 + C 0.890520 0.502154 0.575552 + C 0.914852 0.501470 0.575308 + C 0.939845 0.525834 0.574932 + C 0.964190 0.525176 0.574662 + C 0.989163 0.549562 0.574264 + C 0.013521 0.548935 0.574003 + C 0.038477 0.573343 0.573622 + C 0.062850 0.572746 0.573403 + C 0.087790 0.597174 0.573069 + C 0.112177 0.596603 0.572920 + C 0.137104 0.621045 0.572646 + C 0.161502 0.620492 0.572573 + C 0.186424 0.644940 0.572359 + C 0.210826 0.644393 0.572354 + C 0.235749 0.668843 0.572196 + C 0.260152 0.668292 0.572247 + C 0.285079 0.692734 0.572128 + C 0.309479 0.692174 0.572209 + C 0.334414 0.716605 0.572115 + C 0.358808 0.716027 0.572213 + C 0.383752 0.740444 0.572145 + C 0.408140 0.739847 0.572247 + C 0.433093 0.764251 0.572196 + C 0.457477 0.763638 0.572295 + C 0.482439 0.788026 0.572273 + C 0.506817 0.787395 0.572363 + C 0.531789 0.811772 0.572372 + C 0.556162 0.811125 0.572444 + C 0.581140 0.835489 0.572474 + C 0.605509 0.834831 0.572517 + C 0.630495 0.859187 0.572551 + C 0.654865 0.858527 0.572543 + C 0.679853 0.882879 0.572577 + C 0.804436 0.004415 0.572654 + C 0.829444 0.028760 0.572731 + C 0.853850 0.028188 0.572504 + C 0.878858 0.052539 0.572586 + C 0.903281 0.052003 0.572372 + C 0.928287 0.076364 0.572457 + C 0.952725 0.075862 0.572269 + C 0.977727 0.100234 0.572354 + C 0.002175 0.099760 0.572196 + C 0.027173 0.124144 0.572295 + C 0.051629 0.123691 0.572179 + C 0.076623 0.148084 0.572295 + C 0.101082 0.147646 0.572230 + C 0.126074 0.172044 0.572380 + C 0.150533 0.171609 0.572384 + C 0.175527 0.196007 0.572564 + C 0.199979 0.195565 0.572654 + C 0.224978 0.219956 0.572877 + C 0.249419 0.219494 0.573052 + C 0.274425 0.243875 0.573309 + C 0.298850 0.243381 0.573574 + C 0.323863 0.267746 0.573848 + C 0.348269 0.267212 0.574182 + C 0.373292 0.291563 0.574452 + C 0.397673 0.290980 0.574820 + C 0.422705 0.315318 0.575064 + C 0.447066 0.314692 0.575428 + C 0.472103 0.339020 0.575621 + C 0.496448 0.338359 0.575946 + C 0.521488 0.362678 0.576079 + C 0.545819 0.361988 0.576353 + C 0.570861 0.386302 0.576417 + C 0.595185 0.385594 0.576627 + C 0.620225 0.409904 0.576627 + C 0.644542 0.409182 0.576768 + C 0.669581 0.433493 0.576699 + C 0.693893 0.432761 0.576768 + C 0.718928 0.457077 0.576627 + C 0.743237 0.456345 0.576627 + C 0.768265 0.480666 0.576421 + C 0.792578 0.479939 0.576348 + C 0.817595 0.504270 0.576083 + C 0.841911 0.503553 0.575946 + C 0.866918 0.527898 0.575621 + C 0.891239 0.527195 0.575432 + C 0.916231 0.551558 0.575056 + C 0.940563 0.550877 0.574829 + C 0.965532 0.575260 0.574435 + C 0.989876 0.574603 0.574195 + C 0.014824 0.599011 0.573810 + C 0.039181 0.598382 0.573596 + C 0.064110 0.622812 0.573249 + C 0.088479 0.622207 0.573082 + C 0.113394 0.646655 0.572795 + C 0.137774 0.646070 0.572697 + C 0.162682 0.670528 0.572474 + C 0.187069 0.669953 0.572436 + C 0.211973 0.694413 0.572273 + C 0.236363 0.693840 0.572295 + C 0.261271 0.718296 0.572179 + C 0.285659 0.717715 0.572243 + C 0.310574 0.742161 0.572162 + C 0.334956 0.741564 0.572247 + C 0.359881 0.765998 0.572196 + C 0.384259 0.765385 0.572290 + C 0.409195 0.789803 0.572269 + C 0.433567 0.789174 0.572354 + C 0.458516 0.813575 0.572359 + C 0.482884 0.812932 0.572436 + C 0.507845 0.837318 0.572474 + C 0.532211 0.836663 0.572530 + C 0.557182 0.861034 0.572594 + C 0.581546 0.860369 0.572620 + C 0.606527 0.884728 0.572697 + C 0.630891 0.884059 0.572680 + C 0.655880 0.908411 0.572753 + C 0.680246 0.907747 0.572676 + C 0.705239 0.932095 0.572740 + C 0.829921 0.053672 0.572868 + C 0.854940 0.078011 0.572945 + C 0.879356 0.077462 0.572676 + C 0.904374 0.101808 0.572748 + C 0.928808 0.101300 0.572500 + C 0.953824 0.125656 0.572573 + C 0.978273 0.125183 0.572359 + C 0.003286 0.149551 0.572436 + C 0.027746 0.149106 0.572273 + C 0.052755 0.173484 0.572363 + C 0.077222 0.173059 0.572256 + C 0.102229 0.197444 0.572367 + C 0.126699 0.197030 0.572329 + C 0.151706 0.221417 0.572466 + C 0.176173 0.221003 0.572500 + C 0.201183 0.245389 0.572671 + C 0.225643 0.244963 0.572795 + C 0.250658 0.269340 0.572988 + C 0.275104 0.268888 0.573202 + C 0.300125 0.293254 0.573416 + C 0.324553 0.292765 0.573716 + C 0.349581 0.317119 0.573934 + C 0.373987 0.316584 0.574294 + C 0.399022 0.340926 0.574499 + C 0.423404 0.340343 0.574884 + C 0.448442 0.364672 0.575056 + C 0.472806 0.364045 0.575432 + C 0.497847 0.388366 0.575552 + C 0.522191 0.387703 0.575886 + C 0.547234 0.412018 0.575946 + C 0.571567 0.411329 0.576220 + C 0.596609 0.435642 0.576211 + C 0.620931 0.434932 0.576421 + C 0.645971 0.459244 0.576348 + C 0.670288 0.458520 0.576490 + C 0.695322 0.482836 0.576353 + C 0.719636 0.482108 0.576417 + C 0.744662 0.506429 0.576220 + C 0.768974 0.505699 0.576211 + C 0.793991 0.530031 0.575950 + C 0.818306 0.529305 0.575878 + C 0.843309 0.553649 0.575561 + C 0.867627 0.552933 0.575428 + C 0.892614 0.577297 0.575064 + C 0.916937 0.576595 0.574884 + C 0.941904 0.600979 0.574499 + C 0.966237 0.600299 0.574298 + C 0.991181 0.624707 0.573921 + C 0.015525 0.624050 0.573724 + C 0.040447 0.648482 0.573382 + C 0.064801 0.647849 0.573215 + C 0.089707 0.672299 0.572932 + C 0.114072 0.671686 0.572813 + C 0.138966 0.696148 0.572594 + C 0.163338 0.695549 0.572530 + C 0.188229 0.720017 0.572372 + C 0.212605 0.719422 0.572363 + C 0.237496 0.743888 0.572256 + C 0.261871 0.743289 0.572295 + C 0.286770 0.767749 0.572230 + C 0.311142 0.767138 0.572303 + C 0.336049 0.791584 0.572277 + C 0.360416 0.790957 0.572363 + C 0.385337 0.815389 0.572372 + C 0.409697 0.814743 0.572457 + C 0.434633 0.839157 0.572500 + C 0.458990 0.838500 0.572573 + C 0.483940 0.862896 0.572646 + C 0.508295 0.862226 0.572697 + C 0.533260 0.886606 0.572795 + C 0.557614 0.885928 0.572813 + C 0.582591 0.910292 0.572932 + C 0.606947 0.909613 0.572902 + C 0.631935 0.933966 0.573022 + C 0.656295 0.933293 0.572937 + C 0.681291 0.957636 0.573044 + C 0.705658 0.956977 0.572898 + C 0.730661 0.981318 0.572988 + C 0.855457 0.102942 0.573121 + C 0.880485 0.127277 0.573176 + C 0.904908 0.126749 0.572868 + C 0.929935 0.151093 0.572920 + C 0.954378 0.150607 0.572646 + C 0.979403 0.174962 0.572697 + C 0.003860 0.174512 0.572474 + C 0.028882 0.198877 0.572530 + C 0.053350 0.198455 0.572372 + C 0.078370 0.222828 0.572444 + C 0.102844 0.222424 0.572354 + C 0.127863 0.246802 0.572444 + C 0.152339 0.246406 0.572432 + C 0.177359 0.270786 0.572543 + C 0.201832 0.270386 0.572611 + C 0.226855 0.294759 0.572740 + C 0.251318 0.294341 0.572898 + C 0.276346 0.318709 0.573044 + C 0.300794 0.318261 0.573288 + C 0.325827 0.342618 0.573442 + C 0.350257 0.342130 0.573767 + C 0.375294 0.366475 0.573921 + C 0.399700 0.365938 0.574298 + C 0.424741 0.390272 0.574435 + C 0.449124 0.389687 0.574829 + C 0.474166 0.414010 0.574932 + C 0.498529 0.413381 0.575308 + C 0.523573 0.437701 0.575360 + C 0.547919 0.437035 0.575693 + C 0.572961 0.461351 0.575681 + C 0.597295 0.460659 0.575950 + C 0.622335 0.484972 0.575878 + C 0.646658 0.484261 0.576083 + C 0.671692 0.508578 0.575946 + C 0.696011 0.507856 0.576079 + C 0.721038 0.532180 0.575886 + C 0.745353 0.531452 0.575946 + C 0.770368 0.555784 0.575693 + C 0.794683 0.555056 0.575681 + C 0.819685 0.579399 0.575372 + C 0.844001 0.578678 0.575300 + C 0.868988 0.603039 0.574949 + C 0.893308 0.602328 0.574820 + C 0.918271 0.626709 0.574452 + C 0.942597 0.626014 0.574294 + C 0.967538 0.650420 0.573934 + C 0.991874 0.649744 0.573767 + C 0.016791 0.674174 0.573442 + C 0.041135 0.673519 0.573292 + C 0.066034 0.697969 0.573022 + C 0.090386 0.697334 0.572902 + C 0.115271 0.721798 0.572697 + C 0.139632 0.721177 0.572620 + C 0.164511 0.745651 0.572474 + C 0.188874 0.745036 0.572444 + C 0.213754 0.769512 0.572354 + C 0.238118 0.768897 0.572367 + C 0.263001 0.793365 0.572329 + C 0.287364 0.792742 0.572380 + C 0.312257 0.817200 0.572384 + C 0.336614 0.816561 0.572457 + C 0.361522 0.841005 0.572504 + C 0.385872 0.840347 0.572586 + C 0.410796 0.864773 0.572676 + C 0.435142 0.864102 0.572748 + C 0.460082 0.888506 0.572868 + C 0.484427 0.887824 0.572920 + C 0.509384 0.912210 0.573069 + C 0.533727 0.911520 0.573082 + C 0.558701 0.935890 0.573249 + C 0.583047 0.935198 0.573215 + C 0.608034 0.959552 0.573382 + C 0.632383 0.958864 0.573292 + C 0.657382 0.983208 0.573442 + C 0.681738 0.982533 0.573288 + C 0.706745 0.006871 0.573416 + C 0.731112 0.006216 0.573202 + C 0.756125 0.030550 0.573309 + C 0.881044 0.152228 0.573382 + C 0.906080 0.176562 0.573403 + C 0.930506 0.176051 0.573069 + C 0.955540 0.200394 0.573082 + C 0.979988 0.199926 0.572795 + C 0.005019 0.224280 0.572813 + C 0.029481 0.223848 0.572594 + C 0.054510 0.248211 0.572620 + C 0.078984 0.247807 0.572474 + C 0.104011 0.272177 0.572517 + C 0.128491 0.271787 0.572444 + C 0.153517 0.296160 0.572500 + C 0.177997 0.295775 0.572513 + C 0.203026 0.320148 0.572577 + C 0.227500 0.319752 0.572676 + C 0.252531 0.344120 0.572753 + C 0.276997 0.343706 0.572937 + C 0.302031 0.368065 0.573022 + C 0.326482 0.367617 0.573292 + C 0.351518 0.391964 0.573382 + C 0.375950 0.391474 0.573724 + C 0.400990 0.415813 0.573810 + C 0.425396 0.415273 0.574195 + C 0.450438 0.439602 0.574264 + C 0.474824 0.439013 0.574662 + C 0.499866 0.463335 0.574692 + C 0.524230 0.462701 0.575068 + C 0.549271 0.487019 0.575047 + C 0.573621 0.486353 0.575372 + C 0.598657 0.510669 0.575300 + C 0.622993 0.509975 0.575561 + C 0.648026 0.534295 0.575428 + C 0.672353 0.533583 0.575621 + C 0.697378 0.557906 0.575432 + C 0.721700 0.557187 0.575552 + C 0.746715 0.581518 0.575308 + C 0.771034 0.580794 0.575360 + C 0.796034 0.605138 0.575068 + C 0.820353 0.604414 0.575047 + C 0.845338 0.628776 0.574722 + C 0.869655 0.628056 0.574645 + C 0.894621 0.652438 0.574298 + C 0.918943 0.651732 0.574182 + C 0.943883 0.676136 0.573848 + C 0.968212 0.675447 0.573716 + C 0.993129 0.699875 0.573416 + C 0.017467 0.699205 0.573288 + C 0.042363 0.723655 0.573044 + C 0.066707 0.723002 0.572937 + C 0.091589 0.747468 0.572753 + C 0.115941 0.746831 0.572680 + C 0.140812 0.771307 0.572551 + C 0.165168 0.770678 0.572517 + C 0.190036 0.795158 0.572444 + C 0.214393 0.794529 0.572444 + C 0.239266 0.819007 0.572432 + C 0.263621 0.818372 0.572466 + C 0.288503 0.842840 0.572500 + C 0.312854 0.842195 0.572564 + C 0.337748 0.866647 0.572654 + C 0.362093 0.865983 0.572731 + C 0.387005 0.890417 0.572868 + C 0.411344 0.889738 0.572945 + C 0.436276 0.914152 0.573121 + C 0.460610 0.913458 0.573176 + C 0.485561 0.937850 0.573382 + C 0.509896 0.937150 0.573403 + C 0.534865 0.961522 0.573622 + C 0.559200 0.960818 0.573596 + C 0.584187 0.985176 0.573810 + C 0.608525 0.984474 0.573724 + C 0.633526 0.008819 0.573921 + C 0.657871 0.008127 0.573767 + C 0.682881 0.032462 0.573934 + C 0.707235 0.031788 0.573716 + C 0.732252 0.056117 0.573848 + C 0.756620 0.055469 0.573574 + C 0.781643 0.079797 0.573677 + C 0.906676 0.201532 0.573622 + C 0.931715 0.225868 0.573596 + C 0.956145 0.225367 0.573249 + C 0.981181 0.249713 0.573215 + C 0.005632 0.249259 0.572932 + C 0.030667 0.273614 0.572902 + C 0.055132 0.273194 0.572697 + C 0.080165 0.297558 0.572680 + C 0.104640 0.297162 0.572551 + C 0.129671 0.321531 0.572543 + C 0.154152 0.321147 0.572500 + C 0.179181 0.345519 0.572500 + C 0.203662 0.345135 0.572543 + C 0.228693 0.369505 0.572551 + C 0.253169 0.369109 0.572680 + C 0.278202 0.393474 0.572697 + C 0.302667 0.393054 0.572902 + C 0.327702 0.417410 0.572932 + C 0.352152 0.416953 0.573215 + C 0.377189 0.441299 0.573249 + C 0.401619 0.440800 0.573596 + C 0.426659 0.465136 0.573622 + C 0.451065 0.464587 0.574003 + C 0.476106 0.488914 0.574011 + C 0.500491 0.488319 0.574396 + C 0.525530 0.512641 0.574362 + C 0.549896 0.512003 0.574722 + C 0.574933 0.536323 0.574645 + C 0.599282 0.535653 0.574949 + C 0.624314 0.559973 0.574820 + C 0.648652 0.559281 0.575064 + C 0.673675 0.583605 0.574884 + C 0.698006 0.582897 0.575056 + C 0.723019 0.607229 0.574829 + C 0.747344 0.606511 0.574932 + C 0.772345 0.630856 0.574662 + C 0.796667 0.630135 0.574692 + C 0.821653 0.654494 0.574396 + C 0.845974 0.653777 0.574362 + C 0.870939 0.678156 0.574054 + C 0.895260 0.677445 0.573977 + C 0.920202 0.701847 0.573677 + C 0.944532 0.701151 0.573574 + C 0.969450 0.725575 0.573309 + C 0.993785 0.724898 0.573202 + C 0.018681 0.749342 0.572988 + C 0.043023 0.748682 0.572898 + C 0.067905 0.773144 0.572740 + C 0.092253 0.772499 0.572676 + C 0.117123 0.796975 0.572577 + C 0.141474 0.796338 0.572543 + C 0.166337 0.820818 0.572500 + C 0.190691 0.820185 0.572500 + C 0.215556 0.844665 0.572513 + C 0.239906 0.844026 0.572543 + C 0.264780 0.868498 0.572611 + C 0.289128 0.867851 0.572671 + C 0.314014 0.892309 0.572795 + C 0.338355 0.891645 0.572877 + C 0.363259 0.916085 0.573052 + C 0.387593 0.915404 0.573142 + C 0.412518 0.939824 0.573365 + C 0.436847 0.939126 0.573442 + C 0.461793 0.963524 0.573699 + C 0.486119 0.962815 0.573741 + C 0.511086 0.987190 0.574011 + C 0.535413 0.986479 0.574003 + C 0.560398 0.010837 0.574264 + C 0.584727 0.010124 0.574195 + C 0.609728 0.034468 0.574435 + C 0.634062 0.033762 0.574298 + C 0.659075 0.058096 0.574499 + C 0.683416 0.057402 0.574294 + C 0.708437 0.081729 0.574452 + C 0.732789 0.081057 0.574182 + C 0.757817 0.105380 0.574298 + C 0.782184 0.104739 0.573977 + C 0.807217 0.129062 0.574054 + C 0.932346 0.250855 0.573810 + C 0.957385 0.275192 0.573724 + C 0.981815 0.274702 0.573382 + C 0.006852 0.299051 0.573292 + C 0.031303 0.298603 0.573022 + C 0.056337 0.322962 0.572937 + C 0.080802 0.322546 0.572753 + C 0.105832 0.346914 0.572676 + C 0.130308 0.346520 0.572577 + C 0.155336 0.370892 0.572513 + C 0.179816 0.370506 0.572500 + C 0.204843 0.394879 0.572444 + C 0.229322 0.394489 0.572517 + C 0.254349 0.418859 0.572474 + C 0.278823 0.418455 0.572620 + C 0.303852 0.442818 0.572594 + C 0.328315 0.442386 0.572813 + C 0.353345 0.466740 0.572795 + C 0.377794 0.466273 0.573082 + C 0.402827 0.490617 0.573069 + C 0.427255 0.490104 0.573403 + C 0.452288 0.514438 0.573382 + C 0.476696 0.513881 0.573741 + C 0.501730 0.538206 0.573699 + C 0.526116 0.537605 0.574054 + C 0.551148 0.561927 0.573977 + C 0.575516 0.561288 0.574298 + C 0.600544 0.585609 0.574182 + C 0.624895 0.584937 0.574452 + C 0.649917 0.609265 0.574294 + C 0.674258 0.608571 0.574499 + C 0.699272 0.632905 0.574298 + C 0.723605 0.632199 0.574435 + C 0.748606 0.656543 0.574195 + C 0.772935 0.655829 0.574264 + C 0.797920 0.680189 0.574003 + C 0.822248 0.679475 0.574011 + C 0.847213 0.703851 0.573741 + C 0.871540 0.703143 0.573699 + C 0.896486 0.727541 0.573442 + C 0.920816 0.726843 0.573365 + C 0.945741 0.751263 0.573142 + C 0.970076 0.750582 0.573052 + C 0.994978 0.775022 0.572877 + C 0.019320 0.774358 0.572795 + C 0.044206 0.798817 0.572671 + C 0.068553 0.798167 0.572611 + C 0.093427 0.822641 0.572543 + C 0.117777 0.822002 0.572513 + C 0.142644 0.846482 0.572500 + C 0.166995 0.845847 0.572500 + C 0.191861 0.870329 0.572543 + C 0.216212 0.869692 0.572577 + C 0.241082 0.894168 0.572676 + C 0.265428 0.893521 0.572740 + C 0.290310 0.917985 0.572898 + C 0.314651 0.917324 0.572988 + C 0.339549 0.941770 0.573202 + C 0.363884 0.941092 0.573309 + C 0.388803 0.965516 0.573574 + C 0.413131 0.964821 0.573677 + C 0.438072 0.989220 0.573977 + C 0.462395 0.988511 0.574054 + C 0.487360 0.012890 0.574362 + C 0.511680 0.012172 0.574396 + C 0.536666 0.036532 0.574692 + C 0.560988 0.035811 0.574662 + C 0.585988 0.060155 0.574932 + C 0.610314 0.059438 0.574829 + C 0.635328 0.083770 0.575056 + C 0.659657 0.083062 0.574884 + C 0.684681 0.107386 0.575064 + C 0.709020 0.106693 0.574820 + C 0.734051 0.131013 0.574949 + C 0.758402 0.130344 0.574645 + C 0.783437 0.154662 0.574722 + C 0.807803 0.154026 0.574362 + C 0.832842 0.178347 0.574396 + C 0.551689 0.586869 0.573677 + C 0.576713 0.611197 0.573574 + C 0.601080 0.610549 0.573848 + C 0.626098 0.634879 0.573716 + C 0.650452 0.634205 0.573934 + C 0.675463 0.658539 0.573767 + C 0.699807 0.657847 0.573921 + C 0.724807 0.682191 0.573724 + C 0.749146 0.681491 0.573810 + C 0.774132 0.705847 0.573596 + C 0.798467 0.705143 0.573622 + C 0.823438 0.729517 0.573403 + C 0.847771 0.728815 0.573382 + C 0.872723 0.753209 0.573176 + C 0.897059 0.752516 0.573121 + C 0.921990 0.776929 0.572945 + C 0.946329 0.776250 0.572868 + C 0.971240 0.800684 0.572731 + C 0.995585 0.800021 0.572654 + C 0.020480 0.824473 0.572564 + C 0.044831 0.823827 0.572500 + C 0.069712 0.848294 0.572466 + C 0.094067 0.847660 0.572432 + C 0.118940 0.872136 0.572444 + C 0.143297 0.871509 0.572444 + C 0.168165 0.895989 0.572517 + C 0.192521 0.895360 0.572551 + C 0.217394 0.919836 0.572680 + C 0.241745 0.919197 0.572753 + C 0.266625 0.943663 0.572937 + C 0.290970 0.943012 0.573044 + C 0.315867 0.967462 0.573288 + C 0.340203 0.966791 0.573416 + C 0.365121 0.991219 0.573716 + C 0.389450 0.990531 0.573848 + C 0.414390 0.014934 0.574182 + C 0.438714 0.014229 0.574298 + C 0.463677 0.038609 0.574645 + C 0.487995 0.037892 0.574722 + C 0.512982 0.062252 0.575047 + C 0.537298 0.061528 0.575068 + C 0.562301 0.085872 0.575360 + C 0.586619 0.085148 0.575308 + C 0.611634 0.109480 0.575552 + C 0.635955 0.108760 0.575432 + C 0.660980 0.133083 0.575621 + C 0.685307 0.132373 0.575428 + C 0.710340 0.156691 0.575561 + C 0.734676 0.155998 0.575300 + C 0.759714 0.180314 0.575372 + C 0.784062 0.179647 0.575047 + C 0.809103 0.203965 0.575068 + C 0.833468 0.203334 0.574692 + C 0.858511 0.227655 0.574662 + C 0.577208 0.636117 0.573309 + C 0.602221 0.660451 0.573202 + C 0.602674 0.685349 0.572988 + C 0.627675 0.709690 0.572898 + C 0.628093 0.734573 0.572740 + C 0.653086 0.758918 0.572676 + C 0.653481 0.783788 0.572577 + C 0.678470 0.808140 0.572543 + C 0.678853 0.833004 0.572500 + C 0.703839 0.857358 0.572500 + C 0.704224 0.882222 0.572513 + C 0.729215 0.906573 0.572543 + C 0.729615 0.931447 0.572611 + C 0.754611 0.955795 0.572671 + C 0.755038 0.980681 0.572795 + C 0.780043 0.005022 0.572877 + C 0.780507 0.029925 0.573052 + C 0.805522 0.054260 0.573142 + C 0.806028 0.079184 0.573365 + C 0.831054 0.103514 0.573442 + C 0.831602 0.128459 0.573699 + C 0.856637 0.152786 0.573741 + C 0.857229 0.177753 0.574011 + C 0.882268 0.202079 0.574003 + C 0.882895 0.227066 0.574264 + C 0.907936 0.251393 0.574195 + + PROJECTORS + 2188*1 + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz + C pz diff --git a/examples/TaAs/wt.in-bands b/examples/TaAs/wt.in-bands index 90cda676..7151f640 100644 --- a/examples/TaAs/wt.in-bands +++ b/examples/TaAs/wt.in-bands @@ -1,5 +1,5 @@ &TB_FILE -Hrfile = "Wannier90_hr.dat" +Hrfile = "wannier90_hr.dat" Package='VASP' / diff --git a/examples/TaAs/wt.in-chirality b/examples/TaAs/wt.in-chirality new file mode 100644 index 00000000..9e40d292 --- /dev/null +++ b/examples/TaAs/wt.in-chirality @@ -0,0 +1,83 @@ +&TB_FILE +Hrfile = "wannier90_hr.dat" +Package='VASP' +/ + + +!> bulk band structure calculation flag +&CONTROL +WeylChirality_calc = T +/ + +&SYSTEM +NumOccupied = 16 ! NumOccupied +SOC = 1 ! without soc : SOC=0; with soc : SOC=1 +E_FERMI = 6.8549 ! e-fermi +/ + +&PARAMETERS +Nk1 = 41 ! number k points +Nk2 = 41 ! number k points +/ + +LATTICE +Angstrom +3.437000 -0.000000 -0.000000 +-0.000000 3.437000 0.000000 +-1.718500 -1.718500 5.828000 + +ATOM_POSITIONS +4 ! number of atoms for projectors +Direct ! Direct or Cartisen coordinate + Ta 0.25000 0.75000 0.50000 + Ta 0.00000 0.00000 0.00000 + As 0.66700 0.16700 0.33400 + As 0.41700 0.41700 0.83400 + + +PROJECTORS +5 5 3 3 ! number of projectors +Ta dz2 dxz dyz dx2-y2 dxy +Ta dz2 dxz dyz dx2-y2 dxy +As pz px py +As pz px py + +SURFACE + 1 0 0 + 0 1 0 + +KCUBE_BULK +-0.50 -0.50 -0.50 ! Original point for 3D k plane + 1.00 0.00 0.00 ! The first vector to define 3d k space plane + 0.00 1.00 0.00 ! The second vector to define 3d k space plane + 0.00 0.00 1.00 ! The third vector to define 3d k cube + + +WEYL_CHIRALITY +24 ! Num_Weyls +Cartesian ! Direct or Cartesian coordinate +0.004 ! Radius of the ball surround a Weyl point + -0.93249310 -0.01476294 0.00000008 + 0.93249310 0.01476294 0.00000003 + -0.93249310 0.01476294 0.00000007 + 0.93249310 -0.01476294 -0.00000004 + -0.51671210 0.03600881 -0.31744043 + -0.51671210 -0.03600881 -0.31744043 + -0.51671209 0.03600881 0.31744044 + -0.03600881 0.51671210 -0.31744044 + -0.03600882 0.51671210 0.31744043 + 0.03600882 0.51671210 0.31744043 + -0.03600882 -0.51671209 0.31744044 + -0.51671209 -0.03600882 0.31744043 + -0.01476294 -0.93249311 0.00000000 + 0.01476294 0.93249310 0.00000003 + 0.01476294 -0.93249310 -0.00000001 + 0.03600882 -0.51671209 -0.31744044 + 0.03600881 -0.51671209 0.31744043 + -0.03600882 -0.51671209 -0.31744044 + 0.03600882 0.51671209 -0.31744043 + 0.51671210 -0.03600881 -0.31744043 + 0.51671210 0.03600881 -0.31744043 + 0.51671209 -0.03600882 0.31744044 + 0.51671209 0.03600881 0.31744044 + -0.01476294 0.93249310 0.00000006 diff --git a/examples/TaAs/wt.in-findnodes b/examples/TaAs/wt.in-findnodes index e898347a..11e09a52 100644 --- a/examples/TaAs/wt.in-findnodes +++ b/examples/TaAs/wt.in-findnodes @@ -1,5 +1,5 @@ &TB_FILE -Hrfile = "Wannier90_hr.dat" +Hrfile = "wannier90_hr.dat" Package='VASP' / diff --git a/examples/WC/wt.in b/examples/WC/wt.in index e1ec483f..e3c35eaa 100644 --- a/examples/WC/wt.in +++ b/examples/WC/wt.in @@ -30,18 +30,18 @@ SURFACE ! See doc for details (100) surface &CONTROL !> bulk band structure calculation flag BulkBand_calc = F -FindNodes_calc = F +FindNodes_calc = T BulkFS_calc = F -BulkFS_plane_calc = T +BulkFS_plane_calc = F BulkGap_cube_calc = F BulkGap_plane_calc = F SlabBand_calc = F WireBand_calc = F -SlabSS_calc = T +SlabSS_calc = F SlabArc_calc = F SlabSpintexture_calc = F Wanniercenter_calc = F -BerryPhase_calc = T +BerryPhase_calc = F BerryCurvature_calc = F EffectiveMass_calc = F Translate_to_WS_calc = F @@ -64,9 +64,9 @@ E_arc = 0.0 ! energy for calculate Fermi Arc OmegaNum = 200 ! omega number OmegaMin = -0.6 ! energy interval OmegaMax = 0.5 ! energy interval -Nk1 = 21 ! number k points -Nk2 = 21 ! number k points -Nk3 = 21 ! number k points +Nk1 = 6 ! number k points +Nk2 = 6 ! number k points +Nk3 = 6 ! number k points NP = 2 ! number of principle layers Gap_threshold = 0.01 ! threshold for GapCube output / diff --git a/examples/WSe2-1Tp/wt.in b/examples/WSe2-1Tp/wt.in index e0c8977f..63238f47 100644 --- a/examples/WSe2-1Tp/wt.in +++ b/examples/WSe2-1Tp/wt.in @@ -8,24 +8,26 @@ Package = 'VASP' &CONTROL BulkBand_calc = T SlabBand_calc = F +JDos_calc = F +Dos_calc = F SlabSS_calc = T -wanniercenter_calc = T +wanniercenter_calc = F / &SYSTEM -NSLAB = 10 -NumOccupied = 28 ! NumOccupied +NSLAB = 16 +NumOccupied = 36 ! NumOccupied SOC = 1 ! soc E_FERMI = -2.9600 ! e-fermi / &PARAMETERS OmegaNum = 301 ! omega number -OmegaMin = -1.0 ! energy interval -OmegaMax = 0.5 ! energy interval +OmegaMin = 3.0 ! energy interval +OmegaMax = 3.8 ! energy interval Nk1 = 61 ! number k points Nk2 = 101 ! number k points -NP = 1 ! number of principle layers +NP = 2 ! number of principle layers / LATTICE @@ -54,9 +56,8 @@ Se pz px py Se pz px py SURFACE - 0 1 0 +-2 1 0 0 0 1 - 1 0 0 KPATH_BULK ! k point path 4 ! number of k line only for bulk band diff --git a/examples/input.dat-2d b/examples/input.dat-2d deleted file mode 100644 index e5385456..00000000 --- a/examples/input.dat-2d +++ /dev/null @@ -1,78 +0,0 @@ -&TB_FILE -!Hrfile = YbMnBi2_TB_nsoc_hr.dat -Hrfile = new_hr.dat -/ - - -&CONTROL -!> bulk band structure calculation flag -BulkBand_calc = T -RibbonBand_calc = F -SlabSS_calc = F -Dos_calc = T -wanniercenter_calc = F -/ - -&SYSTEM -NSLAB = 10 -NumOccupied = 8 ! NumOccupied -SOC = 1 ! soc -E_FERMI = -0.2 ! e-fermi -surf_onsite= 0.0 ! surf_onsite -/ - -&PARAMETERS -Nk1 = 601 ! number k points -Nk2 = 601 ! number k points -NP = 1 ! number of principle layers -OmegaMin=-2 -OmegaMax= 2 -OmegaNum= 4001 -/ - -LATTICE -Angstrom - 4.460 0.000000 ! crystal lattice information - 0.000 4.460000 - -ATOM_POSITIONS -4 ! number of atoms for projectors -Direct ! Direct or Cartisen coordinate - Bi 0.000000000 0.000000000 0.000000000 ! atom position - Bi 0.500000000 0.500000000 0.000000000 ! atom position - Yb 0.500000000 0.000000000 0.243000000 ! atom position - Yb 0.000000000 0.500000000 -0.243000000 ! atom position - -PROJECTORS -3 3 5 5 ! number of projectors for each atom -Bi px py pz -Bi px py pz -Yb dxy dyz dxz dx2-y2 dz2 -Yb dxy dyz dxz dx2-y2 dz2 - -EDGE ! See doc for details - 1 0 - 0 1 - -KPATH_BULK ! k point path -3 ! numker of k line for 2D case -G 0.0 0.0 M 0.5 0.5 -M 0.5 0.5 X 0.5 0.0 ! k path for 2D case -X 0.5 0.0 G 0.0 0.0 ! k path for 2D case - -3 ! numker of k line for 2D case -G 0.0 0.0 X 0.5 0.0 -X 0.5 0.0 M 0.5 0.5 ! k path for 2D case -M 0.5 0.5 G 0.0 0.0 ! k path for 2D case - -KPATH_RIBBON ! k point path -2 ! numker of k line for 2D case -X -0.5 G 0.0 ! k path for 2D case -G 0.0 X 0.5 - - -KPLANE_BULK --0.5 -0.5 ! Original point for 2D k plane - 1.0 0.0 ! The first vector to define 2D k plane - 0.0 1.0 ! The second vector to define 2D k plane for arc plots - diff --git a/src/2D_TSC.f90 b/src/2D_TSC.f90 new file mode 100644 index 00000000..378d06f0 --- /dev/null +++ b/src/2D_TSC.f90 @@ -0,0 +1,894 @@ +subroutine ham_slab_surface_zeeman(k, Hamk_slab_surf_zeeman) + ! This subroutine is used to caculate Hamiltonian for + ! slab system with surface Zeeman splitting. + ! + ! History + ! 4/18/2010 by Quansheng Wu + ! 6/21/2022 by Aiyun Luo + ! 4/07/2024 by Jingnan Hu + ! Copyright (c) 2010 QuanSheng Wu. All rights reserved. + + use para + implicit none + + ! loop index + integer :: i1, i2, i, ii + + ! wave vector in 2d + real(Dp), intent(in) :: k(2) + + ! Hamiltonian of slab system with surface Zeeman splitting + complex(Dp), intent(out) :: Hamk_slab_surf_zeeman(Num_wann*nslab,Num_wann*nslab) + + ! the factor 2 is induced by spin + complex(Dp), allocatable :: Hij(:, :, :) + + allocate( Hij(-ijmax:ijmax,Num_wann,Num_wann)) + + call ham_qlayer2qlayer2(k,Hij) + + Hamk_slab_surf_zeeman= 0.0d0 + ! i1 column index + do i1=1, nslab + ! i2 row index + do i2=1, nslab + if (abs(i2-i1).le.ijmax)then + Hamk_slab_surf_zeeman((i2-1)*Num_wann+1:(i2-1)*Num_wann+Num_wann,& + (i1-1)*Num_wann+1:(i1-1)*Num_wann+Num_wann )& + = Hij(i1-i2,1:Num_wann,1:Num_wann) + endif + enddo ! i2 + enddo ! i1 + + !> There are several types of Zeeman splitting + + !> 1. Add Zeeman splitting only in the bottom slab + if(Add_surf_zeeman_field == 1) then + do i=1, Num_wann/2 + ii= i + !>Bz_surf + Hamk_slab_surf_zeeman(ii, ii)= Hamk_slab_surf_zeeman(ii, ii)+ Bz_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)- Bz_surf* eV2Hartree + !>Bx_surf, By_surf + Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)+ Bx_surf* eV2Hartree- zi*By_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)+ Bx_surf* eV2Hartree+ zi*By_surf* eV2Hartree + enddo + endif + + !> 2. Add Zeeman splitting only in the top slab + if(Add_surf_zeeman_field == 2) then + do i=1, Num_wann/2 + ii= (nslab-1)*Num_wann+ i + !>Bz_surf + Hamk_slab_surf_zeeman(ii, ii)= Hamk_slab_surf_zeeman(ii, ii)+ Bz_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)- Bz_surf* eV2Hartree + !>Bx_surf, By_surf + Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)+ Bx_surf* eV2Hartree- zi*By_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)+ Bx_surf* eV2Hartree+ zi*By_surf* eV2Hartree + enddo + endif + + !> 3. Add Zeeman splitting only in top & bottom two slab + if(Add_surf_zeeman_field == 3) then + do i=1, Num_wann/2 + ii= i + !>Bz_surf + Hamk_slab_surf_zeeman(ii, ii)= Hamk_slab_surf_zeeman(ii, ii)+ Bz_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)- Bz_surf* eV2Hartree + !>Bx_surf, By_surf + Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)+ Bx_surf* eV2Hartree- zi*By_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)+ Bx_surf* eV2Hartree+ zi*By_surf* eV2Hartree + enddo + do i=1, Num_wann/2 + ii= (nslab-1)*Num_wann+ i + !>Bz_surf + Hamk_slab_surf_zeeman(ii, ii)= Hamk_slab_surf_zeeman(ii, ii)+ Bz_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii+Num_wann/2)- Bz_surf* eV2Hartree + !>Bx_surf, By_surf + Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)= Hamk_slab_surf_zeeman(ii, ii+Num_wann/2)+ Bx_surf* eV2Hartree- zi*By_surf* eV2Hartree + Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)= Hamk_slab_surf_zeeman(ii+Num_wann/2, ii)+ Bx_surf* eV2Hartree+ zi*By_surf* eV2Hartree + enddo + endif + + ! check hermitcity + do i1=1,nslab*Num_wann + do i2=1,nslab*Num_wann + if(abs(Hamk_slab_surf_zeeman(i1,i2)-conjg(Hamk_slab_surf_zeeman(i2,i1))).ge.1e-6)then + write(stdout,*)'there are something wrong with Hamk_slab_surf_zeeman' + stop + endif + enddo + enddo + + deallocate(Hij) + return + end subroutine ham_slab_surface_zeeman + + subroutine ham_slab_BdG(k,Hamk_slab_BdG) + ! This subroutine is used to caculate Hamiltonian for + ! slab BdG system . + ! + ! History + ! 03/30/2022 by Aiyun Luo + ! 4/07/2024 by Jingnan Hu + + use para + use Kronecker, only : KronProd ! Kroneker product + + implicit none + + ! loop index + integer :: i1, i2 + + ! wave vector in 2d + real(Dp), intent(in) :: k(2) + + !real(Dp) :: k1(2) + + + ! Hamiltonian of slab BdG system + complex(Dp), intent(out) :: Hamk_slab_BdG(Num_wann_BdG*nslab,Num_wann_BdG*nslab) + + ! Hamiltonian of slab system with Zeeman splitting in the top or bottom surface + complex(Dp), allocatable :: Hamk_slab(:,:) + complex(Dp), allocatable :: Hamk_slab_minus(:,:) + + ! superconducting pairing strength, here we only consider the onsite s-wave pairing + complex(Dp), allocatable :: Hamk_Delta(:,:) + + ! Pauli matrices + complex(Dp) :: sigmax(2,2), sigmay(2,2), sigmaz(2,2), sigma0(2,2) + + ! indetify diagnoal matrix for construct s-wave pairing + complex(Dp), allocatable :: I_nslab(:,:) + complex(Dp), allocatable :: I_norb(:,:) + complex(Dp), allocatable :: I_mu(:,:) + complex(Dp), allocatable :: Hamk_temp(:,:) + + allocate(Hamk_slab(Num_wann*nslab,Num_wann*nslab)) + allocate(Hamk_slab_minus(Num_wann*nslab,Num_wann*nslab)) + allocate(I_nslab(nslab, nslab)) + allocate(I_norb(Num_wann/2, Num_wann/2)) + allocate(I_mu(nslab*Num_wann, nslab*Num_wann)) + allocate(Hamk_temp(Num_wann, Num_wann)) + allocate(Hamk_Delta(Num_wann*Nslab, Num_wann*Nslab)) + + Hamk_slab_BdG = 0.0d0 + Hamk_slab = 0.0d0; Hamk_slab_minus = 0.0d0 + I_nslab = 0.0d0; I_norb = 0.0d0 + I_mu = 0.0d0 + Hamk_temp = 0.0d0; Hamk_Delta = 0.0d0 + + sigmax(1,1)= (0.0d0, 0.0d0); sigmax(1,2)= (1.0d0, 0.0d0) + sigmax(2,1)= (1.0d0, 0.0d0); sigmax(2,2)= (0.0d0, 0.0d0) + + sigmay(1,1)= (0.0d0, 0.0d0); sigmay(1,2)= (0.0d0,-1.0d0) + sigmay(2,1)= (0.0d0, 1.0d0); sigmay(2,2)= (0.0d0, 0.0d0) + + sigmaz(1,1)= (1.0d0, 0.0d0); sigmaz(1,2)= ( 0.0d0, 0.0d0) + sigmaz(2,1)= (0.0d0, 0.0d0); sigmaz(2,2)= (-1.0d0, 0.0d0) + + sigma0(1,1)= (1.0d0, 0.0d0); sigma0(1,2)= (0.0d0, 0.0d0) + sigma0(2,1)= (0.0d0, 0.0d0); sigma0(2,2)= (1.0d0, 0.0d0) + + call ham_slab_surface_zeeman( k, Hamk_slab) + call ham_slab_surface_zeeman(-k, Hamk_slab_minus) + + !> s-wave superconducting pairing for basis: up up dn dn (wannier90_hr.dat from vasp) + !> s-wave pairing: Kron(I_nslab, Kron(i*sigmay*Delta_BdG, I_norb)) + call eye_mat(Num_wann/2, I_norb) + call eye_mat(nslab*Num_wann,I_mu) + + if(Add_Delta_BdG == 1) then + I_nslab(1,1)=1.0d0 + endif + + if(Add_Delta_BdG == 2) then + I_nslab(nslab,nslab)=1.0d0 + endif + + if(Add_Delta_BdG == 3) then + call eye_mat(nslab, I_nslab) + endif + + Hamk_temp= KronProd(zi*Delta_BdG*sigmay*eV2Hartree, I_norb) + Hamk_Delta= KronProd(I_nslab, Hamk_temp) + + !> constructing the slab BdG Hamiltonian with top or bottom surface exchange field + !> basis: C1^dag, C2^dag, C1, C2 + Hamk_slab_BdG(1:nslab*Num_wann,1:nslab*Num_wann)= Hamk_slab-mu_BdG*eV2Hartree*I_mu + Hamk_slab_BdG(nslab*Num_wann+1:nslab*Num_wann_BdG,nslab*Num_wann+1:nslab*Num_wann_BdG)= -1.0d0*conjg(Hamk_slab_minus)+mu_BdG*eV2Hartree*I_mu + !> add onsite s-wave pairing into slab BdG Hamiltonian + Hamk_slab_BdG(1:nslab*Num_wann, nslab*Num_wann+1: nslab*Num_wann_BdG)= Hamk_Delta + Hamk_slab_BdG(nslab*Num_wann+1: nslab*Num_wann_BdG, 1:nslab*Num_wann)= transpose(conjg(Hamk_Delta)) + + ! check hermitcity + do i1=1,nslab*Num_wann_BdG + do i2=1,nslab*Num_wann_BdG + if(abs(Hamk_slab_BdG(i1,i2)-conjg(Hamk_slab_BdG(i2,i1))).ge.1e-6)then + write(stdout,*)'there are something wrong with Hamk_slab_BdG' + stop + endif + enddo + enddo + + deallocate(Hamk_slab) + deallocate(Hamk_slab_minus) + deallocate(I_nslab) + deallocate(I_norb) + deallocate(Hamk_temp) + deallocate(Hamk_Delta) + return +end subroutine ham_slab_BdG + +subroutine eye_mat(ndim, A) + use para, only : Dp + implicit none + + integer, intent(in) :: ndim + complex(Dp), intent(out) :: A(ndim, ndim) + + !> loop index + integer :: i, j + + do i=1, ndim + do j=1, ndim + if(i.eq.j) then + A(i, j)= 1.0d0 + else + A(i, j)= 0.0d0 + endif + enddo ! i + enddo ! j + + return +end subroutine eye_mat + +subroutine ek_slab_BdG + !> This subroutine is used for calculating BdG energy + !> dispersion with wannier functions for 2D slab system + !> Added by Aiyun Luo at 2022/03 + ! + ! Copyright (c) 2010 QuanSheng Wu. All rights reserved. + + use wmpi + use para + implicit none + + ! loop index + integer :: i, j, l, lwork, ierr, io + + real(Dp) :: k(2), emin, emax, maxweight + + ! time measurement + real(dp) :: time_start, time_end, time_start0 + + ! parameters for zheev + real(Dp), allocatable :: rwork(:) + complex(Dp), allocatable :: work(:) + + ! eigenvalue + real(Dp), allocatable :: eigenvalue_BdG(:) + + ! energy dispersion + real(Dp),allocatable :: ekslab_BdG(:,:), ekslab_BdG_mpi(:,:) + + !> color for plot, surface state weight + real(dp), allocatable :: surf_l_weight_BdG(:, :), surf_l_weight_BdG_mpi(:, :) + real(dp), allocatable :: surf_r_weight_BdG(:, :), surf_r_weight_BdG_mpi(:, :) + + ! hamiltonian slab + complex(Dp),allocatable ::CHamk_BdG(:,:) + + lwork= 16*Nslab*Num_wann_BdG + ierr = 0 + + + allocate(eigenvalue_BdG(nslab*Num_wann_BdG)) + allocate( surf_l_weight_BdG (Nslab* Num_wann_BdG, knv2)) + allocate( surf_l_weight_BdG_mpi (Nslab* Num_wann_BdG, knv2)) + allocate( surf_r_weight_BdG (Nslab* Num_wann_BdG, knv2)) + allocate( surf_r_weight_BdG_mpi (Nslab* Num_wann_BdG, knv2)) + allocate(ekslab_BdG(Nslab*Num_wann_BdG,knv2)) + allocate(ekslab_BdG_mpi(Nslab*Num_wann_BdG,knv2)) + allocate(CHamk_BdG(nslab*Num_wann_BdG,nslab*Num_wann_BdG)) + allocate(work(lwork)) + allocate(rwork(lwork)) + + surf_l_weight_BdG= 0d0 + surf_l_weight_BdG_mpi= 0d0 + surf_r_weight_BdG= 0d0 + surf_r_weight_BdG_mpi= 0d0 + + ! sweep k + ekslab_BdG=0.0d0 + ekslab_BdG_mpi=0.0d0 + time_start= 0d0 + time_start0= 0d0 + call now(time_start0) + time_start= time_start0 + time_end = time_start0 + do i= 1+cpuid, knv2, num_cpu + if (cpuid==0.and. mod(i/num_cpu, 4)==0) & + write(stdout, '(a, i9, " /", i10, a, f10.1, "s", a, f10.1, "s")') & + ' Slabek: ik', i, knv2, ' time left', & + (knv2-i)*(time_end- time_start)/num_cpu, & + ' time elapsed: ', time_end-time_start0 + + call now(time_start) + + k= k2_path(i, :) + chamk_BdG=0.0d0 + + call ham_slab_BdG(k,Chamk_BdG) + + + eigenvalue_BdG=0.0d0 + + ! diagonal Chamk + call eigensystem_c('V', 'U', Num_wann_BdG*Nslab, CHamk_BdG, eigenvalue_BdG) + + ekslab_BdG(:,i)=eigenvalue_BdG + + ! H*chamk(:,n)=E(n)*chamk(:,n) + !> Nslab*Num_wann + !> rho(:)=abs(chamk(:,n))**2 + !> (a1 o1, o2 o3, a2, o1, o2, o3; a1 o1, o2 o3, a2, o1, o2, o3), (a1 o1, o2 o3, a2, o1, o2, o3; a1 o1, o2 o3, a2, o1, o2, o3), (a1 o1, o2 o3, a2, o1, o2, o3; a1 o1, o2 o3, a2, o1, o2, o3), + do j=1, Nslab* Num_wann_BdG + !> left is the bottom surface + do l= 1, NBottomOrbitals + io= BottomOrbitals(l) + surf_l_weight_BdG(j, i)= surf_l_weight_BdG(j, i) & + + abs(CHamk_BdG(io, j))**2 & ! first slab -- electron + + abs(CHamk_BdG(Num_wann*Nslab+io, j))**2 ! first slab -- hole + enddo ! l sweeps the selected orbitals + + !> right is the top surface + do l= 1, NTopOrbitals + io= Num_wann*(Nslab-1)+ TopOrbitals(l) + surf_r_weight_BdG(j, i)= surf_r_weight_BdG(j, i) & + + abs(CHamk_BdG(io, j))**2 & ! first slab -- electron + + abs(CHamk_BdG(Num_wann*Nslab+io, j))**2 ! first slab -- hole + enddo ! l sweeps the selected orbitals + + enddo ! j + call now(time_end) + enddo ! i + +#if defined (MPI) + call mpi_allreduce(ekslab_BdG,ekslab_BdG_mpi,size(ekslab_BdG),& + mpi_dp,mpi_sum,mpi_cmw,ierr) + call mpi_allreduce(surf_l_weight_BdG, surf_l_weight_BdG_mpi,size(surf_l_weight_BdG),& + mpi_dp,mpi_sum,mpi_cmw,ierr) + call mpi_allreduce(surf_r_weight_BdG, surf_r_weight_BdG_mpi,size(surf_r_weight_BdG),& + mpi_dp,mpi_sum,mpi_cmw,ierr) +#else + ekslab_BdG_mpi= ekslab_BdG + surf_l_weight_BdG_mpi= surf_l_weight_BdG + surf_r_weight_BdG_mpi= surf_r_weight_BdG +#endif + + ekslab_BdG_mpi= ekslab_BdG_mpi/eV2Hartree + + ekslab_BdG=ekslab_BdG_mpi + + maxweight=maxval(surf_r_weight_BdG_mpi+ surf_l_weight_BdG_mpi) + surf_l_weight_BdG= surf_l_weight_BdG_mpi/ maxweight + surf_r_weight_BdG= surf_r_weight_BdG_mpi/ maxweight + + outfileindex= outfileindex+ 1 + if(cpuid==0)then + open(unit=outfileindex, file='slabek_BdG.dat') + write(outfileindex, "('#', a10, a15, 5X, 2a16 )")'# k', ' E', 'BS weight', 'TS weight' + do j=1, Num_wann_BdG*Nslab + do i=1, knv2 + !write(outfileindex,'(3f15.7, i8)')k2len(i), ekslab(j,i), & + ! (surf_weight(j, i)) + write(outfileindex,'(2f15.7, 2f16.7)')k2len(i)*Angstrom2atomic, ekslab_BdG(j,i), & + (surf_l_weight_BdG(j, i)), & + (surf_r_weight_BdG(j, i)) + enddo + write(outfileindex , *)'' + enddo + close(outfileindex) + write(stdout,*) 'calculate energy band done' + endif + + emin= minval(ekslab_BdG)-0.5d0 + emax= maxval(ekslab_BdG)+0.5d0 + !> write script for gnuplot + outfileindex= outfileindex+ 1 + if (cpuid==0) then + open(unit=outfileindex, file='slabek_BdG.gnu') + write(outfileindex, '(a)')"set encoding iso_8859_1" + write(outfileindex, '(a)')'#set terminal postscript enhanced color' + write(outfileindex, '(a)')"#set output 'slabek_BdG.eps'" + write(outfileindex, '(3a)')'#set terminal pngcairo truecolor enhanced', & + ' font ",60" size 1920, 1680' + write(outfileindex, '(3a)')'set terminal png truecolor enhanced', & + ' font ",60" size 1920, 1680' + write(outfileindex, '(a)')"set output 'slabek_BdG.png'" + write(outfileindex,'(2a)') 'set palette defined ( 0 "green", ', & + '5 "yellow", 10 "red" )' + write(outfileindex, '(a)')'set style data linespoints' + write(outfileindex, '(a)')'unset ztics' + write(outfileindex, '(a)')'unset key' + write(outfileindex, '(a)')'set pointsize 0.8' + write(outfileindex, '(a)')'set border lw 3 ' + write(outfileindex, '(a)')'set view 0,0' + write(outfileindex, '(a)')'#set xtics font ",36"' + write(outfileindex, '(a)')'#set ytics font ",36"' + write(outfileindex, '(a)')'#set ylabel font ",36"' + write(outfileindex, '(a)')'#set xtics offset 0, -1' + write(outfileindex, '(a)')'set ylabel offset -1, 0 ' + write(outfileindex, '(a, f10.5, a)')'set xrange [0: ', maxval(k2len)*Angstrom2atomic, ']' + if (index(Particle,'phonon')/=0) then + write(outfileindex, '(a, f10.5, a)')'set yrange [0:', emax, ']' + write(outfileindex, '(a)')'set ylabel "Frequency (THz)"' + else + write(outfileindex, '(a)')'set ylabel "Energy (eV)"' + write(outfileindex, '(a, f10.5, a, f10.5, a)')'set yrange [', emin, ':', emax, ']' + endif + write(outfileindex, 202, advance="no") (trim(k2line_name(i)), k2line_stop(i)*Angstrom2atomic, i=1, nk2lines) + write(outfileindex, 203)trim(k2line_name(nk2lines+1)), k2line_stop(nk2lines+1)*Angstrom2atomic + + do i=1, nk2lines-1 + if (index(Particle,'phonon')/=0) then + write(outfileindex, 204)k2line_stop(i+1)*Angstrom2atomic, 0.0, k2line_stop(i+1)*Angstrom2atomic, emax + else + write(outfileindex, 204)k2line_stop(i+1)*Angstrom2atomic, emin, k2line_stop(i+1)*Angstrom2atomic, emax + endif + enddo + write(outfileindex, '(a)')'#rgb(r,g,b) = int(r)*65536 + int(g)*256 + int(b)' + write(outfileindex, '(2a)')"#plot 'slabek.dat' u 1:2:(rgb(255,$3, 3)) ", & + "w lp lw 2 pt 7 ps 1 lc rgb variable" + write(outfileindex, '(2a)')"# (a) " + write(outfileindex, '(2a)')"# plot the top and bottom surface's weight together" + write(outfileindex, '(2a)')"#plot 'slabek.dat' u 1:2:($3+$4) ", & + "w lp lw 2 pt 7 ps 1 lc palette" + write(outfileindex, '(2a)')"# (b) " + write(outfileindex, '(2a)') & + "# plot top and bottom surface's weight with red and blue respectively" + write(outfileindex,'(2a)') 'set palette defined ( -1 "blue", ', & + '0 "grey", 1 "red" )' + write(outfileindex, '(2a)')"plot 'slabek_BdG.dat' u 1:2:($4-$3) ", & + "w lp lw 2 pt 7 ps 1 lc palette" + + !write(outfileindex, '(2a)')"splot 'slabek.dat' u 1:2:3 ", & + ! "w lp lw 2 pt 13 palette" + close(outfileindex) + endif + + 202 format('set xtics (',:20('"',A3,'" ',F10.5,',')) + 203 format(A3,'" ',F10.5,')') + 204 format('set arrow from ',F10.5,',',F10.5, & + ' to ',F10.5,',',F10.5, ' nohead') + + deallocate(eigenvalue_BdG) + deallocate( surf_l_weight_BdG ) + deallocate( surf_l_weight_BdG_mpi ) + deallocate( surf_r_weight_BdG ) + deallocate( surf_r_weight_BdG_mpi ) + deallocate(ekslab_BdG) + deallocate(ekslab_BdG_mpi) + deallocate(CHamk_BdG) + deallocate(work) + deallocate(rwork) + +return +end subroutine ek_slab_BdG + +subroutine wannier_center2D_BdG + ! This suboutine is used for wannier center calculation for slab system + ! + ! Copyright (c) 2010 QuanSheng Wu. All rights reserved. + + use para + use wmpi + implicit none + + integer :: Nkx + integer :: Nky + + integer :: i, j, l, ia, ia1, m + integer :: nfill + + integer :: ikx + integer :: iky + + integer :: ierr + + !> k points in kx-ky plane + real(dp), allocatable :: kpoints(:, :, :) + + !> hamiltonian for each k point + !> and also the eigenvector of hamiltonian after eigensystem_c + complex(dp), allocatable :: Hamk(:, :) + complex(dp), allocatable :: Hamk_dag(:, :) + + !> eigenvector for each kx + complex(dp), allocatable :: Eigenvector(:, :, :) + + !> Mmnkb= + !> |u_n(k)> is the periodic part of wave function + complex(dp), allocatable :: Mmnkb(:, :) + complex(dp), allocatable :: Mmnkb_com(:, :) + complex(dp), allocatable :: Mmnkb_full(:, :) + + !> + complex(dp), allocatable :: Lambda_eig(:) + complex(dp), allocatable :: Lambda(:, :) + complex(dp), allocatable :: Lambda0(:, :) + + !> three matrix for SVD + !> M= U.Sigma.V^\dag + !> VT= V^\dag + complex(dp), allocatable :: U(:, :) + real (dp), allocatable :: Sigma(:, :) + complex(dp), allocatable :: VT(:, :) + + !> wannier centers for each ky, bands + real(dp), allocatable :: WannierCenterKy(:, :) + real(dp), allocatable :: WannierCenterKy_mpi(:, :) + + !> eigenvalue + real(dp), allocatable :: eigenvalue(:) + + !> 2D surface BZ + real(dp) :: kx + real(dp) :: ky + real(dp) :: k(2), b(2) + real(dp) :: k0(2), k1(2), k2(2) + + !> b.R + real(dp) :: br + + !> exp(-i*b.R) + complex(dp) :: ratio + + real(dp) :: slab_Rua(2) + real(dp) :: slab_Rub(2) + real(dp) :: slab_Kua(2) + real(dp) :: slab_Kub(2) + real(dp) :: cell_slab + + !> for each orbital, it correspond to an atom + !> dim= Num_wann_BdG + integer, allocatable :: AtomIndex_orbital(:) + + !> atom position in the unit cell + !> for slab BdG system, dim=Nslab*Origin_cell%Num_atoms + real(dp), allocatable :: AtomsPosition_unitcell(:, :) + real(dp), allocatable :: AtomsPosition_supercell(:,:) + + real(dp) :: Umatrix_t(3,3) + + + Nkx= Nk1 + Nky= Nk2 + + nfill= Num_wann*Nslab + + allocate(kpoints(2, Nkx, Nky)) + kpoints= 0d0 + + allocate(Lambda_eig(nfill)) + allocate(Lambda(nfill, nfill)) + allocate(Lambda0(nfill, nfill)) + allocate(Mmnkb(nfill, nfill)) + allocate(Mmnkb_com(nfill, nfill)) + allocate(Mmnkb_full(Num_wann_BdG*Nslab, Num_wann_BdG*Nslab)) + allocate(hamk(Num_wann_BdG*Nslab, Num_wann_BdG*Nslab)) + allocate(hamk_dag(Num_wann_BdG*Nslab, Num_wann_BdG*Nslab)) + allocate(Eigenvector(Num_wann_BdG*Nslab, Num_wann_BdG*Nslab, Nkx)) + allocate(eigenvalue(Num_wann_BdG*Nslab)) + allocate(U(nfill, nfill)) + allocate(Sigma(nfill, nfill)) + allocate(VT(nfill, nfill)) + allocate(WannierCenterKy(nfill, Nky)) + allocate(WannierCenterKy_mpi(nfill, Nky)) + allocate(AtomIndex_orbital(Num_wann_BdG*Nslab)) + allocate(AtomsPosition_unitcell(3, Origin_cell%Num_atoms)) + allocate(AtomsPosition_supercell(3, Nslab*Origin_cell%Num_atoms)) + WannierCenterKy= 0d0 + WannierCenterKy_mpi= 0d0 + hamk=0d0 + eigenvalue=0d0 + Eigenvector=0d0 + Mmnkb_full=0d0 + Mmnkb=0d0 + Mmnkb_com=0d0 + Lambda =0d0 + Lambda0=0d0 + U= 0d0 + Sigma= 0d0 + VT= 0d0 + + slab_Rua= 0.0d0 + slab_Rub= 0.0d0 + slab_Kua= 0.0d0 + slab_kub= 0.0d0 + cell_slab= 0.0d0 + + slab_Rua= Rua_new(1:2) + slab_Rub= Rub_new(1:2) + cell_slab= slab_Rua(1)* slab_Rub(2)- slab_Rua(2)* slab_Rub(1) + cell_slab= abs(cell_slab) + + if (abs(cell_slab)< 1e-6) stop "cell_volume equal to 0" + + slab_Kua(1)= 2d0*pi/cell_slab*slab_Rub(2) + slab_Kua(2)=-2d0*pi/cell_slab*slab_Rub(1) + slab_Kub(1)=-2d0*pi/cell_slab*slab_Rua(2) + slab_Kub(2)= 2d0*pi/cell_slab*slab_Rua(1) + + if (cpuid==0) then + write(stdout, *)'2D Primitive Cell_Volume: ', cell_slab + write(stdout, *)'slab_Rua, slab_Rub' + write(stdout, '(3f10.4)')slab_Rua + write(stdout, '(3f10.4)')slab_Rub + write(stdout, *)'slab_Kua, slab_Kub' + write(stdout, '(3f10.4)')slab_Kua + write(stdout, '(3f10.4)')slab_Kub + endif + + b= 0.0d0 + b(1)= 1.d0/real(Nkx) + b(2)= 0.d0 + b= b(1)*slab_Kua+ b(2)*slab_Kub + + k0= K2D_start + k1= K2D_vec1 + k2= K2D_vec2 + do iky=1, Nky + do ikx=1, Nkx + kpoints(:, ikx, iky)= k0+ k1*dble(ikx-1.d0)/dble(Nkx)+ k2*(iky-1)/dble(Nky-1d0) + enddo + enddo + + !> set up atom index for each orbitals in the basis + if (soc>0) then !> with spin-orbit coupling + l= 0 + do i=1, Nslab + do ia=1, Origin_cell%Num_atoms !> spin up + do j=1, Origin_cell%nprojs(ia) + l= l+ 1 + AtomIndex_orbital(l)= ia+ (i-1)*Origin_cell%Num_atoms !> electron + AtomIndex_orbital(l+ Num_wann*Nslab)= ia+ (i-1)*Origin_cell%Num_atoms !> hole + enddo ! j + enddo ! ia + do ia=1, Origin_cell%Num_atoms !> spin down + do j=1, Origin_cell%nprojs(ia) + l= l+ 1 + AtomIndex_orbital(l)= ia+ (i-1)*Origin_cell%Num_atoms !> electron + AtomIndex_orbital(l+ Num_wann*Nslab)= ia+ (i-1)*Origin_cell%Num_atoms !> hole + enddo ! j + enddo ! ia + enddo ! i + endif + + if (cpuid==0) then + write(stdout, *)'AtomIndex_orbital: ' + write(stdout, *)AtomIndex_orbital + endif + + Umatrix_t= transpose(Umatrix) + call inv_r(3, Umatrix_t) + + !> set up atoms' position in the unit cell of the new basis + !> only for 2D slab system + AtomsPosition_unitcell=0.0d0 + do ia=1, Origin_cell%Num_atoms + do i=1, 3 + do j=1,3 + AtomsPosition_unitcell(i,ia)= AtomsPosition_unitcell(i, ia)+ & + Umatrix_t(i,j)*Origin_cell%Atom_position_cart(j, ia) + enddo ! j + enddo ! i + enddo ! ia + + if (cpuid==0) then + write(stdout, *)'AtomPosition_unitcell: ' + do ia= 1, Origin_cell%Num_atoms + write(stdout, "(3f12.6)")AtomsPosition_unitcell(:,ia) + enddo + endif + + !> set up atoms' position in the supercell + !> actually, we only need the first two corordinates: x, y + AtomsPosition_supercell=0.0d0 + ia1= 0 + do i=1, Nslab + do ia=1, Origin_cell%Num_atoms + ia1= ia1+ 1 + AtomsPosition_supercell(1, ia1)= AtomsPosition_unitcell(1,ia) + AtomsPosition_supercell(2, ia1)= AtomsPosition_unitcell(2,ia) + enddo ! ia + enddo ! i + + if (cpuid==0) then + write(stdout, *) 'AtomPosition_supercell: ' + do ia=1, Nslab*Origin_cell%Num_atoms + write(stdout, "(3f12.6)")AtomsPosition_supercell(:,ia) + enddo + endif + + + !> for each ky, we can get wanniercenter + do iky=1+ cpuid, nky, num_cpu + Lambda0=0d0 + do i=1, nfill + Lambda0(i, i)= 1d0 ! lam0=I + enddo + + if (cpuid==0) print *, iky, nky + !> for each kx, we get the eigenvectors + do ikx=1, nkx + k(1)= kpoints(1, ikx, iky) + k(2)= kpoints(2, ikx, iky) + + call ham_slab_BdG(k,hamk) + + !> diagonal hamk + call eigensystem_c('V', 'U', Num_wann_BdG*Nslab, hamk, eigenvalue) + + Eigenvector(:, :, ikx)= hamk + enddo + + !> + !> sum over kx to get wanniercenters + do ikx=1, nkx + Mmnkb= 0d0 + hamk_dag= Eigenvector(:, :, ikx) + if (ikx==nkx) then + hamk= Eigenvector(:, :, 1) + else + hamk= Eigenvector(:, :, ikx+ 1) + endif + + do l=1, Nslab*2 + do m=1, Num_wann + ia= AtomIndex_orbital(m+ (l-1)*Num_wann) + br= b(1)*AtomsPosition_supercell(1, ia)+ & + b(2)*AtomsPosition_supercell(2, ia) + ratio= cos(br)- zi* sin(br) + + do i= 1, nfill + do j= 1, nfill + Mmnkb(i, j)= Mmnkb(i, j)+ & + conjg(hamk_dag((l-1)*Num_wann+m, i))* & + hamk((l-1)*Num_wann+m, j)* ratio + enddo ! j + enddo ! i + enddo ! m + enddo ! l + + !> + !call mat_mul(Num_wann_BdG*Nslab, hamk_dag, hamk, Mmnkb_full) + !Mmnkb= Mmnkb_full(1:nfill, 1:nfill) + + !Mmnkb_com= 0d0 + !hamk_dag= Eigenvector(:, :, ikx) + !hamk= Eigenvector(:, :, ikx+1) + !do i=1, nfill + ! do j=1, nfill + ! do l= 1, Num_wann*Nslab + ! Mmnkb_com(i, j)= Mmnkb_com(i, j)+ conjg(hamk_dag(l, i))* hamk(l, j) + ! enddo + ! enddo + !enddo + + !print *, maxval(real(Mmnkb-Mmnkb_com)) + !stop + + + !> perform Singluar Value Decomposed of Mmnkb + call zgesvd_pack(nfill, Mmnkb, U, Sigma, VT) + + !> after the calling of zgesvd_pack, Mmnkb becomes a temporal matrix + U= conjg(transpose(U)) + VT= conjg(transpose(VT)) + call mat_mul(nfill, VT, U, Mmnkb) + + !> check hermicity + !do i=1, nfill + ! do j=i, nfill + ! if (abs(Mmnkb(i, j)-conjg(Mmnkb(j, i)))>0.0001d0)then + ! print *, 'Mmnkb is not Hermitian' + ! print*, i, j, Mmnkb(i, j), Mmnkb(j, i) + + ! endif + ! enddo + !enddo + + !stop + + + call mat_mul(nfill, Mmnkb, Lambda0, Lambda) + Lambda0 = Lambda + enddo !< ikx + + !> diagonalize Lambda to get the eigenvalue + call zgeev_pack(nfill, Lambda, Lambda_eig) + do i=1, nfill + WannierCenterKy(i, iky)= aimag(log(Lambda_eig(i)))/2d0/pi + WannierCenterKy(i, iky)= mod(WannierCenterKy(i, iky)+10d0, 1d0) + enddo + + enddo !< iky + +#if defined (MPI) + call mpi_allreduce(WannierCenterKy, WannierCenterKy_mpi, & + size(WannierCenterKy), mpi_dp, mpi_sum, mpi_cmw, ierr) +#else + WannierCenterKy_mpi= WannierCenterKy +#endif + + + outfileindex= outfileindex+ 1 + if (cpuid==0) then + open(unit=outfileindex, file='wanniercenter_BdG.dat') + do i=1, nfill + do iky=1, Nky + write(outfileindex, '(10000f16.8)') kpoints(2, 1, iky), & + dmod(WannierCenterKy_mpi(i, iky), 1d0) + enddo + enddo + close(outfileindex) + endif + + + outfileindex= outfileindex+ 1 + if (cpuid==0) then + open(unit=outfileindex, file='wanniercenter_BdG_total.dat') + do iky=1, Nky + write(outfileindex, '(10000f16.8)') kpoints(2, 1, iky), & + dmod(sum(WannierCenterKy_mpi(:, iky)), 1d0) + enddo + close(outfileindex) + endif + + outfileindex= outfileindex+ 1 + if (cpuid==0) then + open(unit=outfileindex, file='wcc_slab_BdG.gnu') + + write(outfileindex,*) 'set encoding iso_8859_1' + write(outfileindex,*) 'set terminal postscript enhanced color font "Roman,36" ' + write(outfileindex,*) "set output 'wcc_slab_BdG.eps'" + write(outfileindex,*) 'set size ratio -1 ' + write(outfileindex,*) 'set multiplot ' + write(outfileindex,*) 'unset key' + write(outfileindex,*) 'set border lw 1 ' + write(outfileindex,*) 'set xtics 0.5 nomirror ' + write(outfileindex,*) 'set xtics ("k_y" 0, "-{/Symbol p}" -0.5, "{/Symbol p}" 0.5) ' + write(outfileindex,*) 'set ytics 0.5 nomirror ' + write(outfileindex,*) 'set xrange [-0.50: 0.5]' + write(outfileindex,*) 'set yrange [-0.00: 1.0]' + write(outfileindex,*) 'set ylabel "{/Symbol q}(2{/Symbol p})" rotate by 90 offset 2.8,0 ' + write(outfileindex,*) 'plot "wanniercenter_BdG.dat" u 1:2 w p pt 7 ps 0.6 lc rgb "blue"' + close(outfileindex) + endif + + outfileindex= outfileindex+ 1 + if (cpuid==0) then + open(unit=outfileindex, file='wcc_slab_BdG_total.gnu') + + write(outfileindex,*) 'set encoding iso_8859_1' + write(outfileindex,*) 'set terminal postscript enhanced color font "Roman,36" ' + write(outfileindex,*) "set output 'wcc_slab_BdG_total.eps'" + write(outfileindex,*) 'set size ratio -1 ' + write(outfileindex,*) 'set multiplot ' + write(outfileindex,*) 'unset key' + write(outfileindex,*) 'set border lw 1 ' + write(outfileindex,*) 'set xtics 0.5 nomirror ' + write(outfileindex,*) 'set xtics ("k_y" 0, "-{/Symbol p}" -0.5, "{/Symbol p}" 0.5) ' + write(outfileindex,*) 'set ytics 0.5 nomirror ' + write(outfileindex,*) 'set xrange [-0.50: 0.5]' + write(outfileindex,*) 'set yrange [-0.00: 1.0]' + write(outfileindex,*) 'set ylabel "{/Symbol q}(2{/Symbol p})" rotate by 90 offset 2.8,0 ' + write(outfileindex,*) 'plot "wanniercenter_BdG_total.dat" u 1:2 w p pt 7 ps 0.6 lc rgb "blue"' + close(outfileindex) + endif + + return + end subroutine wannier_center2D_BdG diff --git a/src/Boltz_transport_anomalous.f90 b/src/Boltz_transport_anomalous.f90 index 9ff3c2b2..08299747 100644 --- a/src/Boltz_transport_anomalous.f90 +++ b/src/Boltz_transport_anomalous.f90 @@ -56,7 +56,7 @@ subroutine sigma_AHC sigma_tensor_ahc = 0d0 eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening !> energy @@ -101,7 +101,7 @@ subroutine sigma_AHC !> write script for gnuplot outfileindex= outfileindex+ 1 if (cpuid==0) then - write(etaname, '(f12.2)')Eta_Arc*1000d0/eV2Hartree + write(etaname, '(f12.2)')Fermi_broadening*1000d0/eV2Hartree write(ahcfilename, '(7a)')'sigma_ahc_eta', trim(adjustl(etaname)), 'meV.txt' open(unit=outfileindex, file='sigma_ahc.gnu') write(outfileindex, '(a)') 'set terminal pdf enhanced color font ",20"' @@ -111,9 +111,12 @@ subroutine sigma_AHC write(outfileindex, '(a, f10.5, a, f10.5, a)')'set xrange [', OmegaMin/eV2Hartree, ':', OmegaMax/eV2Hartree, ']' write(outfileindex, '(a)')'set xlabel "Energy (eV)"' write(outfileindex, '(a)')'set ylabel "AHC (S/cm)"' - write(outfileindex, '(5a)')"plot '", trim(adjustl(ahcfilename)), "' u 1:2 w l title '\sigma_{xy}' lc rgb 'red' lw 4, \" + write(outfileindex, '(5a)')"#plot '", trim(adjustl(ahcfilename)), "' u 1:2 w l title '\sigma_{xy}' lc rgb 'red' lw 4, \" write(outfileindex, '(5a)')"'", trim(adjustl(ahcfilename)), "' u 1:3 w l title '\sigma_{yz}' lc rgb 'blue' lw 4, \" write(outfileindex, '(5a)')"'", trim(adjustl(ahcfilename)), "' u 1:4 w l title '\sigma_{zx}' lc rgb 'orange' lw 4 " + write(outfileindex, '(5a)')"plot '", trim(adjustl(ahcfilename)), "' u 1:2 w l title '{/Symbol s}_{xy}' lc rgb 'red' lw 4, \" + write(outfileindex, '(5a)')"'", trim(adjustl(ahcfilename)), "' u 1:3 w l title '{/Symbol s}_{yz}' lc rgb 'blue' lw 4, \" + write(outfileindex, '(5a)')"'", trim(adjustl(ahcfilename)), "' u 1:4 w l title '{/Symbol s}_{zx}' lc rgb 'orange' lw 4 " close(outfileindex) endif @@ -184,7 +187,7 @@ subroutine alpha_ANE minus_dfde = 0.0d0 eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening !> energy to be integrated do ie = 1, num_step+1 @@ -281,7 +284,7 @@ subroutine alpha_ANE !> write script for gnuplot outfileindex = outfileindex+1 if(cpuid .eq. 0) then - write(etaname, '(f12.2)')Eta_Arc*1000d0/eV2Hartree + write(etaname, '(f12.2)')Fermi_broadening*1000d0/eV2Hartree write(anefilename, '(7a)')'alpha_ane_eta', trim(adjustl(etaname)), 'meV.txt' open(unit=outfileindex, file='alpha_ane.gnu') write(outfileindex, '(a)') 'set terminal pdfcairo enhanced color font ",30" size 13, 6' @@ -422,7 +425,7 @@ subroutine sigma_ahc_vary_ChemicalPotential(NumOfmu, mulist, NumberofEta, eta_ar !> calculate Berry curvature at a single k point for all bands !> \Omega_n^{\gamma}(k)=i\sum_{\alpha\beta}\epsilon_{\gamma\alpha\beta}(D^{\alpha\dag}D^{\beta})_{nn} - call berry_curvarture_singlek_allbands(Dmn_Ham, Omega_BerryCurv) + call Berry_curvature_singlek_allbands(Dmn_Ham, Omega_BerryCurv) do ieta= 1, NumberofEta eta_local = eta_array(ieta) @@ -570,7 +573,7 @@ subroutine sigma_SHC pauli_matrices= 0d0 eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening nwann= Num_wann/2 !> spin operator matrix @@ -656,7 +659,7 @@ subroutine sigma_SHC do ieta= 1, NumberofEta eta_local= eta_array(ieta) - !> \Omega_spin^l_n^{\gamma}(k)=-2\sum_{m}*aimag(Im({js(\gamma),v(\alpha)}/2)_nm*v_beta_mn))/((w(n)-w(m))^2+eta_arc^2) + !> \Omega_spin^l_n^{\gamma}(k)=-2\sum_{m}*aimag(Im({js(\gamma),v(\alpha)}/2)_nm*v_beta_mn))/((w(n)-w(m))^2+Fermi_broadening^2) do ibeta= 1, 3 Omega_spin= 0d0 do n= 1, Num_wann @@ -737,7 +740,7 @@ subroutine sigma_SHC !> write script for gnuplot outfileindex= outfileindex+ 1 if (cpuid==0) then - write(etaname, '(f12.2)')Eta_Arc*1000d0/eV2Hartree + write(etaname, '(f12.2)')Fermi_broadening*1000d0/eV2Hartree write(shcfilename, '(7a)')'sigma_shc_eta', trim(adjustl(etaname)), 'meV.txt' open(unit=outfileindex, file='sigma_shc.gnu') write(outfileindex, '(a)') 'set terminal pdf enhanced color font ",20"' @@ -747,9 +750,12 @@ subroutine sigma_SHC write(outfileindex, '(a, f10.5, a, f10.5, a)')'set xrange [', OmegaMin/eV2Hartree, ':', OmegaMax/eV2Hartree, ']' write(outfileindex, '(a)')'set xlabel "Energy (eV)"' write(outfileindex, '(a)')'set ylabel "SHC (\hbar/e)S/cm"' - write(outfileindex, '(5a)')"plot '", trim(adjustl(shcfilename)), "' u 1:21 w l title '\sigma_{xy}^z' lc rgb 'red' lw 4, \" + write(outfileindex, '(5a)')"#plot '", trim(adjustl(shcfilename)), "' u 1:21 w l title '\sigma_{xy}^z' lc rgb 'red' lw 4, \" write(outfileindex, '(5a)')"'", trim(adjustl(shcfilename)), "' u 1:17 w l title '\sigma_{zx}^y' lc rgb 'blue' lw 4, \" write(outfileindex, '(5a)')"'", trim(adjustl(shcfilename)), "' u 1:13 w l title '\sigma_{xz}^y' lc rgb 'orange' lw 4 " + write(outfileindex, '(5a)')"plot '", trim(adjustl(shcfilename)), "' u 1:21 w l title '{/Symbol s}_{xy}^z' lc rgb 'red' lw 4, \" + write(outfileindex, '(5a)')"'", trim(adjustl(shcfilename)), "' u 1:17 w l title '{/Symbol s}_{zx}^y' lc rgb 'blue' lw 4, \" + write(outfileindex, '(5a)')"'", trim(adjustl(shcfilename)), "' u 1:13 w l title '{/Symbol s}_{xz}^y' lc rgb 'orange' lw 4 " close(outfileindex) endif diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 00000000..07eba542 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,51 @@ +OBJ = module.o sparse.o wt_aux.o math_lib.o symmetry.o \ + readHmnR.o inverse.o proteus.o \ + eigen.o ham_qlayer2qlayer.o psi.o unfolding.o rand.o \ + ham_slab.o ham_bulk.o ek_slab.o ek_bulk_polar.o ek_bulk.o \ + readinput.o fermisurface.o surfgreen.o surfstat.o \ + mat_mul.o ham_ribbon.o ek_ribbon.o \ + fermiarc.o berrycurvature.o \ + wanniercenter.o dos.o orbital_momenta.o \ + landau_level_sparse.o landau_level.o lanczos_sparse.o \ + berry.o wanniercenter_adaptive.o \ + effective_mass.o findnodes.o \ + sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ + main.o + +# compiler +F90 = mpif90 -fpp -DMPI -fpe3 -O3 -DARPACK -DINTELMKL # -check all -traceback -g +#F90 = ifort -fpp -DINTELMKL -fpe3 -check all -traceback -g +CC = mpicc -cpp -O3 -DINTELMKL + +INCLUDE = -I${MKLROOT}/include +WFLAG = -nogen-interface +OFLAG = -O3 -static-intel +FFLAG = $(OFLAG) $(WFLAG) +LFLAG = $(OFLAG) + +# ARPACK LIBRARY +ARPACK=/Users/user/quan/work/workplace/ARPACK/libarpack_MAC.a + +# blas and lapack libraries +# static linking +#LIBS = -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a \ + ${MKLROOT}/lib/intel64/libmkl_sequential.a \ + ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -lpthread -lm -ldl \ + ${ARPACK} + +# dynamic linking +LIBS = ${ARPACK} -L/${MKLROOT}/lib/intel64 -lmkl_core -lmkl_sequential -lmkl_intel_lp64 -lpthread + +main : $(OBJ) + $(F90) $(LFLAG) $(OBJ) -o wt.x $(LIBS) + cp -f wt.x ../bin + +.SUFFIXES: .o .f90 .c + +.f90.o : + $(F90) $(FFLAG) $(INCLUDE) -c $*.f90 + +clean : + rm -f *.o *.mod *~ wt.x + diff --git a/src/Makefile.gfortran b/src/Makefile.gfortran index 0f80a7ad..a406325c 100644 --- a/src/Makefile.gfortran +++ b/src/Makefile.gfortran @@ -10,6 +10,7 @@ OBJ = module.o sparse.o wt_aux.o math_lib.o mgmres.o symmetry.o \ berry.o wanniercenter_adaptive.o \ effective_mass.o findnodes.o \ sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ main.o # compiler diff --git a/src/Makefile.gfortran-mpi b/src/Makefile.gfortran-mpi index 20bd93be..d873fd17 100644 --- a/src/Makefile.gfortran-mpi +++ b/src/Makefile.gfortran-mpi @@ -9,6 +9,7 @@ OBJ = module.o sparse.o wt_aux.o math_lib.o symmetry.o readHmnR.o inverse.o pro berry.o wanniercenter_adaptive.o \ effective_mass.o findnodes.o \ sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ main.o # compiler, here mpif90 should be comipled with gfortran diff --git a/src/Makefile.gfortran_travis b/src/Makefile.gfortran_travis index 43d87b41..836a0a75 100644 --- a/src/Makefile.gfortran_travis +++ b/src/Makefile.gfortran_travis @@ -10,6 +10,7 @@ OBJ = module.o sparse.o wt_aux.o math_lib.o mgmres.o symmetry.o \ berry.o wanniercenter_adaptive.o \ effective_mass.o findnodes.o \ sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ main.o diff --git a/src/Makefile.intel-mpi b/src/Makefile.intel-mpi index 1aef162a..a683dbda 100644 --- a/src/Makefile.intel-mpi +++ b/src/Makefile.intel-mpi @@ -10,6 +10,7 @@ OBJ = module.o sparse.o wt_aux.o math_lib.o symmetry.o \ berry.o wanniercenter_adaptive.o \ effective_mass.o findnodes.o \ sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ main.o # compiler diff --git a/src/Makefile.intel-mpi-for-developer b/src/Makefile.intel-mpi-for-developer index 94d133e8..f194e1a4 100644 --- a/src/Makefile.intel-mpi-for-developer +++ b/src/Makefile.intel-mpi-for-developer @@ -10,6 +10,7 @@ OBJ = module.o sparse.o wt_aux.o math_lib.o symmetry.o \ berry.o wanniercenter_adaptive.o \ effective_mass.o findnodes.o \ sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ main.o # compiler diff --git a/src/Makefile.intel-mpi-with-ARPACK b/src/Makefile.intel-mpi-with-ARPACK index ecabdec9..cac6bfee 100644 --- a/src/Makefile.intel-mpi-with-ARPACK +++ b/src/Makefile.intel-mpi-with-ARPACK @@ -10,6 +10,7 @@ OBJ = module.o sparse.o wt_aux.o math_lib.o symmetry.o \ berry.o wanniercenter_adaptive.o \ effective_mass.o findnodes.o \ sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ main.o # compiler diff --git a/src/Makefile.intel-seq b/src/Makefile.intel-seq index c785a8dc..2373af54 100644 --- a/src/Makefile.intel-seq +++ b/src/Makefile.intel-seq @@ -9,6 +9,7 @@ OBJ = module.o sparse.o wt_aux.o math_lib.o symmetry.o readHmnR.o inverse.o pro berry.o wanniercenter_adaptive.o \ effective_mass.o findnodes.o \ sigma_OHE.o sigma.o Boltz_transport_anomalous.o \ + 2D_TSC.o \ main.o # compiler diff --git a/src/berrycurvature.f90 b/src/berrycurvature.f90 index 1f69913b..1e2ced29 100644 --- a/src/berrycurvature.f90 +++ b/src/berrycurvature.f90 @@ -1,6 +1,6 @@ - subroutine berry_curvarture_singlek_EF(k, mu, Omega_x, Omega_y, Omega_z) + subroutine Berry_curvature_singlek_EF(k, mu, Omega_x, Omega_y, Omega_z) !> Calculate Berry curvature for a sigle k point - !> The Fermi distribution is determined by the Fermi level E_arc + !> The Fermi distribution is determined by the Fermi level iso_energy !> ref : Physical Review B 74, 195118(2006) ! !> eqn (34) @@ -69,8 +69,8 @@ subroutine berry_curvarture_singlek_EF(k, mu, Omega_x, Omega_y, Omega_z) Omega_z= -Omega_z*2d0*zi !> consider the Fermi-distribution according to the broadening Earc_eta - if (Eta_Arc Calculate Berry curvature for a sigle k point !> The Fermi distribution is determined by the NumOccupied bands, not the Fermi level !> ref : Physical Review B 74, 195118(2006) @@ -158,9 +158,9 @@ subroutine berry_curvarture_singlek_numoccupied_slab_total(k, Omega_z) Omega_z= -aimag(Omega_z*2d0)/Angstrom2atomic**2 return - end subroutine berry_curvarture_singlek_numoccupied_slab_total + end subroutine Berry_curvature_singlek_numoccupied_slab_total - subroutine berry_curvarture_singlek_numoccupied_total(k, Omega_x, Omega_y, Omega_z) + subroutine Berry_curvature_singlek_numoccupied_total(k, Omega_x, Omega_y, Omega_z) !> Calculate Berry curvature for a sigle k point using Kubo-formula !> The Fermi distribution is determined by the NumOccupied bands, not the Fermi level !> ref : Physical Review B 74, 195118(2006) @@ -230,9 +230,9 @@ subroutine berry_curvarture_singlek_numoccupied_total(k, Omega_x, Omega_y, Omega deallocate(Amat, velocity_wann, velocity_Ham) return - end subroutine berry_curvarture_singlek_numoccupied_total + end subroutine Berry_curvature_singlek_numoccupied_total - subroutine berry_curvarture_singlek_numoccupied(k, Omega_x, Omega_y, Omega_z) + subroutine Berry_curvature_singlek_numoccupied(k, Omega_x, Omega_y, Omega_z) !> Calculate Berry curvature for a sigle k point !> The Fermi distribution is determined by the NumOccupied bands, not the Fermi level !> ref : Physical Review B 74, 195118(2006) @@ -300,9 +300,9 @@ subroutine berry_curvarture_singlek_numoccupied(k, Omega_x, Omega_y, Omega_z) Omega_z= -Omega_z*2d0*zi return - end subroutine berry_curvarture_singlek_numoccupied + end subroutine Berry_curvature_singlek_numoccupied - subroutine berry_curvarture_singlek_allbands(Dmn_Ham, Omega_BerryCurv) + subroutine Berry_curvature_singlek_allbands(Dmn_Ham, Omega_BerryCurv) !> Calculate Berry curvature for a sigle k point and all bands !> ref : eqn (30) Physical Review B 74, 195118(2006) !> \Omega_n^{\gamma}(k)=i\sum_{\alpha\beta}\epsilon_{\gamma\alpha\beta}(D^{\alpha\dag}D^{\beta})_{nn} @@ -360,7 +360,7 @@ subroutine berry_curvarture_singlek_allbands(Dmn_Ham, Omega_BerryCurv) enddo return - end subroutine berry_curvarture_singlek_allbands + end subroutine Berry_curvature_singlek_allbands subroutine orbital_magnetization_singlek_allbands(Dmn_Ham, Vmn_Ham_nondiag, m_OrbMag) @@ -462,7 +462,7 @@ subroutine get_Dmn_Ham(W, velocity_Ham, Dmn_Ham) return end subroutine get_Dmn_Ham - subroutine berry_curvarture_slab + subroutine Berry_curvature_slab !> Calculate Berry curvature ! !> ref : Physical Review B 74, 195118(2006) @@ -521,7 +521,7 @@ subroutine berry_curvarture_slab Omega_z= 0d0 - call berry_curvarture_singlek_numoccupied_slab_total(k, Omega_z(1)) + call Berry_curvature_singlek_numoccupied_slab_total(k, Omega_z(1)) Omega(ik) = sum(Omega_z) enddo ! ik @@ -599,9 +599,9 @@ subroutine berry_curvarture_slab return - end subroutine berry_curvarture_slab + end subroutine Berry_curvature_slab - subroutine berry_curvarture_line + subroutine Berry_curvature_line_occupied !> Calculate Berry curvature for a k line defined bu KPATH_BULK ! !> ref : Physical Review B 74, 195118(2006) @@ -623,10 +623,13 @@ subroutine berry_curvarture_line real(dp), external :: norm - !> Berry curvature (3, bands, k) complex(dp), allocatable :: Omega_x(:), Omega_y(:), Omega_z(:) + !> Berry curvature (3, k) real(dp), allocatable :: Omega(:, :), Omega_mpi(:, :) + !> Berry curvature (3, bands, k) + real(dp), allocatable :: Omega_sep_bk(:, :), Omega_sep_bk_mpi(:, :) + !> energy bands real(dp), allocatable :: eigv(:,:) real(dp), allocatable :: eigv_mpi(:,:) @@ -654,7 +657,7 @@ subroutine berry_curvarture_line ' time elapsed: ', time_end-time_start0 !> a k point in fractional coordinates - k= k3points(:, ik) + k= kpath_3d(:, ik) call now(time_start) @@ -662,13 +665,13 @@ subroutine berry_curvarture_line Omega_y= 0d0 Omega_z= 0d0 - !call berry_curvarture_singlek_numoccupied_old(k, Omega_x, Omega_y, Omega_z) + !call Berry_curvature_singlek_numoccupied_old(k, Omega_x, Omega_y, Omega_z) if (Berrycurvature_kpath_EF_calc) then - call berry_curvarture_singlek_EF(k, E_arc, Omega_x, Omega_y, Omega_z) + call Berry_curvature_singlek_EF(k, iso_energy, Omega_x, Omega_y, Omega_z) else if (BerryCurvature_kpath_Occupied_calc) then - call berry_curvarture_singlek_numoccupied_total(k, Omega_x(1), Omega_y(1), Omega_z(1)) + call Berry_curvature_singlek_numoccupied_total(k, Omega_x(1), Omega_y(1), Omega_z(1)) else - write(*, *) 'ERROR: In subroutine berry_curvarture_line, we only support BerryCurvature_kpath_Occupied_calc ' + write(*, *) 'ERROR: In subroutine Berry_curvature_line, we only support BerryCurvature_kpath_Occupied_calc ' write(*, *) ' and Berrycurvature_kpath_EF_calc ' stop endif @@ -698,7 +701,7 @@ subroutine berry_curvarture_line 'real(Omega_x)', 'real(Omega_y)', 'real(Omega_z)' do ik= 1, nk3_band - k=k3points(:, ik) + k=kpath_3d(:, ik) write(outfileindex, '(20E18.8)')k3len(ik)*Angstrom2atomic, real(Omega_mpi(:, ik))/Angstrom2atomic**2 enddo @@ -757,10 +760,10 @@ subroutine berry_curvarture_line return - end subroutine berry_curvarture_line + end subroutine Berry_curvature_line_occupied - subroutine berry_curvarture_cube + subroutine berry_curvature_cube !> Calculate Berry curvature in a cube defined in KCUBE_BULK ! !> ref : Physical Review B 74, 195118(2006) @@ -775,9 +778,9 @@ subroutine berry_curvarture_cube use para implicit none - integer :: ik, ierr, ikx, iky, ikz, knv3, i, m, n + integer :: ik, ierr, ikx, iky, ikz, n_kpoints, i, m, n - real(dp) :: k(3), o1(3), k_cart(3) + real(dp) :: k(3), o1(3), k_cart(3), emin, emax real(dp) :: time_start, time_end, time_start0 real(dp), external :: norm @@ -800,19 +803,23 @@ subroutine berry_curvarture_cube real(dp), allocatable :: W(:) real(dp), allocatable :: eigval_allk(:, :), eigval_allk_mpi(:, :) - knv3=Nk1*Nk2*Nk3 + if (BerryCurvature_Cube_calc) then + n_kpoints=Nk1*Nk2*Nk3 + else + n_kpoints= nk3_band + endif allocate(Vmn_wann(Num_wann, Num_wann, 3), Vmn_Ham(Num_wann, Num_wann, 3)) allocate(Dmn_Ham(Num_wann,Num_wann,3), Vmn_Ham_nondiag(Num_wann, Num_wann, 3)) allocate(W(Num_wann)) allocate(UU(Num_wann, Num_wann)) - allocate(eigval_allk(Num_wann, knv3)) - allocate(eigval_allk_mpi(Num_wann, knv3)) + allocate(eigval_allk(Num_wann, n_kpoints)) + allocate(eigval_allk_mpi(Num_wann, n_kpoints)) allocate( Omega_BerryCurv(Num_wann, 3), m_OrbMag(Num_wann, 3)) - allocate( Omega_allk (Num_wann, 3, knv3)) - allocate( Omega_allk_mpi(Num_wann, 3, knv3)) - allocate( m_OrbMag_allk (Num_wann, 3, knv3)) - allocate( m_OrbMag_allk_mpi(Num_wann, 3, knv3)) + allocate( Omega_allk (Num_wann, 3, n_kpoints)) + allocate( Omega_allk_mpi(Num_wann, 3, n_kpoints)) + allocate( m_OrbMag_allk (Num_wann, 3, n_kpoints)) + allocate( m_OrbMag_allk_mpi(Num_wann, 3, n_kpoints)) Omega_BerryCurv= 0d0 m_OrbMag=0d0 @@ -828,19 +835,27 @@ subroutine berry_curvarture_cube call now(time_start0) time_start= time_start0 time_end = time_start0 - do ik= 1+ cpuid, knv3, num_cpu + do ik= 1+ cpuid, n_kpoints, num_cpu if (cpuid==0.and. mod(ik/num_cpu, 100)==0) & write(stdout, '(a, i9, " /", i10, a, f10.1, "s", a, f10.1, "s")') & - ' Berry curvature: ik', ik, knv3, ' time left', & - (knv3-ik)*(time_end- time_start)/num_cpu, & + ' Berry curvature: ik', ik, n_kpoints, ' time left', & + (n_kpoints-ik)*(time_end- time_start)/num_cpu, & ' time elapsed: ', time_end-time_start0 - ikx= (ik-1)/(nk2*nk3)+1 - iky= ((ik-1-(ikx-1)*Nk2*Nk3)/nk3)+1 - ikz= (ik-(iky-1)*Nk3- (ikx-1)*Nk2*Nk3) - k= K3D_start_cube+ K3D_vec1_cube*(ikx-1)/dble(nk1) & - + K3D_vec2_cube*(iky-1)/dble(nk2) & - + K3D_vec3_cube*(ikz-1)/dble(nk3) - !- (K3D_vec1_cube+ K3D_vec2_cube+ K3D_vec3_cube)/2d0 + + !> if we calculate BC in the BZ, we generate kpoints in the BZ + if (BerryCurvature_Cube_calc) then + !> kbulk mode + ikx= (ik-1)/(nk2*nk3)+1 + iky= ((ik-1-(ikx-1)*Nk2*Nk3)/nk3)+1 + ikz= (ik-(iky-1)*Nk3- (ikx-1)*Nk2*Nk3) + k= K3D_start_cube+ K3D_vec1_cube*(ikx-1)/dble(nk1) & + + K3D_vec2_cube*(iky-1)/dble(nk2) & + + K3D_vec3_cube*(ikz-1)/dble(nk3) + + elseif (BerryCurvature_kpath_sepband_calc) then + !> kpath mode + k= kpath_3d(:, ik) + endif call now(time_start) @@ -857,7 +872,7 @@ subroutine berry_curvarture_cube call get_Dmn_Ham(W, Vmn_Ham, Dmn_Ham) call get_Vmn_Ham_nondiag(Vmn_Ham, Vmn_Ham_nondiag) - call berry_curvarture_singlek_allbands(Dmn_Ham, Omega_BerryCurv) + call Berry_curvature_singlek_allbands(Dmn_Ham, Omega_BerryCurv) call orbital_magnetization_singlek_allbands(Dmn_Ham, Vmn_Ham_nondiag, m_OrbMag) Omega_allk(:, :, ik) = Omega_BerryCurv m_OrbMag_allk(:, :, ik) = m_OrbMag @@ -878,6 +893,7 @@ subroutine berry_curvarture_cube m_OrbMag_allk_mpi= m_OrbMag_allk #endif + IF (BerryCurvature_Cube_calc) THEN !> write out Berry curvature and orbital magnetization to a file which !> can be open by software Fermisurfer. outfileindex= outfileindex+ 1 @@ -890,12 +906,12 @@ subroutine berry_curvarture_cube write(outfileindex, '(3f12.6)') Origin_cell%Kub write(outfileindex, '(3f12.6)') Origin_cell%Kuc do m=1, Num_wann - do ik= 1, knv3 - write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-E_arc + do ik= 1, n_kpoints + write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-iso_energy enddo enddo do m=1, Num_wann - do ik= 1, knv3 + do ik= 1, n_kpoints o1= Omega_allk_mpi(m, :, ik)/Angstrom2atomic**2 write(outfileindex, '(E18.10)') norm(o1) enddo @@ -916,12 +932,12 @@ subroutine berry_curvarture_cube write(outfileindex, '(3f12.6)') Origin_cell%Kub write(outfileindex, '(3f12.6)') Origin_cell%Kuc do m=1, Num_wann - do ik= 1, knv3 - write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-E_arc + do ik= 1, n_kpoints + write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-iso_energy enddo enddo do m=1, Num_wann - do ik= 1, knv3 + do ik= 1, n_kpoints o1= Omega_allk_mpi(m, :, ik)/Angstrom2atomic**2 write(outfileindex, '(E18.10)') o1(1) enddo @@ -942,12 +958,12 @@ subroutine berry_curvarture_cube write(outfileindex, '(3f12.6)') Origin_cell%Kub write(outfileindex, '(3f12.6)') Origin_cell%Kuc do m=1, Num_wann - do ik= 1, knv3 - write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-E_arc + do ik= 1, n_kpoints + write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-iso_energy enddo enddo do m=1, Num_wann - do ik= 1, knv3 + do ik= 1, n_kpoints o1= Omega_allk_mpi(m, :, ik)/Angstrom2atomic**2 write(outfileindex, '(E18.10)') o1(3) enddo @@ -966,12 +982,12 @@ subroutine berry_curvarture_cube write(outfileindex, '(3f12.6)') Origin_cell%Kub write(outfileindex, '(3f12.6)') Origin_cell%Kuc do m=1, Num_wann - do ik= 1, knv3 - write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-E_arc + do ik= 1, n_kpoints + write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-iso_energy enddo enddo do m=1, Num_wann - do ik= 1, knv3 + do ik= 1, n_kpoints o1= m_OrbMag_allk_mpi(m, :, ik) write(outfileindex, '(E18.10)') norm(o1) enddo @@ -990,12 +1006,12 @@ subroutine berry_curvarture_cube write(outfileindex, '(3f12.6)') Origin_cell%Kub write(outfileindex, '(3f12.6)') Origin_cell%Kuc do m=1, Num_wann - do ik= 1, knv3 - write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-E_arc + do ik= 1, n_kpoints + write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-iso_energy enddo enddo do m=1, Num_wann - do ik= 1, knv3 + do ik= 1, n_kpoints o1= m_OrbMag_allk_mpi(m, :, ik) write(outfileindex, '(E18.10)') o1(3) enddo @@ -1014,12 +1030,12 @@ subroutine berry_curvarture_cube write(outfileindex, '(3f12.6)') Origin_cell%Kub write(outfileindex, '(3f12.6)') Origin_cell%Kuc do m=1, Num_wann - do ik= 1, knv3 - write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-E_arc + do ik= 1, n_kpoints + write(outfileindex, '(E18.10)') eigval_allk_mpi(m, ik)-iso_energy enddo enddo do m=1, Num_wann - do ik= 1, knv3 + do ik= 1, n_kpoints o1= m_OrbMag_allk_mpi(m, :, ik) write(outfileindex, '(E18.10)') o1(1) enddo @@ -1027,6 +1043,88 @@ subroutine berry_curvarture_cube close(outfileindex) endif + ELSE + + + !> output the Berry curvature to file + outfileindex= outfileindex+ 1 + if (cpuid==0) then + open(unit=outfileindex, file='Berrycurvature_line_sepband.txt') + write(outfileindex, '(a)')'# Column 1 kpath with accumulated length in the kpath, Coloum 2: energy' + write(outfileindex, '(a)')'# Column 2-4 Berry curvature (Ang^2)' + write(outfileindex, "('#column', i5, 20i16)")(i, i=1, 8) + write(outfileindex, '(20a16)')'# k (1/A)', " eig", & + 'Omega_x', 'Omega_y', 'Omega_z', & + 'm_x', 'm_y', 'm_z' + do i=1, Num_wann + do ik=1, n_kpoints + write(outfileindex, '(200E16.6)')k3len(ik)*Angstrom2atomic, eigval_allk_mpi(i, ik)/eV2Hartree, & + Omega_allk_mpi(i, :, ik), m_OrbMag_allk_mpi(i, :, ik) + enddo + write(outfileindex, *)' ' + enddo + close(outfileindex) + + + close(outfileindex) + endif + + !> minimum and maximum value of energy bands + emin= minval(eigval_allk_mpi)/eV2Hartree-0.5d0 + emax= maxval(eigval_allk_mpi)/eV2Hartree+0.5d0 + + !> write script for gnuplot + outfileindex= outfileindex+ 1 + if (cpuid==0) then + open(unit=outfileindex, file='Berrycurvature_line_sepband.gnu') + write(outfileindex, '(a)') '# requirement: gnuplot version>5.4' + write(outfileindex, '(2a)') '# Please open the data file to check the data: Berrycurvature_line_sepband.txt ' + write(outfileindex, '(a)') 'set terminal pdf enhanced color font ",24"' + write(outfileindex,'(2a)') 'set palette defined ( 0 "green", ', & + '5 "yellow", 10 "red" )' + write(outfileindex, '(3a)')"set output 'Berrycurvature_line_sepband.pdf'" + write(outfileindex, '(a)')'set style data linespoints' + write(outfileindex, '(a)')'unset key' + write(outfileindex, '(a)')'set pointsize 0.8' + write(outfileindex, '(a)')'#set xtics font ",24"' + write(outfileindex, '(a)')'#set ytics font ",24"' + write(outfileindex, '(a)')'#set ylabel font ",24"' + write(outfileindex, '(a)')'set ylabel offset 0.5,0' + write(outfileindex, '(a)')'set border lw 2' + write(outfileindex, '(a, f10.5, a)')'set xrange [0: ', maxval(k3len*Angstrom2atomic), ']' + write(outfileindex, '(a,f12.6)')'emin=', emin + write(outfileindex, '(a,f12.6)')'emax=', emax + write(outfileindex, '(a)')' ' + write(outfileindex, '(a)')'#set cbrange if the number is too large meeting some band crossings' + write(outfileindex, '(a)')'set cbrange [-100:100]' + write(outfileindex, '(a)')' ' + if (index(Particle,'phonon')/=0) then + write(outfileindex, '(a)')'set yrange [0: emax]' + write(outfileindex, '(a)')'set ylabel "Frequency (THz)"' + else + write(outfileindex, '(a)')'set ylabel "Energy (eV)"' + write(outfileindex, '(a)')'set yrange [ emin : emax ]' + endif + write(outfileindex, 202, advance="no") (k3line_name(i), k3line_stop(i)*Angstrom2atomic, i=1, Nk3lines) + write(outfileindex, 203)k3line_name(Nk3lines+1), k3line_stop(Nk3lines+1)*Angstrom2atomic + + do i=1, Nk3lines-1 + if (index(Particle,'phonon')/=0) then + write(outfileindex, 204)k3line_stop(i+1)*Angstrom2atomic, '0.0', k3line_stop(i+1)*Angstrom2atomic, 'emax' + else + write(outfileindex, 204)k3line_stop(i+1)*Angstrom2atomic, 'emin', k3line_stop(i+1)*Angstrom2atomic, 'emax' + endif + enddo + write(outfileindex, '(4a)')"plot 'Berrycurvature_line_sepband.txt' u 1:2:5 ", & + " w lp lw 2 pt 7 ps 0.2 lc palette, 0 w l lw 2 dt 2" + close(outfileindex) + endif + +202 format('set xtics (',20('"',A3,'" ',F10.5,',')) +203 format(A3,'" ',F10.5,')') +204 format('set arrow from ',F10.5,',',A5,' to ',F10.5,',',A5, ' nohead lw 2') + + ENDIF #if defined (MPI) @@ -1035,9 +1133,9 @@ subroutine berry_curvarture_cube return - end subroutine berry_curvarture_cube + end subroutine berry_curvature_cube - subroutine berry_curvarture_plane_full + subroutine Berry_curvature_plane_full !> Calculate Berry curvature and orbital magnetization for the selected bands !> ref : Physical Review B 74, 195118(2006) !> eqn (34) @@ -1126,7 +1224,7 @@ subroutine berry_curvarture_plane_full k= kslice(:, ik) call now(time_start) - call berry_curvarture_orb_mag_singlek_allbands_pack(k, Omega_BerryCurv, m_OrbMag, W) + call Berry_curvature_orb_mag_singlek_allbands_pack(k, Omega_BerryCurv, m_OrbMag, W) do i=1, 3 Omega_allk_Occ(1, i, ik) = sum(Omega_BerryCurv(1:NumOccupied, i)) @@ -1136,14 +1234,14 @@ subroutine berry_curvarture_plane_full enddo !> consider the Fermi-distribution according to the broadening Earc_eta - if (Eta_Arc Calculate Berry curvature and orbital magnetization for the selected bands !> ref : Physical Review B 74, 195118(2006) !> eqn (34) @@ -1477,19 +1575,19 @@ subroutine berry_curvarture_orb_mag_singlek_allbands_pack(k, Omega_BerryCurv, m_ call get_Dmn_Ham(W, Vmn_Ham, Dmn_Ham) call get_Vmn_Ham_nondiag(Vmn_Ham, Vmn_Ham_nondiag) - call berry_curvarture_singlek_allbands(Dmn_Ham, Omega_BerryCurv) + call Berry_curvature_singlek_allbands(Dmn_Ham, Omega_BerryCurv) call orbital_magnetization_singlek_allbands(Dmn_Ham, Vmn_Ham_nondiag, m_OrbMag) deallocate(Vmn_wann, Vmn_Ham, Vmn_Ham_nondiag) deallocate(UU, Dmn_Ham) return - end subroutine berry_curvarture_orb_mag_singlek_allbands_pack + end subroutine Berry_curvature_orb_mag_singlek_allbands_pack - subroutine berry_curvarture_plane_EF + subroutine Berry_curvature_plane_EF !> Calculate Berry curvature and orbital magnetization for the selected bands !> ref : Physical Review B 74, 195118(2006) !> eqn (34) @@ -1600,7 +1698,7 @@ subroutine berry_curvarture_plane_EF call get_Dmn_Ham(W, Vmn_Ham, Dmn_Ham) call get_Vmn_Ham_nondiag(Vmn_Ham, Vmn_Ham_nondiag) - call berry_curvarture_singlek_allbands(Dmn_Ham, Omega_BerryCurv) + call Berry_curvature_singlek_allbands(Dmn_Ham, Omega_BerryCurv) call orbital_magnetization_singlek_allbands(Dmn_Ham, Vmn_Ham_nondiag, m_OrbMag) Omega_allk(:, :, ik) = Omega_BerryCurv m_OrbMag_allk(:, :, ik) = m_OrbMag @@ -1698,11 +1796,11 @@ subroutine berry_curvarture_plane_EF return - end subroutine berry_curvarture_plane_EF + end subroutine Berry_curvature_plane_EF - subroutine berry_curvarture_plane_selectedbands + subroutine Berry_curvature_plane_selectedbands !> Calculate Berry curvature and orbital magnetization for the selected bands !> ref : Physical Review B 74, 195118(2006) !> eqn (34) @@ -1813,7 +1911,7 @@ subroutine berry_curvarture_plane_selectedbands call get_Dmn_Ham(W, Vmn_Ham, Dmn_Ham) call get_Vmn_Ham_nondiag(Vmn_Ham, Vmn_Ham_nondiag) - call berry_curvarture_singlek_allbands(Dmn_Ham, Omega_BerryCurv) + call Berry_curvature_singlek_allbands(Dmn_Ham, Omega_BerryCurv) call orbital_magnetization_singlek_allbands(Dmn_Ham, Vmn_Ham_nondiag, m_OrbMag) Omega_allk(:, :, ik) = Omega_BerryCurv m_OrbMag_allk(:, :, ik) = m_OrbMag @@ -1911,11 +2009,11 @@ subroutine berry_curvarture_plane_selectedbands return - end subroutine berry_curvarture_plane_selectedbands + end subroutine Berry_curvature_plane_selectedbands - subroutine berry_curvarture_plane + subroutine Berry_curvature_plane !> Calculate Berry curvature ! !> ref : Physical Review B 74, 195118(2006) @@ -1990,11 +2088,11 @@ subroutine berry_curvarture_plane Omega_y= 0d0 Omega_z= 0d0 - !call berry_curvarture_singlek_numoccupied_old(k, Omega_x, Omega_y, Omega_z) + !call Berry_curvature_singlek_numoccupied_old(k, Omega_x, Omega_y, Omega_z) if (Berrycurvature_EF_calc) then - call berry_curvarture_singlek_EF(k, E_arc, Omega_x, Omega_y, Omega_z) + call Berry_curvature_singlek_EF(k, iso_energy, Omega_x, Omega_y, Omega_z) else - call berry_curvarture_singlek_numoccupied_total(k, Omega_x(1), Omega_y(1), Omega_z(1)) + call Berry_curvature_singlek_numoccupied_total(k, Omega_x(1), Omega_y(1), Omega_z(1)) endif Omega(1, ik) = sum(Omega_x) Omega(2, ik) = sum(Omega_y) @@ -2141,7 +2239,7 @@ subroutine berry_curvarture_plane return - end subroutine berry_curvarture_plane + end subroutine Berry_curvature_plane subroutine Fourier_R_to_k(k, ham) !> Fourier transform the Hamiltonian from R space to k space @@ -2271,8 +2369,8 @@ subroutine Chern_sphere_single(k0, r0, Chern) ct=cos(theta) sp=sin(phi) cp=cos(phi) - !call berry_curvarture_singlek_numoccupied_old(k_direct, Omega_x, Omega_y, Omega_z) - call berry_curvarture_singlek_numoccupied (k_direct, Omega_x, Omega_y, Omega_z) + !call Berry_curvature_singlek_numoccupied_old(k_direct, Omega_x, Omega_y, Omega_z) + call Berry_curvature_singlek_numoccupied (k_direct, Omega_x, Omega_y, Omega_z) O_x= real(sum(Omega_x(1:Numoccupied))) O_y= real(sum(Omega_y(1:Numoccupied))) O_z= real(sum(Omega_z(1:Numoccupied))) @@ -2416,7 +2514,7 @@ subroutine Chern_halftorus_single(k0, Rbig, rsmall_a, rsmall_b, Chern) sp=sin(phi) cp=cos(phi) rt= Rbig+ rsmall_a* ct - call berry_curvarture_singlek_numoccupied(k_direct, Omega_x, Omega_y, Omega_z) + call Berry_curvature_singlek_numoccupied(k_direct, Omega_x, Omega_y, Omega_z) !O_x= real(Omega_x(Numoccupied)) !O_y= real(Omega_y(Numoccupied)) !O_z= real(Omega_z(Numoccupied)) diff --git a/src/dos.f90 b/src/dos.f90 index f973cfd2..e029898e 100644 --- a/src/dos.f90 +++ b/src/dos.f90 @@ -54,7 +54,7 @@ subroutine dos_sparse if (OmegaNum<2) OmegaNum=2 NE= OmegaNum - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy nnzmax=splen+ Ndimq nnz=splen @@ -79,7 +79,7 @@ subroutine dos_sparse emax= OmegaMax eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening !eta= (emax- emin)/ dble(NE)*3d0 @@ -155,7 +155,7 @@ subroutine dos_sparse if (cpuid==0) then open(unit=outfileindex, file='dos.gnu') write(outfileindex, '(a)')"set encoding iso_8859_1" - write(outfileindex, '(a)')'set terminal pdf enhanced color font ",14" ' + write(outfileindex, '(a)')'set terminal pdf enhanced color font ",16" size 5,4' write(outfileindex, '(a)')"set output 'dos.pdf'" write(outfileindex, '(a)')'set border lw 2' write(outfileindex, '(a)')'set autoscale fix' @@ -245,7 +245,7 @@ subroutine charge_density_sparse if (OmegaNum<2) OmegaNum=2 NE= OmegaNum - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy nnzmax=splen+ Ndimq nnz=splen @@ -418,7 +418,7 @@ subroutine dos_sub emin= OmegaMin emax= OmegaMax eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening !> energy @@ -496,8 +496,8 @@ subroutine dos_sub if (cpuid==0) then open(unit=outfileindex, file='dos.gnu') write(outfileindex, '(a)')"set encoding iso_8859_1" - write(outfileindex, '(a)')'set terminal postscript enhanced color font ",24" ' - write(outfileindex, '(a)')"set output 'dos.eps'" + write(outfileindex, '(a)')'set terminal pdf enhanced color font ",16" size 5,4 ' + write(outfileindex, '(a)')"set output 'dos.pdf'" write(outfileindex, '(a)')'set border lw 2' write(outfileindex, '(a)')'set autoscale fix' write(outfileindex, '(a, f16.6,a)')'set yrange [0:', maxval(dos)*eV2Hartree+0.5, '1]' @@ -543,6 +543,7 @@ subroutine joint_dos !> the integration k space real(dp) :: emin real(dp) :: emax + real(dp) :: eta_broadening integer :: ik, ie, ib, ib1, ib2 integer :: ikx, iky, ikz, knv3, NE, ierr @@ -641,7 +642,7 @@ subroutine joint_dos emin= 0d0 emax= OmegaMax - eta= (emax- emin)/ dble(NE)*3d0 + eta_broadening= (emax- emin)/ dble(NE)*3d0 !> energy @@ -658,7 +659,7 @@ subroutine joint_dos do ib1= 1, iband_tot-1 do ib2= ib1+1, iband_tot x= omega(ie)- eigval(ib2, ik) + eigval(ib1, ik) - jdos_mpi(ie) = jdos_mpi(ie)+ delta(eta, x)* (fermi_dis(ib1, ik)- fermi_dis(ib2, ik)) + jdos_mpi(ie) = jdos_mpi(ie)+ delta(eta_broadening, x)* (fermi_dis(ib1, ik)- fermi_dis(ib2, ik)) enddo ! ib2 enddo ! ib1 enddo ! ik @@ -712,6 +713,7 @@ subroutine dos_joint_dos !> the integration k space real(dp) :: emin real(dp) :: emax + real(dp) :: eta_broadening integer :: ik, ie, ib, ib1, ib2 integer :: ikx, iky, ikz, knv3, NE, ierr @@ -768,7 +770,7 @@ subroutine dos_joint_dos emin= 0d0 emax= OmegaMax - eta= (emax- emin)/ dble(NE)*5d0 + eta_broadening= (emax- emin)/ dble(NE)*5d0 !> energy do ie=1, NE @@ -814,7 +816,7 @@ subroutine dos_joint_dos do ib1= iband_low, iband_high-1 do ib2= ib1+1, iband_high x= omega_jdos(ie)- W(ib2) + W(ib1) - jdos_mpi(ie)= jdos_mpi(ie)+ delta(eta, x)* (fermi_dis(ib1)- fermi_dis(ib2)) + jdos_mpi(ie)= jdos_mpi(ie)+ delta(eta_broadening, x)* (fermi_dis(ib1)- fermi_dis(ib2)) enddo ! ib2 enddo ! ib1 enddo ! ie @@ -824,7 +826,7 @@ subroutine dos_joint_dos !> intergrate with k do ib= iband_low, iband_high-1 x= omega_dos(ie)- W(ib) - dos_mpi(ie) = dos_mpi(ie)+ delta(eta, x) + dos_mpi(ie) = dos_mpi(ie)+ delta(eta_broadening, x) enddo ! ib enddo ! ie diff --git a/src/ek_bulk.f90 b/src/ek_bulk.f90 index e4aadd7f..ec9381e6 100644 --- a/src/ek_bulk.f90 +++ b/src/ek_bulk.f90 @@ -42,7 +42,7 @@ subroutine ek_bulk_line do ik= 1+cpuid, knv3, num_cpu - k = k3points(:, ik) + k = kpath_3d(:, ik) ! calculation bulk hamiltonian Hamk_bulk= 0d0 @@ -232,7 +232,7 @@ subroutine ek_bulk_line_valley do ik= 1+cpuid, knv3, num_cpu - k = k3points(:, ik) + k = kpath_3d(:, ik) ! calculation bulk hamiltonian Hamk_bulk= 0d0 @@ -465,7 +465,7 @@ subroutine ek_bulk_point_mode do ik=1, Nk3_point_mode write(outfileindex, '(a, i10)')'# No. of k point', ik write(outfileindex, '("#",a9,100a10)')'k1', 'k2', 'k3', 'kx', 'ky', 'kz' - write(outfileindex, '(100f10.6)')k3points_pointmode_direct(:, ik), k3points_pointmode_cart(:, ik) + write(outfileindex, '(100f10.6)')k3points_pointmode_direct(:, ik), k3points_pointmode_cart(:, ik)*Angstrom2atomic write(outfileindex, '("#", a11, a19, a)')'band index', 'Eigenvalue', ' orbital weights (0-255)' do i=1, Num_wann write(outfileindex, '(i12, f19.10, 1000i5)')i, eigv_mpi(i, ik), & @@ -1166,8 +1166,8 @@ subroutine sparse_ekbulk real(dp) :: time1, time2, time3 - !if (OmegaNum==0) OmegaNum= Num_wann - !if (NumSelectedEigenVals==0) NumSelectedEigenVals=OmegaNum + if (OmegaNum==0) OmegaNum= Num_wann + if (NumSelectedEigenVals==0) NumSelectedEigenVals=OmegaNum !> first use NumSelectedEigenVals, if NumSelectedEigenVals is not set, !> then use OmegaNum; if OmegaNum is also not set, @@ -1189,6 +1189,8 @@ subroutine sparse_ekbulk nvecs=int(2*neval) endif + if (neval+2>=nvecs) neval= nvecs-2 + if (nvecs<20) nvecs= 20 if (nvecs>Num_wann) nvecs= Num_wann @@ -1232,15 +1234,22 @@ subroutine sparse_ekbulk ritzvec= BulkFatBand_calc + if (cpuid.eq.0)then + write(stdout, *)'# parameters for ARPACK in ek_bulk' + write(stdout, *)'NEV=', neval + write(stdout, *)'NCV=', nvecs + write(stdout, *)'Dimension=', Num_wann + endif + !> calculate the energy bands along special k line k3= 0 !> change the energy unit from Hatree to eV - sigma=(1d0,0d0)*E_arc/eV2Hartree + sigma=(1d0,0d0)*iso_energy/eV2Hartree do ik=1+ cpuid, nk3_band, num_cpu if (cpuid==0) write(stdout, '(a, 2i10)') 'BulkBand_calc in sparse mode:', ik,nk3_band - k3 = K3points(:, ik) + k3 = kpath_3d(:, ik) call now(time1) !> use atomic gauge here call ham_bulk_coo_sparsehr(k3,acoo,icoo,jcoo) @@ -1494,13 +1503,13 @@ subroutine sparse_ekbulk_valley ritzvec= .True. !> change the energy unit from Hatree to eV - sigma=(1d0,0d0)*E_arc/eV2Hartree + sigma=(1d0,0d0)*iso_energy/eV2Hartree !> calculate the energy bands along special k line k3= 0 do ik=1+ cpuid, nk3_band, num_cpu if (cpuid==0) write(stdout, '(a, 2i10)') 'BulkBand_calc in sparse mode:', ik,nk3_band - k3 = K3points(:, ik) + k3 = kpath_3d(:, ik) call now(time1) call ham_bulk_coo_sparsehr(k3,acoo,icoo,jcoo) !> change the energy unit from Hatree to eV @@ -1786,7 +1795,7 @@ subroutine sparse_ekbulk_plane enddo enddo - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy nnzmax=splen+Num_wann nnz=splen allocate( acoo(nnzmax)) @@ -2033,7 +2042,7 @@ subroutine ekbulk_elpa haml_block=0.0d0 z=0.0d0 - k3 = k3points(:, ik) + k3 = kpath_3d(:, ik) call ham_bulk_elpa( k3, haml_block,& np_rows,np_cols,& na_rows,na_cols,& @@ -2541,7 +2550,7 @@ subroutine ek_bulk2D_spin_green Hamk_bulk= Hamk_bulk/eV2Hartree !> diagonalization by call zheev in lapack - Hamk_bulk= Hamk_bulk+ zi*eta_arc + Hamk_bulk= Hamk_bulk+ zi*Fermi_broadening call inv(Num_wann, Hamk_bulk) do i=1, Num_wann dos(ik)= dos(ik) -aimag(Hamk_bulk(i, i)) @@ -2690,7 +2699,7 @@ subroutine ek_bulk_mengyu !if (cpuid==0) write(stdout, *)'BulkBand, ik, knv3 ', ik, knv3 !> in fractional coordinates - k = k3points(:, ik) + k = kpath_3d(:, ik) kxy_cart(:)= k(1)* Origin_cell%Kua+ k(2)* Origin_cell%Kub+ k(3)* Origin_cell%Kuc call rotate_k3_to_kplane(kxy_cart(:), kxy_plane(:)) @@ -2876,7 +2885,7 @@ subroutine ek_bulk_spin do ik= 1+cpuid, knv3, num_cpu if (cpuid==0) write(stdout, *)'BulkBandSpin, ik, knv3 ', ik, knv3 - k = k3points(:, ik) + k = kpath_3d(:, ik) ! calculation bulk hamiltonian Hamk_bulk= 0d0 @@ -3000,14 +3009,14 @@ subroutine ek_bulk_mirror_z do ik= 1+cpuid, knv3, num_cpu if (cpuid==0) write(stdout, *)'BulkBandmirrorz, ik, knv3 ', ik, knv3 - k = k3points(:, ik) + k = kpath_3d(:, ik) ! calculation bulk hamiltonian Hamk_bulk= 0d0 call ham_bulk_atomicgauge (k, Hamk_bulk) Hamk_bulk= Hamk_bulk/eV2Hartree - k = k3points(:, ik) + k = kpath_3d(:, ik) !k(2)= -k(2) Hamk= 0d0 call ham_bulk_latticegauge (k, Hamk) @@ -3168,14 +3177,14 @@ subroutine ek_bulk_mirror_x do ik= 1+cpuid, knv3, num_cpu if (cpuid==0) write(stdout, *)'EkBulk_mirror, ik, knv3 ', ik, knv3 - k = k3points(:, ik) + k = kpath_3d(:, ik) ! calculation bulk hamiltonian Hamk_bulk= 0d0 call ham_bulk_latticegauge (k, Hamk_bulk) Hamk_bulk= Hamk_bulk/eV2Hartree - !k = k3points(:, ik) + !k = kpath_3d(:, ik) !k(1)= -k(1) !Hamk= 0d0 !call ham_bulk_latticegauge (k, Hamk) @@ -3363,6 +3372,8 @@ subroutine generate_ek_kpath_gnu(datafilename, gnufilename, gnuoutfilename, & outfileindex= outfileindex+ 1 if (cpuid==0) then open(unit=outfileindex, file=gnufilename) + write(outfileindex, '(a)') '# requirement: gnuplot version>5.4' + write(outfileindex, '(2a)') '# Please open the data file to check the data: ', trim(adjustl(datafilename)) write(outfileindex, '(a)') 'set terminal pdf enhanced color font ",24"' write(outfileindex,'(2a)') 'set palette defined ( 0 "green", ', & '5 "yellow", 10 "red" )' @@ -3374,6 +3385,7 @@ subroutine generate_ek_kpath_gnu(datafilename, gnufilename, gnuoutfilename, & write(outfileindex, '(a)')'#set ytics font ",24"' write(outfileindex, '(a)')'#set ylabel font ",24"' write(outfileindex, '(a)')'set ylabel offset 0.5,0' + write(outfileindex, '(a)')'set border lw 2' write(outfileindex, '(a, f10.5, a)')'set xrange [0: ', maxval(klen*Angstrom2atomic), ']' write(outfileindex, '(a,f12.6)')'emin=', emin write(outfileindex, '(a,f12.6)')'emax=', emax @@ -3396,27 +3408,27 @@ subroutine generate_ek_kpath_gnu(datafilename, gnufilename, gnuoutfilename, & enddo write(outfileindex, '(2a)')"# please comment the following lines to plot the fatband " if (Is_Sparse_Hr) then - write(outfileindex, '(2a)')"plot 'bulkek.dat' u 1:2 ", & - " w p pt 7 ps 0.2 lc rgb 'black', 0 w l lw 2" + write(outfileindex, '(4a)')"plot '", trim(adjustl(datafilename)), "' u 1:2 ", & + " w p pt 7 ps 0.2 lc rgb 'black', 0 w l lw 2 dt 2" else - write(outfileindex, '(2a)')"plot 'bulkek.dat' u 1:2 ", & - " w lp lw 2 pt 7 ps 0.2 lc rgb 'black', 0 w l lw 2" + write(outfileindex, '(4a)')"plot '", trim(adjustl(datafilename)), "' u 1:2 ", & + " w lp lw 2 pt 7 ps 0.2 lc rgb 'black', 0 w l lw 2 dt 2" endif write(outfileindex, '(2a)')" " write(outfileindex, '(2a)')"# uncomment the following lines to plot the fatband " - write(outfileindex, '(2a)')"#plot 'bulkek.dat' u 1:2:3 ", & - " w lp lw 2 pt 7 ps 0.2 lc palette, 0 w l lw 2" - write(outfileindex, '(2a)')"# uncomment the following lines to plot the spin if necessary" - write(outfileindex, '(2a)')"#plot 'bulkek.dat' u 1:2 ", & + write(outfileindex, '(4a)')"#plot '", trim(adjustl(datafilename)), "' u 1:2:3 ", & + " w lp lw 2 pt 7 ps 0.2 lc palette, 0 w l lw 2 dt 2" + write(outfileindex, '(4a)')"# uncomment the following lines to plot the spin if necessary" + write(outfileindex, '(4a)')"#plot '", trim(adjustl(datafilename)), "' u 1:2 ", & "w lp lw 2 pt 7 ps 0.2, \" - write(outfileindex, '(2a)')" 'bulkek.dat' u 1:2:($3/6):($4/6) ", & + write(outfileindex, '(4a)')"#plot '", trim(adjustl(datafilename)), "' u 1:2:($3/6):($4/6) ", & "w vec" close(outfileindex) endif 202 format('set xtics (',20('"',A3,'" ',F10.5,',')) 203 format(A3,'" ',F10.5,')') -204 format('set arrow from ',F10.5,',',A5,' to ',F10.5,',',A5, ' nohead') +204 format('set arrow from ',F10.5,',',A5,' to ',F10.5,',',A5, ' nohead lw 2') return -end subroutine +end subroutine generate_ek_kpath_gnu diff --git a/src/ek_bulk2D.f90 b/src/ek_bulk2D.f90 index e2af0fd4..c8ca3f6c 100644 --- a/src/ek_bulk2D.f90 +++ b/src/ek_bulk2D.f90 @@ -435,7 +435,7 @@ subroutine ek_bulk2D_spin_green call ham_bulk(k, Hamk_bulk) !> diagonalization by call zheev in lapack - Hamk_bulk= Hamk_bulk+ zi*eta_arc + Hamk_bulk= Hamk_bulk+ zi*Fermi_broadening call inv(Num_wann, Hamk_bulk) do i=1, Num_wann dos(ik)= dos(ik) -aimag(Hamk_bulk(i, i)) diff --git a/src/ek_slab.f90 b/src/ek_slab.f90 index 7dec956b..6d9cc9de 100644 --- a/src/ek_slab.f90 +++ b/src/ek_slab.f90 @@ -73,8 +73,13 @@ subroutine ek_slab k= k2_path(i, :) chamk=0.0d0 - call ham_slab(k,Chamk) - + !> surface Zeeman splitting for BdG + if (abs(Bz_surf)>eps9.or.abs(Bx_surf)>eps9.or.abs(By_surf)>eps9) then + call ham_slab_surface_zeeman(k,Chamk) + !> no surface Zeeman splitting + else + call ham_slab(k,Chamk) + endif eigenvalue=0.0d0 @@ -169,6 +174,7 @@ subroutine ek_slab outfileindex= outfileindex+ 1 if (cpuid==0) then open(unit=outfileindex, file='slabek.gnu') + write(outfileindex, '(a)') '# requirement: gnuplot version>5.4' write(outfileindex, '(a)')"set encoding iso_8859_1" write(outfileindex, '(a)')'#set terminal postscript enhanced color' write(outfileindex, '(a)')"#set output 'slabek.eps'" @@ -189,7 +195,7 @@ subroutine ek_slab write(outfileindex, '(a)')'#set ytics font ",36"' write(outfileindex, '(a)')'#set ylabel font ",36"' write(outfileindex, '(a)')'#set xtics offset 0, -1' - write(outfileindex, '(a)')'set ylabel offset -1, 0 ' + write(outfileindex, '(a)')'set ylabel offset -0.5, 0 ' write(outfileindex, '(a, f10.5, a)')'set xrange [0: ', maxval(k2len)*Angstrom2atomic, ']' if (index(Particle,'phonon')/=0) then write(outfileindex, '(a, f10.5, a)')'set yrange [0:', emax, ']' @@ -313,7 +319,7 @@ subroutine ek_slab_sparseHR if (nvecs>Ndimq) nvecs= Ndimq - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy allocate( acoo(nnzmax), stat= ierr) call printallocationinfo('acoo', ierr) @@ -463,6 +469,7 @@ subroutine ek_slab_sparseHR outfileindex= outfileindex+ 1 if (cpuid==0) then open(unit=outfileindex, file='slabek.gnu') + write(outfileindex, '(a)') '# requirement: gnuplot version>5.4' write(outfileindex, '(a)')"set encoding iso_8859_1" write(outfileindex, '(a)')'#set terminal postscript enhanced color' write(outfileindex, '(a)')"#set output 'slabek.eps'" @@ -477,13 +484,13 @@ subroutine ek_slab_sparseHR write(outfileindex, '(a)')'unset ztics' write(outfileindex, '(a)')'unset key' write(outfileindex, '(a)')'set pointsize 0.8' - write(outfileindex, '(a)')'set border lw 3 ' + write(outfileindex, '(a)')'set border lw 3' write(outfileindex, '(a)')'set view 0,0' write(outfileindex, '(a)')'#set xtics font ",36"' write(outfileindex, '(a)')'#set ytics font ",36"' write(outfileindex, '(a)')'#set ylabel font ",36"' write(outfileindex, '(a)')'#set xtics offset 0, -1' - write(outfileindex, '(a)')'set ylabel offset -1, 0 ' + write(outfileindex, '(a)')'set ylabel offset -0.5, 0 ' write(outfileindex, '(a, f10.5, a)')'set xrange [0: ', maxval(k2len*Angstrom2atomic), ']' if (index(Particle,'phonon')/=0) then write(outfileindex, '(a, f10.5, a)')'set yrange [0:', emax, ']' @@ -700,6 +707,7 @@ subroutine ek_slab_kplane outfileindex= outfileindex+ 1 if (cpuid==0)then open(unit=outfileindex, file='slabek_plane.gnu') + write(outfileindex, '(a)') '# requirement: gnuplot version>5.4' write(outfileindex, '(a)')"set encoding iso_8859_1" write(outfileindex, '(a)')'#set terminal postscript enhanced color' write(outfileindex, '(a)')"#set output 'slabek_plane.eps'" diff --git a/src/fermiarc.f90 b/src/fermiarc.f90 index e5e69291..bb33b9e6 100644 --- a/src/fermiarc.f90 +++ b/src/fermiarc.f90 @@ -39,6 +39,7 @@ subroutine SurfaceDOSkk real(dp) :: s0(3), s1(3) real(dp) :: K2D_vec_a(2), K2D_vec_b(2) real(dp) :: sx_bulk, sy_bulk, sz_bulk + real(dp) :: eta_broadening integer , allocatable :: ik12(:,:) real(dp), allocatable :: k12(:,:), k12_shape(:,:) @@ -109,24 +110,30 @@ subroutine SurfaceDOSkk sx_r_mpi=0d0; sy_r_mpi=0d0; sz_r_mpi=0d0 endif - !> ceiling if K2D_vec are positive, floor if K2D_vec are negative - do i = 1, 2 - if (K2D_vec1(i)>0) then - K2D_vec_a(i)= ceiling(K2D_vec1(i)) - else - K2D_vec_a(i)= floor(K2D_vec1(i)) - endif - - if (K2D_vec2(i)>0) then - K2D_vec_b(i)= ceiling(K2D_vec2(i)) - else - K2D_vec_b(i)= floor(K2D_vec2(i)) + if (SlabQPI_kplane_calc) then + !> ceiling if K2D_vec are positive, floor if K2D_vec are negative + do i = 1, 2 + if (K2D_vec1(i)>0) then + K2D_vec_a(i)= ceiling(K2D_vec1(i)) + else + K2D_vec_a(i)= floor(K2D_vec1(i)) + endif + + if (K2D_vec2(i)>0) then + K2D_vec_b(i)= ceiling(K2D_vec2(i)) + else + K2D_vec_b(i)= floor(K2D_vec2(i)) + endif + enddo + if (cpuid==0) then + write(stdout, '(a)')'WARNING : Your setting of KPLANE_SLAB has been modified because QPI calculation requires the information of the full BZ. ' + write(outfileindex, '(a)') '# requirement: gnuplot version>5.4' + write(stdout, '((a, 2f8.4))')'The first modified vector in QPI: ', K2D_vec_a + write(stdout, '((a, 2f8.4))')'The second modified vector in QPI: ', K2D_vec_b endif - enddo - if (cpuid==0) then - write(stdout, '(a)')'WARNING : Your setting of KPLANE_SLAB has been modified because QPI calculation requires the information of the full BZ. ' - write(stdout, '((a, 2f8.4))')'The first modified vector in QPI: ', K2D_vec_a - write(stdout, '((a, 2f8.4))')'The second modified vector in QPI: ', K2D_vec_b + else + K2D_vec_a= K2D_vec1 + K2D_vec_b= K2D_vec2 endif @@ -183,8 +190,8 @@ subroutine SurfaceDOSkk !endif endif - omega = E_arc - eta= eta_arc + omega = iso_energy + eta_broadening= Fermi_broadening !> deal with phonon system !> for phonon system, omega should be changed to omega^2 @@ -219,8 +226,8 @@ subroutine SurfaceDOSkk ! the method in 1985 is better, you can find the ref in the ! subroutine call now(time1) - call surfgreen_1985(omega,GLL,GRR,GB,H00,H01,ones) - ! call surfgreen_1984(omega,GLL,GRR,H00,H01,ones) + call surfgreen_1985(omega,GLL,GRR,GB,H00,H01,ones, eta_broadening) + ! call surfgreen_1984(omega,GLL,GRR,H00,H01,ones, eta_broadening) call now(time2) time_ss= time_ss+time2-time1 @@ -482,7 +489,7 @@ subroutine SurfaceDOSkk if (cpuid.eq.0)then write(stdout,*)'Ndim: ',ndim - write(stdout,*)'Nk1,Nk2,eta: ',nkx, nky, eta + write(stdout,*)'Nk1,Nk2,eta_broadening: ',nkx, nky, eta_broadening write(stdout,*)'Calculated surface density of state successfully' endif diff --git a/src/fermisurface.f90 b/src/fermisurface.f90 index 9250f332..21046a20 100644 --- a/src/fermisurface.f90 +++ b/src/fermisurface.f90 @@ -285,7 +285,7 @@ subroutine orbitaltexture endif - Hamk_bulk= (E_arc -zi* eta_arc)* ones - Hamk_bulk + Hamk_bulk= (iso_energy -zi* Fermi_broadening)* ones - Hamk_bulk call inv(Num_wann, Hamk_bulk) do i=1, Num_wann dos(ik, i)= aimag(Hamk_bulk(i, i))/pi @@ -567,7 +567,7 @@ subroutine fermisurface_kplane Hamk_bulk= 0d0 call ham_bulk_latticegauge(k, Hamk_bulk) - Hamk_bulk= (E_arc -zi* eta_arc)* ones - Hamk_bulk + Hamk_bulk= (iso_energy -zi* Fermi_broadening)* ones - Hamk_bulk !> Hamk_bulk is the Green's function after subroutine inv. call inv(Num_wann, Hamk_bulk) @@ -894,7 +894,7 @@ subroutine fermisurface_stack Hamk_bulk= 0d0 call ham_bulk_latticegauge(k, Hamk_bulk) - Hamk_bulk= (E_arc -zi* eta_arc)* ones - Hamk_bulk + Hamk_bulk= (iso_energy -zi* Fermi_broadening)* ones - Hamk_bulk call inv(Num_wann, Hamk_bulk) do i=1, Num_wann @@ -1583,7 +1583,7 @@ subroutine get_density density = 0d0 eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening if (NumT>1) then do iT=1, NumT diff --git a/src/ham_qlayer2qlayer.f90 b/src/ham_qlayer2qlayer.f90 index 4f0559f4..41e94b2d 100644 --- a/src/ham_qlayer2qlayer.f90 +++ b/src/ham_qlayer2qlayer.f90 @@ -17,6 +17,7 @@ subroutine ham_qlayer2qlayer(k,H00new,H01new) ! new index used to sign irvec real(dp) :: new_ia,new_ib,new_ic integer :: inew_ic + integer :: int_ic ! wave vector k times lattice vector R real(Dp) :: kdotr @@ -44,21 +45,19 @@ subroutine ham_qlayer2qlayer(k,H00new,H01new) allocate(Hij(Num_wann,Num_wann,-ijmax:ijmax)) Hij=0.0d0 - do iR=1,Nrpts - ia=irvec(1,iR) - ib=irvec(2,iR) - ic=irvec(3,iR) - - call latticetransform(ia, ib, ic, new_ia, new_ib, new_ic) - - inew_ic= int(new_ic) - if (abs(new_ic).le.ijmax)then - kdotr=k(1)*new_ia+ k(2)*new_ib + do iR=1,nrpts_surfacecell + ia=irvec_surfacecell(1,iR) + ib=irvec_surfacecell(2,iR) + ic=irvec_surfacecell(3,iR) + + int_ic= int(ic) + if (abs(ic).le.ijmax)then + kdotr=k(1)*ia+ k(2)*ib ratio=cos(2d0*pi*kdotr)+zi*sin(2d0*pi*kdotr) - Hij(1:Num_wann, 1:Num_wann, inew_ic )& - =Hij(1:Num_wann, 1:Num_wann, inew_ic)& - +HmnR(:,:,iR)*ratio/ndegen(iR) + Hij(1:Num_wann, 1:Num_wann, int_ic )& + =Hij(1:Num_wann, 1:Num_wann, int_ic)& + +HmnR_surfacecell(:,:,iR)*ratio/ndegen_surfacecell(iR) endif enddo @@ -443,7 +442,7 @@ subroutine ham_qlayer2qlayer2(k,Hij) implicit none ! loop index - integer :: iR, inew_ic + integer :: iR, inew_ic, int_ic real(dp) :: ia, ib, ic ! new index used to sign irvec @@ -460,22 +459,21 @@ subroutine ham_qlayer2qlayer2(k,Hij) complex(Dp), intent(out) :: Hij(-ijmax:ijmax,Num_wann,Num_wann) Hij=0.0d0 - do iR=1,Nrpts - ia=irvec(1,iR) - ib=irvec(2,iR) - ic=irvec(3,iR) - !> new lattice - call latticetransform(ia, ib, ic, new_ia, new_ib, new_ic) + do iR=1,nrpts_surfacecell + ia=irvec_surfacecell(1,iR) + ib=irvec_surfacecell(2,iR) + ic=irvec_surfacecell(3,iR) - inew_ic= int(new_ic) - if (abs(new_ic).le.ijmax)then - kdotr=k(1)*new_ia+k(2)*new_ib + int_ic= int(ic) + if (abs(ic).le.ijmax)then + kdotr=k(1)*ia+k(2)*ib ratio=cos(2d0*pi*kdotr)+zi*sin(2d0*pi*kdotr) - Hij(inew_ic, 1:Num_wann, 1:Num_wann )& - =Hij(inew_ic, 1:Num_wann, 1:Num_wann )& - +HmnR(:,:,iR)*ratio/ndegen(iR) + Hij(int_ic, 1:Num_wann, 1:Num_wann )& + =Hij(int_ic, 1:Num_wann, 1:Num_wann )& + +HmnR_surfacecell(:,:,iR)*ratio/ndegen_surfacecell(iR) + endif enddo diff --git a/src/lanczos_sparse.f90 b/src/lanczos_sparse.f90 index 3b4173d1..bab8f206 100644 --- a/src/lanczos_sparse.f90 +++ b/src/lanczos_sparse.f90 @@ -329,7 +329,7 @@ subroutine LandauLevel_B_dos_Lanczos use sparse use wmpi use mt19937_64 - use para, only : Magq, Num_Wann, Bx, By, zi, pi, eta_arc, E_arc, & + use para, only : Magq, Num_Wann, Bx, By, zi, pi, Fermi_broadening, iso_energy, & OmegaNum, OmegaMin, OmegaMax, Magp, stdout, Magp_min, Magp_max, & outfileindex, Single_KPOINT_3D_DIRECT,splen,Is_Sparse_Hr, eV2Hartree, & MagneticSuperProjectedArea,ijmax,NumLCZVecs, NumRandomConfs, Add_Zeeman_Field @@ -379,7 +379,7 @@ subroutine LandauLevel_B_dos_Lanczos allocate(eta_array(NumberofEta)) allocate(n_Earc(NumberofEta)) eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening Nq= Magq @@ -581,7 +581,7 @@ subroutine LandauLevel_B_dos_Lanczos !> find n_int at EF do ie=1, omeganum - if (omega(ie)>E_arc) then + if (omega(ie)>iso_energy) then ie_Earc= ie- 1 exit endif @@ -593,7 +593,7 @@ subroutine LandauLevel_B_dos_Lanczos write(outfileindex, '(300f16.6)')flux(ib)/2d0/pi, mag_Tesla(ib), omega(ie)/eV2Hartree, dos_B_omega_mpi(ib, ie, :) enddo - !> get number of electrons between the lowest energy level and E_arc + !> get number of electrons between the lowest energy level and iso_energy n_Earc= 0d0 do ie=1, ie_Earc n_Earc(:)= n_Earc(:)+ dos_B_omega_mpi(ib, ie, :) @@ -699,8 +699,8 @@ subroutine LandauLevel_k_dos_Lanczos use prec use sparse use wmpi - use para, only : Magq, Num_Wann, Bx, By, zi, pi, eta_arc, Angstrom2atomic, & - OmegaNum, OmegaMin, OmegaMax, nk3_band, Magp, stdout, k3points, eV2Hartree, & + use para, only : Magq, Num_Wann, Bx, By, zi, pi, Fermi_broadening, Angstrom2atomic, & + OmegaNum, OmegaMin, OmegaMax, nk3_band, Magp, stdout, kpath_3d, eV2Hartree, & outfileindex, K3len_mag,splen,Is_Sparse_Hr,ijmax,NumLCZVecs, MagneticSuperProjectedArea, & Nk3lines, k3line_mag_stop, k3line_name, NumRandomConfs implicit none @@ -823,7 +823,7 @@ subroutine LandauLevel_k_dos_Lanczos InitialVector= InitialVector/dsqrt(dble(norm)) if (cpuid==0) write(stdout, '(a, 2i10)') 'LandauLevel_k_DOS', ik, nk3_band - k3= k3points(:, ik) + k3= kpath_3d(:, ik) nnz= nnzmax if(Is_Sparse_Hr) then call ham_3Dlandau_sparseHR(nnz,Mdim,NQ,k3,acsr,jcsr,icsr) @@ -847,7 +847,7 @@ subroutine LandauLevel_k_dos_Lanczos do ie=1, OmegaNum energy= omega(ie) dos_k_omega(ik, ie)=dos_k_omega(ik, ie)+ & - continued_fraction(Alpha,Betan,energy,eta_arc,NumLczVectors_out, term) + continued_fraction(Alpha,Betan,energy,Fermi_broadening,NumLczVectors_out, term) enddo call now(time_end) enddo ! it= 1, NumRandomConfs @@ -929,8 +929,8 @@ subroutine bulkbandk_dos_lanczos use prec use sparse use wmpi - use para, only : Magq, Num_Wann, Bx, By, zi, pi, eta_arc, Angstrom2atomic, & - OmegaNum, OmegaMin, OmegaMax, nk3_band, Magp, stdout, k3points, & + use para, only : Magq, Num_Wann, Bx, By, zi, pi, Fermi_broadening, Angstrom2atomic, & + OmegaNum, OmegaMin, OmegaMax, nk3_band, Magp, stdout, kpath_3d, & outfileindex, K3len,splen,Is_Sparse_Hr,ijmax,NumLCZVecs, eV2Hartree implicit none @@ -1016,7 +1016,7 @@ subroutine bulkbandk_dos_lanczos InitialVector= InitialVector/dsqrt(dble(norm)) if (cpuid==0) write(stdout, '(a, 2i10)') 'LandauLevel_k_DOS', ik, nk3_band - k3= k3points(:, ik) + k3= kpath_3d(:, ik) nnz= nnzmax if(Is_Sparse_Hr) then call ham_bulk_coo_sparsehr(k3, acsr,jcsr,icsr) @@ -1039,7 +1039,7 @@ subroutine bulkbandk_dos_lanczos term = .False. do ie=1, OmegaNum energy= omega(ie) - dos_k_omega(ik, ie)=continued_fraction(Alpha,Betan,energy,eta_arc,NumLczVectors_out, term) + dos_k_omega(ik, ie)=continued_fraction(Alpha,Betan,energy,Fermi_broadening,NumLczVectors_out, term) enddo enddo @@ -1104,7 +1104,7 @@ subroutine bulk_dos_lanczos use prec use sparse use wmpi - use para, only : Num_Wann, Bx, By, zi, pi, eta_arc, & + use para, only : Num_Wann, Bx, By, zi, pi, Fermi_broadening, & OmegaNum, OmegaMin, OmegaMax, nk3_band, Magp, stdout, & outfileindex,splen,Is_Sparse_Hr,ijmax,NumLCZVecs,Nk1,Nk2,Nk3,& K3D_start_cube,K3D_vec1_cube,K3D_vec2_cube,K3D_vec3_cube, & @@ -1168,7 +1168,7 @@ subroutine bulk_dos_lanczos omega= Omega_array eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening allocate(InitialVector(Mdim)) allocate(Alpha(NumLczVectors), Betan(NumLczVectors)) @@ -1312,7 +1312,7 @@ subroutine SeqLanczosDOS use prec use sparse use wmpi - use para, only : Magq, Num_Wann, Bx, By, zi, pi, eta_arc, & + use para, only : Magq, Num_Wann, Bx, By, zi, pi, Fermi_broadening, & eV2Hartree, OmegaNum, OmegaMin, OmegaMax, Omega_array implicit none @@ -1403,7 +1403,7 @@ subroutine SeqLanczosDOS !> Betan(1) is meaningless. term = .True. do ie=1, OmegaNum - dos(ie)=continued_fraction(Alpha,Betan,omega(ie),eta_arc,NumLczVectors_out, term) + dos(ie)=continued_fraction(Alpha,Betan,omega(ie),Fermi_broadening,NumLczVectors_out, term) write(10001, '(100f16.6)') omega(ie), dos(ie) enddo @@ -1482,7 +1482,7 @@ end function lastterm !> check whether the lanczos procedure is converged subroutine lanczos_converged(alphan,betan, NumLczVectors, current_lcz_vectors, dos_old, & error, term, converged) - use para, only : dp, OmegaNum, Omega_array, eta_arc, eps6 + use para, only : dp, OmegaNum, Omega_array, Fermi_broadening, eps6 implicit none !>> Lanczos elements @@ -1503,7 +1503,7 @@ subroutine lanczos_converged(alphan,betan, NumLczVectors, current_lcz_vectors, d area = 0d0 do ie=1, OmegaNum e=Omega_array(ie) - tmp = continued_fraction(alphan, betan, e, eta_arc, current_lcz_vectors, term) + tmp = continued_fraction(alphan, betan, e, Fermi_broadening, current_lcz_vectors, term) diff = diff + abs(dos_old(ie)-tmp) area = area + abs(tmp) dos_old(ie) = tmp diff --git a/src/landau_level.f90 b/src/landau_level.f90 index 2682d741..48c01248 100644 --- a/src/landau_level.f90 +++ b/src/landau_level.f90 @@ -140,7 +140,7 @@ subroutine landau_level_k call now(time_start) - k3= k3points(:, ik) + k3= kpath_3d(:, ik) call ham_3Dlandau(Ndimq, Nq, k3, ham_landau) ham_landau= ham_landau/eV2Hartree @@ -177,14 +177,14 @@ subroutine landau_level_k enddo ! sweep the selected orbitals enddo ! iq sweep the magnetic supercell if (landau_chern_calc) then - do iq=1, 2 ! edge states + do iq=1, 1 ! edge states if (iq>Nq) cycle do i= 1, NumberofSelectedOrbitals(ig) j= Num_wann*(iq-1)+ Selected_WannierOrbitals(ig)%iarray(i) dos_l_selected(ib, ik, ig)= dos_l_selected(ib, ik, ig)+ abs(psi(j))**2 enddo ! sweep the selected orbitals enddo ! iq sweep the magnetic supercell - do iq=Nq-1, Nq ! edge states + do iq=Nq, Nq ! edge states if (iq<1) cycle do i= 1, NumberofSelectedOrbitals(ig) j= Num_wann*(iq-1)+ Selected_WannierOrbitals(ig)%iarray(i) @@ -763,7 +763,7 @@ subroutine landau_level_B psi(:)= ham_landau(:, ie) !> the eigenvector of ib'th band do ig=1, NumberofSelectedOrbitals_groups do iq=1, Nq - do i= 1, NumberofSelectedOrbitals(i) + do i= 1, NumberofSelectedOrbitals(ig) j= Num_wann*(iq-1)+ Selected_WannierOrbitals(ig)%iarray(i) dos_selected(ie, ib, ig)= dos_selected(ie, ib, ig)+ abs(psi(j))**2 enddo ! sweep the selected orbitals diff --git a/src/landau_level_sparse.f90 b/src/landau_level_sparse.f90 index 0e9330a7..a7cd37f0 100644 --- a/src/landau_level_sparse.f90 +++ b/src/landau_level_sparse.f90 @@ -632,7 +632,7 @@ subroutine sparse_landau_level_B if (nvecs>Ndimq) nvecs= Ndimq - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy Nmag= Magp-1 Nmag1=Nmag/1 @@ -938,7 +938,7 @@ subroutine sparse_landau_level_k if (nvecs<50) nvecs= 50 if (nvecs>Ndimq) nvecs= Ndimq - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy allocate( acoo(nnzmax), stat= ierr) call printallocationinfo('acoo', ierr) @@ -1054,7 +1054,7 @@ subroutine sparse_landau_level_k call now(time_start) if (cpuid==0) write(stdout, '(a, 2i10)') 'LandauLevel_k_calc', ik,nk3_band - k3 = K3points(:, ik) + k3 = kpath_3d(:, ik) nnz= nnzmax call now(time1) acoo= 0d0 @@ -1193,12 +1193,12 @@ subroutine sparse_landau_level_k write(outfileindex, '(a)')'#set xtics offset 0, -1' write(outfileindex, '(a)')'#set ylabel offset -1, 0 ' write(outfileindex, '(a)')'rgb(r,g,b) = int(r)*65536 + int(g)*256 + int(b)' - write(outfileindex, 202, advance="no") (k3line_name(i), k3line_mag_stop(i), i=1, nk3lines) - write(outfileindex, 203)k3line_name(nk3lines+1), k3line_mag_stop(nk3lines+1) + write(outfileindex, 202, advance="no") (k3line_name(i), k3line_mag_stop(i)*Angstrom2atomic, i=1, nk3lines) + write(outfileindex, 203)k3line_name(nk3lines+1), k3line_mag_stop(nk3lines+1)*Angstrom2atomic write(outfileindex, '(a, f10.5, a, f10.5, a)')'set yrange [', emin, ':', emax, ']' do i=1, nk3lines-1 - write(outfileindex, 204)k3line_mag_stop(i+1), emin, k3line_mag_stop(i+1), emax + write(outfileindex, 204)k3line_mag_stop(i+1)*Angstrom2atomic, emin, k3line_mag_stop(i+1)*Angstrom2atomic, emax enddo 202 format('set xtics (',:20('"',A3,'" ',F10.5,',')) @@ -1267,6 +1267,7 @@ subroutine sparse_landau_dos real(dp) :: B0 real(dp) :: theta + real(dp) :: eta_broadening integer :: nnzmax, nnz real(dp) :: dis, dis1 @@ -1311,8 +1312,8 @@ subroutine sparse_landau_dos NE= OmegaNum emin= OmegaMin emax= OmegaMax - eta= (emax- emin)/ dble(NE)*1d0 - if (cpuid.eq.0) write(stdout,*) 'eta=',eta + eta_broadening= (emax- emin)/ dble(NE)*1d0 + if (cpuid.eq.0) write(stdout,*) 'eta_broadening=',eta_broadening allocate(dos_mpi(knv3,NE)) allocate(dos(knv3,NE)) allocate(omega(NE)) @@ -1321,7 +1322,7 @@ subroutine sparse_landau_dos if (NumSelectedEigenVals==0) NumSelectedEigenVals=Ndimq neval=NumSelectedEigenVals nvecs=2*neval - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy Nq= Magq Nmag= Nq Nmag1=20 @@ -1401,7 +1402,7 @@ subroutine sparse_landau_dos do ie= 1, NE do iv= 1, neval x= omega(ie)- W(iv) - dos_mpi(ik,ie) = dos_mpi(ik,ie)+ delta(eta, x) + dos_mpi(ik,ie) = dos_mpi(ik,ie)+ delta(eta_broadening, x) enddo ! iv enddo ! ie if(cpuid==0) then @@ -1518,7 +1519,7 @@ subroutine sparse_export_maghr if (nvecs<50) nvecs= 50 if (nvecs>Ndimq) nvecs= Ndimq - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy allocate( acoo(nnzmax), stat= ierr) call printallocationinfo('acoo', ierr) @@ -1733,12 +1734,12 @@ subroutine sparse_export_maghr write(outfileindex, '(a)')'#set xtics offset 0, -1' write(outfileindex, '(a)')'#set ylabel offset -1, 0 ' write(outfileindex, '(a)')'rgb(r,g,b) = int(r)*65536 + int(g)*256 + int(b)' - write(outfileindex, 202, advance="no") (k3line_name(i), k3line_mag_stop(i), i=1, nk3lines) - write(outfileindex, 203)k3line_name(nk3lines+1), k3line_mag_stop(nk3lines+1) + write(outfileindex, 202, advance="no") (k3line_name(i), k3line_mag_stop(i)*Angstrom2atomic, i=1, nk3lines) + write(outfileindex, 203)k3line_name(nk3lines+1), k3line_mag_stop(nk3lines+1)*Angstrom2atomic write(outfileindex, '(a, f10.5, a, f10.5, a)')'set yrange [', emin, ':', emax, ']' do i=1, nk3lines-1 - write(outfileindex, 204)k3line_mag_stop(i+1), emin, k3line_mag_stop(i+1), emax + write(outfileindex, 204)k3line_mag_stop(i+1)*Angstrom2atomic, emin, k3line_mag_stop(i+1)*Angstrom2atomic, emax enddo 202 format('set xtics (',:20('"',A3,'" ',F10.5,',')) diff --git a/src/main.f90 b/src/main.f90 index f968e989..e54c32ee 100644 --- a/src/main.f90 +++ b/src/main.f90 @@ -98,7 +98,9 @@ program main endif endif - + !> dimension for slab BdG hamiltonians + Num_wann_BdG= 2*Num_wann + !> dimension for surface green's function Ndim= Num_wann* Np @@ -465,11 +467,22 @@ program main if(cpuid.eq.0)write(stdout, *)'<< End of calculating the slab band structure' endif + !> slab band BdG + if (SlabBdG_calc)then + if(cpuid.eq.0)write(stdout, *)' ' + if(cpuid.eq.0)write(stdout, *)'>> Start of calculating the slab BdG band structure' + call now(time_start) + call ek_slab_BdG + call now(time_end) + call print_time_cost(time_start, time_end, 'SlabBand') + if(cpuid.eq.0)write(stdout, *)'<< End of calculating the slab BdG band structure' + endif + if (BerryCurvature_slab_calc)then if(cpuid.eq.0)write(stdout, *)' ' if(cpuid.eq.0)write(stdout, *)'>> Start of calculating the Berry curvature for a slab system' call now(time_start) - call berry_curvarture_slab + call Berry_curvature_slab call now(time_end) call print_time_cost(time_start, time_end, 'BerryCurvature_slab') if(cpuid.eq.0)write(stdout, *)'End of calculating the Berry curvature for a slab system' @@ -479,7 +492,7 @@ program main if(cpuid.eq.0)write(stdout, *)' ' if(cpuid.eq.0)write(stdout, *)'>> Start of calculating the Berry curvature' call now(time_start) - call berry_curvarture_line + call Berry_curvature_line_occupied call now(time_end) call print_time_cost(time_start, time_end, 'BerryCurvature') if(cpuid.eq.0)write(stdout, *)'End of calculating the Berry curvature' @@ -489,17 +502,17 @@ program main if(cpuid.eq.0)write(stdout, *)' ' if(cpuid.eq.0)write(stdout, *)'>> Start of calculating the Berry curvature' call now(time_start) - call berry_curvarture_plane_full + call Berry_curvature_plane_full call now(time_end) call print_time_cost(time_start, time_end, 'BerryCurvature') if(cpuid.eq.0)write(stdout, *)'End of calculating the Berry curvature' endif - if (BerryCurvature_Cube_calc)then + if (BerryCurvature_Cube_calc .or. BerryCurvature_kpath_sepband_calc)then if(cpuid.eq.0)write(stdout, *)' ' if(cpuid.eq.0)write(stdout, *)'>> Start of calculating the Berry curvature in a k-cube' call now(time_start) - call berry_curvarture_cube + call Berry_curvature_cube call now(time_end) call print_time_cost(time_start, time_end, 'BerryCurvature_Cube') if(cpuid.eq.0)write(stdout, *)'End of calculating the Berry curvature in a cube' @@ -529,7 +542,7 @@ program main !> wannier center calculate - if (wanniercenter_calc)then + if (Wilsonloop_calc)then if(cpuid.eq.0)write(stdout, *)' ' if(cpuid.eq.0)write(stdout, *)'>> Start of calculating the Wilson loop' call now(time_start) @@ -539,6 +552,17 @@ program main if(cpuid.eq.0)write(stdout, *)'<< End of calculating the Wilson loop' endif + !> Slab BdG wannier center calculate + if (BdGChern_calc)then + if(cpuid.eq.0)write(stdout, *)' ' + if(cpuid.eq.0)write(stdout, *)'>> Start of calculating the Wilson loop for Slab BdG' + call now(time_start) + call wannier_center2D_BdG ! tmp added by luoay at 2022/04/02 + call now(time_end) + call print_time_cost(time_start, time_end, 'WannierCenterBdG') + if(cpuid.eq.0)write(stdout, *)'<< End of calculating the Wilson loop' + endif + !> mirror chern number calculation if (MirrorChern_calc)then if(cpuid.eq.0)write(stdout, *)' ' diff --git a/src/math_lib.f90 b/src/math_lib.f90 index ef4a5810..eda418ac 100644 --- a/src/math_lib.f90 +++ b/src/math_lib.f90 @@ -154,3 +154,38 @@ subroutine cross_product(R1, R2, R3) return end subroutine cross_product + +Module Kronecker + +contains + +! Takes in Matrices A(i,j),B(k,l), assumed 2D, returns Kronecker Product +! C(i*k,j*l) +function KronProd(A,B) result(C) + + use para, only : Dp + IMPLICIT NONE + + complex(Dp), dimension (:,:), intent(in) :: A, B + complex(Dp), dimension (:,:), allocatable :: C + !real, dimension (:,:), intent(in) :: A, B + !real, dimension (:,:), allocatable :: C + integer :: i = 0, j = 0, k = 0, l = 0 + integer :: m = 0, n = 0, p = 0, q = 0 + + + allocate(C(size(A,1)*size(B,1),size(A,2)*size(B,2))) + C = 0 + + do i = 1,size(A,1) + do j = 1,size(A,2) + n=(i-1)*size(B,1) + 1 + m=n+size(B,1) - 1 + p=(j-1)*size(B,2) + 1 + q=p+size(B,2) - 1 + C(n:m,p:q) = A(i,j)*B + enddo + enddo + +end function KronProd +end module Kronecker \ No newline at end of file diff --git a/src/module.f90 b/src/module.f90 index bcce70d4..f304721f 100644 --- a/src/module.f90 +++ b/src/module.f90 @@ -387,6 +387,7 @@ module para logical :: BulkGap_cube_calc ! Flag for Gap_cube calculation logical :: BulkGap_plane_calc ! Flag for Gap_plane calculation logical :: SlabBand_calc ! Flag for 2D slab energy band calculation + logical :: SlabBdG_calc ! Flag for 2D slab BdG energy band calculation logical :: SlabBandWaveFunc_calc ! Flag for 2D slab band wave function logical :: SlabBand_plane_calc ! Flag for 2D slab energy band calculation logical :: WireBand_calc ! Flag for 1D wire energy band calculation @@ -402,6 +403,8 @@ module para logical :: SlabSpintexture_calc ! Flag for surface state spin-texture calculation logical :: BulkSpintexture_calc ! Flag for spin-texture calculation logical :: WannierCenter_calc ! Flag for Wilson loop calculation + logical :: BdGChern_calc ! Flag for Wilson loop calculation of Slab BdG Hamiltonian + logical :: Wilsonloop_calc ! Flag for Wilson loop calculation logical :: Z2_3D_calc ! Flag for Z2 number calculations of 6 planes logical :: WeylChirality_calc ! Weyl chirality calculation logical :: NLChirality_calc ! Chirality calculation for nodal line @@ -412,6 +415,7 @@ module para logical :: BerryCurvature_plane_selectedbands_calc ! Flag for Berry curvature calculation logical :: BerryCurvature_EF_calc ! Flag for Berry curvature calculation logical :: BerryCurvature_kpath_EF_calc ! Flag for Berry curvature calculation in kpath model at EF + logical :: BerryCurvature_kpath_sepband_calc ! Flag for Berry curvature calculation in kpath model for each band logical :: BerryCurvature_kpath_Occupied_calc ! Flag for Berry curvature calculation in kpath model sum over all occupied bands logical :: BerryCurvature_Cube_calc ! Flag for Berry curvature calculation logical :: BerryCurvature_slab_calc ! Flag for Berry curvature calculation for a slab system @@ -465,8 +469,8 @@ module para SlabSS_calc, SlabArc_calc, SlabSpintexture_calc,& ChargeDensity_selected_bands_calc, & ChargeDensity_selected_energies_calc, & - WireBand_calc, & - WannierCenter_calc,BerryPhase_calc, & + WireBand_calc, Wilsonloop_calc, & + WannierCenter_calc,BerryPhase_calc, BerryCurvature_kpath_sepband_calc, & BerryCurvature_EF_calc, BerryCurvature_calc, & Berrycurvature_kpath_EF_calc, BerryCurvature_kpath_Occupied_calc, & BerryCurvature_plane_selectedbands_calc, & @@ -483,7 +487,7 @@ module para LandauLevel_B_dos_calc,LanczosBand_calc,LanczosDos_calc, & LandauLevel_B_calc, LandauLevel_kplane_calc,landau_chern_calc, & FermiLevel_calc,ANE_calc, export_newhr,export_maghr,w3d_nested_calc, & - valley_projection_calc, Matrix_Element_calc + valley_projection_calc, Matrix_Element_calc, BdGChern_calc, SlabBdG_calc integer :: Nslab ! Number of slabs for 2d Slab system integer :: Nslab1 ! Number of slabs for 1D wire system @@ -502,6 +506,8 @@ module para integer :: Num_wann ! Number of Wannier functions + integer :: Num_wann_BdG ! Number of Wannier functions for BdG + integer :: Nrpts ! Number of R points integer :: Nrpts_valley ! Number of R points @@ -524,10 +530,10 @@ module para integer :: Soc, SOC_in ! A parameter to control soc; Soc=0 means no spin-orbit coupling; Soc>0 means spin-orbit coupling - real(Dp) :: eta ! used to calculate dos epsilon+i eta real(Dp) :: Eta_Arc ! used to calculate dos epsilon+i eta + real(Dp) :: Fermi_broadening ! used to calculate dos epsilon+i eta From version 2.7.1, we replace Fermi_broadening by Fermi_broadening - real(Dp) :: EF_broadening ! used to define the energy range around fermi energy in calculating sigma_OHE + real(Dp) :: EF_integral_range ! in eV used to define the energy range around fermi energy in calculating sigma_OHE integer :: OmegaNum ! The number of energy slices between OmegaMin and OmegaMax @@ -542,6 +548,7 @@ module para real(dp) :: OmegaMin, OmegaMax ! omega interval real(Dp) :: E_arc ! Fermi energy for arc calculation + real(Dp) :: iso_energy ! an iso energy for some properties at a fixed energy. replace iso_energy with iso_energy from version 2.7.2 real(Dp) :: Gap_threshold ! threshold value for output the the k points data for Gap3D @@ -609,8 +616,8 @@ module para real(dp) :: polarization_delta_arpes ! the relative phase between two orthogonal polarization vector components !> namelist parameters - namelist /PARAMETERS/ Eta_Arc,EF_broadening, OmegaNum, OmegaNum_unfold, OmegaMin, OmegaMax, & - E_arc, Nk1, Nk2, Nk3, NP, Gap_threshold, Tmin, Tmax, NumT, & + namelist /PARAMETERS/ E_arc, Fermi_broadening, EF_integral_range, OmegaNum, OmegaNum_unfold, OmegaMin, OmegaMax, & + Eta_Arc, iso_energy, Nk1, Nk2, Nk3, NP, Gap_threshold, Tmin, Tmax, NumT, & NBTau, BTauNum, BTauMax, Rcut, Magp, Magq, Magp_min, Magp_max, Nslice_BTau_Max, & wcc_neighbour_tol, wcc_calc_tol, Beta,NumLCZVecs, iprint_level, & Relaxation_Time_Tau, symprec, arpack_solver, RKF45_PERIODIC_LEVEL, & @@ -627,6 +634,21 @@ module para real(dp) :: Bmagnitude ! sqrt(Bx*Bx+By*By+Bz*Bz) in Tesla real(dp) :: Bdirection(3) !> a unit vector to represent the direction of B. + !>Zeeman field on surface for slab hamiltonian + integer :: Add_surf_zeeman_field ! A parameter to control surface zeeman field; + ! Add_surf_zeeman_field=1 means Zeeman field only in the bottom slab; + ! Add_surf_zeeman_field=2 means Zeeman field only in the top slab; + ! Add_surf_zeeman_field=3 means Zeeman field only in top & bottom two slab + real(dp) :: Bx_surf, By_surf, Bz_surf !> surface zeeman field + + !> for the parameters of BdG Hamiltionian + integer :: Add_Delta_BdG ! A parameter to control s-wave superconducting pairing; + ! Add_Delta_BdG=1 means s-wave superconducting pairing only in the bottom slab; + ! Add_Delta_BdG=2 means s-wave superconducting pairing only in the top slab; + ! Add_Delta_BdG=3 means s-wave superconducting pairing in whole slab + real(dp) :: mu_BdG !> Chemical potential mu + real(dp) :: Delta_BdG !> s-wave superconducting pairing + !> related to Zeeman effect, Zeeman energy =Effective_gfactor*Bohr_magneton*magneticfield !> eg. Effective_gfactor=2, magneticfield=1Tesla, then Zeeman_energy_in_eV =1.16*1E-4 eV logical :: Add_Zeeman_Field ! if consider zeeman effect in the tight binding model @@ -652,6 +674,7 @@ module para !> Some parameters that relate to the properties of the bulk hamiltonian namelist / SYSTEM / Soc, E_fermi, Bx, By, Bz, Btheta, Bphi, surf_onsite, & Nslab, Nslab1, Nslab2, Numoccupied, Ntotch, Bmagnitude, & + Add_surf_zeeman_field, Bx_surf, By_surf, Bz_surf, Add_Delta_BdG, Delta_BdG, mu_BdG, & Add_Zeeman_Field, Effective_gfactor, Zeeman_energy_in_eV, & Electric_field_in_eVpA, Symmetrical_Electric_field_in_eVpA, & Inner_symmetrical_Electric_Field, ijmax, & @@ -796,14 +819,14 @@ module para ! k list for 3D case band integer :: nk3lines ! Howmany k lines for bulk band calculation - integer :: nk3_band ! Howmany k points for each k line + integer :: nk3_band ! Howmany k points for whole kpath character(4), allocatable :: k3line_name(:) ! Name of the K points real(dp),allocatable :: k3line_stop(:) ! Connet points real(dp),allocatable :: k3line_start(:, :) ! Start point for each k line real(dp),allocatable :: k3line_end(:, :) ! End point for each k line real(dp),allocatable :: K3list_band(:, :) ! coordinate of k points for bulk band calculation in kpath mode real(dp),allocatable :: K3len(:) ! put all k points in a line in order to plot the bands - real(dp),allocatable :: K3points(:, :) ! coordinate of k points for bulk band calculation in cube mode + real(dp),allocatable :: kpath_3d(:, :) ! coordinate of k points for bulk band calculation in cube mode !> k points in the point mode integer :: Nk3_point_mode @@ -909,11 +932,18 @@ module para integer, allocatable :: ndegen(:) ! degree of degeneracy of R point - complex(dp), allocatable :: HmnR_newcell(:,:,:) ! Hamiltonian m,n are band indexes + complex(dp), allocatable :: HmnR_surfacecell(:,:,:) ! Hamiltonian m,n are band indexes real(dp), allocatable :: Atom_position_cart_newcell(:,:) ! Hamiltonian m,n are band indexes real(dp), allocatable :: Atom_position_direct_newcell(:,:) ! Hamiltonian m,n are band indexes - integer, allocatable :: irvec_newcell(:,:) ! R coordinates - integer, allocatable :: ndegen_newcell(:) ! degree of degeneracy of R point + integer, allocatable :: irvec_surfacecell(:,:) ! R coordinates + integer, allocatable :: ndegen_surfacecell(:) ! degree of degeneracy of R point + + real(dp), allocatable :: Rmn_old(:) + real(dp), allocatable :: Rmn_new(:) + real(dp), allocatable :: irvec_new(:) + integer, allocatable :: irvec_new_int(:) + integer :: nrpts_surfacecell + real(dp),public, save :: Rua_newcell(3) !> three rotated primitive vectors in old coordinate system real(dp),public, save :: Rub_newcell(3) !> three rotated primitive vectors in old coordinate system real(dp),public, save :: Ruc_newcell(3) !> three rotated primitive vectors in old coordinate system diff --git a/src/readHmnR.f90 b/src/readHmnR.f90 index 70ed2f71..5d9d8b03 100644 --- a/src/readHmnR.f90 +++ b/src/readHmnR.f90 @@ -337,7 +337,7 @@ subroutine get_hmnr_cell(cell) real(dp) :: shift_vec_direct(3) !> for newcell - real(dp) :: apos1d(3),apos2d(3) + real(dp) :: apos1d(3),apos2d(3),apos1dprime(3),apos2dprime(3) !>count newcell nrpts integer :: max_ir integer :: nir1,nir2,nir3, ir_cell @@ -349,6 +349,9 @@ subroutine get_hmnr_cell(cell) integer, allocatable :: allirs(:, :, :, :) integer :: irn1(3),irn2(3) + !> The Allocate Process + integer :: ia1,ia2,ia1prime,ia2prime + max_ir=8 nrpts_max=(2*max_ir+1)**3 allocate( rpts_array(-max_ir:max_ir,-max_ir:max_ir,-max_ir:max_ir)) @@ -356,109 +359,143 @@ subroutine get_hmnr_cell(cell) allocate(allirs(nrpts, num_wann, num_wann, 3)) - call cart_direct_real(shift_to_topsurface_cart, shift_vec_direct, cell%lattice) + allocate(Rmn_old(3)) + allocate(Rmn_new(3)) + allocate(irvec_new(3)) + allocate(irvec_new_int(3)) + + ! call cart_direct_real(shift_to_topsurface_cart, shift_vec_direct, cell%lattice) call date_and_time(DATE=date_now,ZONE=zone_now, TIME=time_now) !> Get new Hrs rpts_array=0 - nrpts_new=0 + nrpts_surfacecell=0 rpts_map= 0 - !> get number of R points for the new cell first + !> 1. Get number of R points for the new cell do ir=1, nrpts - do i=1, Num_wann - do j=1, Num_wann - apos1d= Origin_cell%wannier_centers_direct(:, i)- shift_vec_direct - apos2d= Origin_cell%wannier_centers_direct(:, j)- shift_vec_direct+irvec(:, ir) - call latticetransform(apos1d(1),apos1d(2),apos1d(3),new_ia,new_ib,new_ic) - irn1=floor([new_ia,new_ib,new_ic]) - - call latticetransform(apos2d(1),apos2d(2),apos2d(3),new_ia,new_ib,new_ic) - irn2=floor([new_ia,new_ib,new_ic]) - - nir1=irn2(1)-irn1(1) - nir2=irn2(2)-irn1(2) - nir3=irn2(3)-irn1(3) - if (abs(nir1)>max_ir .or. abs(nir2)>max_ir .or. abs(nir3)>max_ir) cycle - rpts_array(nir1,nir2,nir3)=1 + do j=1, Num_wann + do i=1, Num_wann + ia1 = Origin_cell%spinorbital_to_atom_index(i) + ia2 = Origin_cell%spinorbital_to_atom_index(j) + apos1d = Origin_cell%Atom_position_direct(:, ia1) + apos2d = Origin_cell%Atom_position_direct(:, ia2) + + ia1prime = Cell_defined_by_surface%spinorbital_to_atom_index(i) + ia2prime = Cell_defined_by_surface%spinorbital_to_atom_index(j) + apos1dprime = Cell_defined_by_surface%Atom_position_direct(:,ia1prime) + apos2dprime = Cell_defined_by_surface%Atom_position_direct(:,ia2prime) + + Rmn_old = irvec(:, ir) + apos2d - apos1d + call latticetransform(Rmn_old(1),Rmn_old(2),Rmn_old(3),Rmn_new(1),Rmn_new(2),Rmn_new(3)) + irvec_new = Rmn_new - (apos2dprime - apos1dprime) + + !> Due to the accuracy of computing, need to rounding (but always tiny) + irvec_new_int(1) = ANINT(irvec_new(1)) + irvec_new_int(2) = ANINT(irvec_new(2)) + irvec_new_int(3) = ANINT(irvec_new(3)) + + if (abs(irvec_new_int(1))>max_ir .or. abs(irvec_new_int(2))>max_ir .or. abs(irvec_new_int(3))>max_ir) cycle + rpts_array(irvec_new_int(1),irvec_new_int(2),irvec_new_int(3))=1 + enddo enddo enddo - !> find all irvec - nrpts_new= sum(rpts_array) - allocate(irvec_newcell(3, Nrpts_new)) - iter= 0 + !> The total number of lattice points searched above + nrpts_surfacecell= sum(rpts_array) + + allocate(irvec_surfacecell(3, nrpts_surfacecell)) + irvec_surfacecell = 0 + + !> 2. Create an order map to sign the R points generated in step1 + + iter = 0 do nir3=-max_ir,max_ir do nir2=-max_ir,max_ir do nir1=-max_ir,max_ir if (rpts_array(nir1, nir2, nir3)==1) then iter=iter+1 - irvec_newcell(:, iter)=[nir1, nir2, nir3] + irvec_surfacecell(:, iter)=[nir1, nir2, nir3] rpts_map(nir1, nir2, nir3)=iter endif enddo enddo enddo - !>> hamiltonian for the new cell - allocate(HmnR_newcell(Num_wann, Num_wann, Nrpts_new)) - allocate(ndegen_newcell(Nrpts_new)) - HmnR_newcell= 0d0 - ndegen_newcell= 1 - !> get number of R points for the new cell first + allocate(HmnR_surfacecell(Num_wann, Num_wann, nrpts_surfacecell)) + allocate(ndegen_surfacecell(nrpts_surfacecell)) + HmnR_surfacecell= 0d0 + ndegen_surfacecell= 1 + + !> 3. Allocate the old HmnR to the new HmnR. + !> Note: The cell can't be treated as a mass point. We need to consider the relative coordinates of atoms. do ir=1, nrpts do j=1, Num_wann do i=1, Num_wann - !ia1=Origin_cell%spinorbital_to_atom_index(i) - !ia2=Origin_cell%spinorbital_to_atom_index(j) - !apos1d= Origin_cell%Atom_position_direct(:, ia1)- shift_vec_direct - !apos2d= Origin_cell%Atom_position_direct(:, ia2)- shift_vec_direct+irvec(:, ir) - apos1d= Origin_cell%wannier_centers_direct(:, i)- shift_vec_direct - apos2d= Origin_cell%wannier_centers_direct(:, j)- shift_vec_direct+irvec(:, ir) - call latticetransform(apos1d(1),apos1d(2),apos1d(3),new_ia,new_ib,new_ic) - irn1=floor([new_ia,new_ib,new_ic]) - - call latticetransform(apos2d(1),apos2d(2),apos2d(3),new_ia,new_ib,new_ic) - irn2=floor([new_ia,new_ib,new_ic]) - - nir1=irn2(1)-irn1(1) - nir2=irn2(2)-irn1(2) - nir3=irn2(3)-irn1(3) - if (abs(nir1)>max_ir .or. abs(nir2)>max_ir .or. abs(nir3)>max_ir) cycle - ir_cell= rpts_map(nir1, nir2, nir3) - HmnR_newcell(i,j,ir_cell)=HmnR(i,j,ir)/ndegen(ir) + + ia1 = Origin_cell%spinorbital_to_atom_index(i) + ia2 = Origin_cell%spinorbital_to_atom_index(j) + apos1d = Origin_cell%Atom_position_direct(:, ia1) + apos2d = Origin_cell%Atom_position_direct(:, ia2) + + ia1prime = Cell_defined_by_surface%spinorbital_to_atom_index(i) + ia2prime = Cell_defined_by_surface%spinorbital_to_atom_index(j) + apos1dprime = Cell_defined_by_surface%Atom_position_direct(:,ia1prime) + apos2dprime = Cell_defined_by_surface%Atom_position_direct(:,ia2prime) + + !> R'_mn = R' + tau'_2 - tau'_1 + !> R_mn = R + tau_2 - tau_1 + !> R'_mn = Pinv * R_mn + !> R' = (Pinv * R_mn) - (tau'_2 - tau'_1) + + Rmn_old = irvec(:, ir) + apos2d - apos1d + call latticetransform(Rmn_old(1),Rmn_old(2),Rmn_old(3),Rmn_new(1),Rmn_new(2),Rmn_new(3)) + irvec_new = Rmn_new - (apos2dprime - apos1dprime) + + !> For safety, we perform a rounding operation due to the accuracy of computing + irvec_new_int(1) = ANINT(irvec_new(1)) + irvec_new_int(2) = ANINT(irvec_new(2)) + irvec_new_int(3) = ANINT(irvec_new(3)) + + if (abs(irvec_new_int(1))>max_ir .or. abs(irvec_new_int(2))>max_ir .or. abs(irvec_new_int(3))>max_ir) cycle + ir_cell = rpts_map(irvec_new_int(1), irvec_new_int(2), irvec_new_int(3)) + HmnR_surfacecell(i,j,ir_cell) = HmnR(i,j,ir)/ndegen(ir) + enddo enddo enddo - !> do cut-off according to the hopping value - iter= 0 - do ir=1, nrpts_new - max_val=maxval(abs(HmnR_newcell(:, :, ir)))/eV2Hartree - if (max_val do cut-off according to the hopping value + ! iter= 0 + ! do ir=1, nrpts_new + ! max_val=maxval(abs(HmnR_newcell(:, :, ir)))/eV2Hartree + ! if (max_val Problem: Just cut the nrpts_surfacecell, but the irvec is not well ordered. The order (iter) can be anywhere. !> write to new_hr.dat - nrpts_new=sum(rpts_array)-iter + ! nrpts_surfacecell=sum(rpts_array)-iter + + nrpts_surfacecell=sum(rpts_array) outfileindex= outfileindex+ 1 open(unit=outfileindex, file='wannier90_hr_newcell.dat') write(outfileindex, '(a,1X,a,1X,a,1X, a, a)') & 'HmnR for new cell generated at ', time_now, date_now, 'UTC', zone_now write(outfileindex, *)Num_wann - write(outfileindex, *)nrpts_new - write(outfileindex, '(15I5)')(1 , i=1, nrpts_new) - do ir=1, nrpts_new - max_val=maxval(abs(HmnR_newcell(:, :, ir)))/eV2Hartree + write(outfileindex, *)nrpts_surfacecell + write(outfileindex, '(15I5)')(1 , i=1, nrpts_surfacecell) + do ir=1, nrpts_surfacecell + max_val=maxval(abs(HmnR_surfacecell(:, :, ir)))/eV2Hartree !if (max_val SYSTEM namelist !===============================================================================================================! @@ -310,7 +322,20 @@ subroutine readinput Bx = 0d0 By = 0d0 Bz = 0d0 - + + !>Zeeman field on surface for slab hamiltonian + Add_surf_zeeman_field= 1 + Bx_surf= 0d0 + By_surf= 0d0 + Bz_surf= 0d0 + + !>Chemical potential mu for BdG + mu_BdG = 0d0 + + !>s-Wave Superconducting gap + Add_Delta_BdG = 3 + Delta_BdG = 0d0 + Bmagnitude = 0d0 Btheta = -99999d0 Bphi = -99999d0 @@ -358,11 +383,12 @@ subroutine readinput BerryPhase_calc.or.BerryCurvature_EF_calc.or.BerryCurvature_calc.or.& BerryCurvature_plane_selectedbands_calc.or.BerryCurvature_slab_calc.or.& MirrorChern_calc.or.WeylChirality_calc.or.NLChirality_calc.or.& - FindNodes_calc) then - write(*, *)"ERROR: you should set Numoccupied in namelist SYSTEM correctly" + FindNodes_calc.or.FermiLevel_calc) then + write(*, *)"ERROR: you should set Numoccupied in namelist SYSTEM correctly!!!" stop else Numoccupied = 1 + if (cpuid.eq.0)write(stdout, *)"Warning: Numoccupied is set to 1 since you didn't set it!" endif endif @@ -392,6 +418,7 @@ subroutine readinput write(stdout, '(1x, a, 3f16.6)')"Fermi energy (eV) :", E_FERMI write(stdout, '(1x, a, 3f16.6)')"surf_onsite (eV): ", surf_onsite write(stdout, '(1x, a, L)')"Add_Zeeman_Field: ", Add_Zeeman_Field + write(stdout, '(1x, a, i6)')"Add_surf_zeeman_field for slab system: ",Add_surf_zeeman_field write(stdout, '(1x, a, 3f16.6)')"Zeeman_energy_in_eV (eV): ", Zeeman_energy_in_eV write(stdout, '(1x, a, 3f16.6)')"Electric_field_in_eVpA (eV/Angstrom): ", Electric_field_in_eVpA write(stdout, '(1x, a, 3f16.6)')"Symmetrical_Electric_field_in_eVpA (eV/Angstrom): ", Symmetrical_Electric_field_in_eVpA @@ -411,6 +438,10 @@ subroutine readinput write(stdout, "(1x,a)") "If you specify both of them together, we will choose the first one." write(stdout, "(1x,a)") "If choose the first one, but not specify Btheta, Bphi, then " write(stdout, "(1x,a)") "by default we set Btheta=0, Bphi=0 which means B is along z direction." + write(stdout, '(1x, a, 3f16.6)')"Bx_surf, By_surf, Bz_surf :", Bx_surf,By_surf, Bz_surf + write(stdout, '(1x, a, 3f16.6)')"Chemical potential mu for BdG (eV):", mu_BdG + write(stdout, '(1x, a, i6)')"Add_Delta_BdG for slab system: ", Add_Delta_BdG + write(stdout, '(1x, a, 3f16.6)')"s-wave superconducting pairing Delta (eV): ", Delta_BdG endif !> check if Bmagnitude is specified in the input.dat/wt.in @@ -537,9 +568,10 @@ subroutine readinput !> set up parameters for calculation - E_arc = 0.0d0 - Eta_Arc= 0.001d0 - EF_broadening= 0.05d0 + E_arc = -999d0 + Eta_Arc= -999d0 + Fermi_broadening= 0.005d0 + EF_integral_range= 0.05d0 OmegaNum = 100 OmegaNum_unfold = 0 OmegaMin = -1d0 @@ -579,13 +611,13 @@ subroutine readinput polarization_alpha_arpes= (45d0/180d0)*3.14159265358979d0 polarization_delta_arpes= (0d0/180d0)*3.14159265358979d0 - - !> by default, we only project on atoms for a given wave function projection_weight_mode = "NORMAL" + !>>>> read a lot of parameters from namilist PARAMETERS read(1001, PARAMETERS, iostat= stat) + if (Magp<1) Magp= 0 if (Magp_max<1) Magp_max= Magp if (Magq==0) Magq= Nslab @@ -595,6 +627,7 @@ subroutine readinput if (OmegaNum_unfold==0) OmegaNum_unfold= 200 endif + if (stat>0) then backspace(1001) @@ -604,19 +637,24 @@ subroutine readinput endif + !> try to compatible with old version of WannierTools + !> Fermi_broadening and iso_energy are set in PARAMETERS + if (Eta_Arc>-998d0) Fermi_broadening= Eta_Arc + if (E_Arc>-998d0) iso_energy= E_Arc + NBTau= max(NBTau, BTauNum) projection_weight_mode= upper(projection_weight_mode) if (cpuid==0) then write(stdout, *) " " write(stdout, *) ">>>calculation parameters : " - write(stdout, '(1x, a, f16.5)')'E_arc : ', E_arc - write(stdout, '(1x, a, f16.5)')'Eta_arc : ', Eta_arc + write(stdout, '(1x, a, f16.5, a)')'iso_energy : ', iso_energy, ' eV' + write(stdout, '(1x, a, f16.5, a)')'Fermi_broadening : ', Fermi_broadening, ' eV' write(stdout, '(1x, a, f16.5)')'symprec : ', symprec - write(stdout, '(1x, a, f16.5)')'EF_broadening : ', EF_broadening - write(stdout, '(1x, a, f16.5)')'Gap_threshold', Gap_threshold - write(stdout, '(1x, a, f16.5)')'OmegaMin : ', OmegaMin - write(stdout, '(1x, a, f16.5)')'OmegaMax : ', OmegaMax + write(stdout, '(1x, a, f16.5, a)')'EF_integral_range : ', EF_integral_range, ' eV' + write(stdout, '(1x, a, f16.5, a)')'Gap_threshold', Gap_threshold, ' eV' + write(stdout, '(1x, a, f16.5, a)')'OmegaMin : ', OmegaMin, ' eV' + write(stdout, '(1x, a, f16.5, a)')'OmegaMax : ', OmegaMax, ' eV' write(stdout, '(1x, a, i6 )')'OmegaNum : ', OmegaNum write(stdout, '(1x, a, i6 )')'OmegaNum_unfold : ', OmegaNum_unfold write(stdout, '(1x, a, i6 )')'Nk1 : ', Nk1 @@ -644,16 +682,16 @@ subroutine readinput write(stdout, '(1x, a, i6 )')'NumRandomConfs:', NumRandomConfs write(stdout, '(1x, a, a )')'Projection weight mode:', projection_weight_mode write(stdout, '(1x, a, i8 )')'The size of magnetic supercell is Magq= :', Magq - write(stdout, '(1x, a, i8 )')'Penetration depth of incoming photon for ARPES, in unit angstrom :', penetration_lambda_arpes - write(stdout, '(1x, a, i8 )')'Photon energy for ARPES, in unit eV :', photon_energy_arpes - write(stdout, '(1x, a, i8 )')'Incoming light is at alpha angular to the normal line of the experiment plane :', polarization_alpha_arpes - write(stdout, '(1x, a, i8 )')'The ratio between two orthogonal polarization vector components', polarization_xi_arpes - write(stdout, '(1x, a, i8 )')'The relative phase between two orthogonal polarization vector components', polarization_delta_arpes + write(stdout, '(1x, a, f16.5)')'Penetration depth of incoming photon for ARPES, in unit angstrom :', penetration_lambda_arpes + write(stdout, '(1x, a, f16.5)')'Photon energy for ARPES, in unit eV :', photon_energy_arpes + write(stdout, '(1x, a, f16.5)')'Incoming light is at alpha angular to the normal line of the experiment plane :', polarization_alpha_arpes + write(stdout, '(1x, a, f16.5)')'The ratio between two orthogonal polarization vector components', polarization_xi_arpes + write(stdout, '(1x, a, f16.5)')'The relative phase between two orthogonal polarization vector components', polarization_delta_arpes endif !> changed to atomic units - E_arc= E_arc*eV2Hartree - Eta_Arc = Eta_Arc*eV2Hartree + iso_energy= iso_energy*eV2Hartree + Fermi_broadening = Fermi_broadening*eV2Hartree OmegaMin= OmegaMin*eV2Hartree OmegaMax= OmegaMax*eV2Hartree Gap_threshold= Gap_threshold*eV2Hartree @@ -1097,7 +1135,7 @@ subroutine readinput stop endif - + if (NumLCZVecs> NumberOfspinorbitals) NumLCZVecs= NumberOfspinorbitals 110 continue @@ -1979,11 +2017,11 @@ subroutine readinput allocate(k3len(nk3_band)) allocate(k3len_mag(nk3_band)) allocate(k3len_unfold(nk3_band)) - allocate(k3points(3, nk3_band)) + allocate(kpath_3d(3, nk3_band)) k3len=0d0 k3len_mag=0d0 k3len_unfold=0d0 - k3points= 0d0 + kpath_3d= 0d0 t1= 0d0 do j=1, nk3lines do i=1, NN @@ -1994,7 +2032,7 @@ subroutine readinput !k1= kstart !k2= kend - k3points(:, i+ (j-1)*NN)= kstart+ (kend- kstart)*dble(i-1)/dble(NN-1) + kpath_3d(:, i+ (j-1)*NN)= kstart+ (kend- kstart)*dble(i-1)/dble(NN-1) temp= dsqrt((k2(1)- k1(1))**2 & +(k2(2)- k1(2))**2 & @@ -3549,7 +3587,7 @@ subroutine readinput !> close wt.in close(1001) - eta=(omegamax- omegamin)/omeganum*2d0 + !eta=(omegamax- omegamin)/omeganum*2d0 if(cpuid==0)write(stdout,*)'<< remove the identity positions call eliminate_duplicates_periodic_with_tol(3, NumberofSelectedAtoms(1), pos_direct_sc_all, Nleft, tol) @@ -4826,7 +4864,7 @@ subroutine build_map_supercell_primitivecell print *, 'The selected atoms position' do i=1, NumberofSelectedAtoms(1) !ia= Selected_Atoms(1)%iarray(i) - write(*, '(i7, 30f14.6)')ia, pos_cart_sc_all(:, i ), pos_direct_sc_all(:, i ) + write(*, '(i7, 30f14.6)')i, pos_cart_sc_all(:, i ), pos_direct_sc_all(:, i ) enddo print *, 'The reduced atoms position' do ia=1, Nleft diff --git a/src/sigma_OHE.f90 b/src/sigma_OHE.f90 index ebf020fd..f6588f85 100644 --- a/src/sigma_OHE.f90 +++ b/src/sigma_OHE.f90 @@ -285,7 +285,7 @@ subroutine sigma_ohe_calc_symm(mu_array, KBT_array, BTau_array, Nband_Fermi_Leve !vcrossB(2)= -v_t(3)*Bdirection(1)+ v_t(1)*Bdirection(3) !vcrossB(3)= -v_t(1)*Bdirection(2)+ v_t(2)*Bdirection(1) !if (abs(Enk(ik, iband))<0.05d0.and.dsqrt(sum((abs(vcrossB)**2)))>eps3) then - if (abs(Enk(ik, iband))/eV2Hartreeeps3) then - if (abs(Enk(ik, iband))/eV2Hartree skip the values far away from the fermi surface !if (abs(W(bands_fermi_level(iband)))/eV2Hartree>0.05d0)then - if (abs(W(bands_fermi_level(iband)))/eV2Hartree>EF_broadening)then + if (abs(W(bands_fermi_level(iband)))/eV2Hartree>EF_integral_range)then cycle endif @@ -1409,7 +1409,7 @@ subroutine velocity_calc_iband2(iband, k, velocity_k, E_iband) E_iband= W(1) !> Only the energy levels close to the Fermi level contribute to the conductivity - if (abs(W(1))/eV2Hartree>EF_broadening) then + if (abs(W(1))/eV2Hartree>EF_integral_range) then velocity_k= 0d0 return endif @@ -1482,7 +1482,7 @@ subroutine velocity_calc_iband(iband, k, velocity_k) ! call eigensystem_c( 'V', 'U', Num_wann, Hamk_bulk, W) ! !> Only the energy levels close to the Fermi level contribute to the conductivity -! if (abs(W(iband))/eV2Hartree>EF_broadening) then +! if (abs(W(iband))/eV2Hartree>EF_integral_range) then ! velocity_k= 0d0 ! return ! endif @@ -1492,7 +1492,7 @@ subroutine velocity_calc_iband(iband, k, velocity_k) call zheevx_pack('V', 'U', Num_wann, iband, iband, Hamk_bulk, W, UU) !> Only the energy levels close to the Fermi level contribute to the conductivity - if (abs(W(1))/eV2Hartree>EF_broadening) then + if (abs(W(1))/eV2Hartree>EF_integral_range) then velocity_k= 0d0 return endif @@ -1831,7 +1831,7 @@ subroutine evolve_k_ohe NSlice_Btau_all_mpi = 0; NSlice_Btau_all=0 kout_all= 0d0; kout_all_mpi= 0d0 do ik= 1+cpuid, nk3_band, num_cpu - k_start = k3points(:, ik) + k_start = kpath_3d(:, ik) if (cpuid.eq.0) then write( stdout, *)'ib, ik', ib, ik endif @@ -1871,7 +1871,7 @@ subroutine evolve_k_ohe do ik= 1, nk3_band - k_start = k3points(:, ik) + k_start = kpath_3d(:, ik) call velocity_calc(Nband_Fermi_Level, bands_fermi_level, k_start, velocity_k, Ek) if (cpuid.eq.0) then endif @@ -2138,7 +2138,7 @@ subroutine sigma_k_ohe !vcrossB(2)= -v_t(3)*Bdirection(1)+ v_t(1)*Bdirection(3) !vcrossB(3)= -v_t(1)*Bdirection(2)+ v_t(2)*Bdirection(1) !if (abs(Enk(ik, ib))/eV2Hartree<0.05d0.and.dsqrt(sum((abs(vcrossB)**2)))>eps3) then - if (abs(Enk(ik, ib))/eV2Hartreeeps3) then - if (abs(Enk(ik, ib))/eV2Hartree infinite small value broadening + real(dp), intent(in) :: eta_broadening + complex(Dp),allocatable :: H01dag(:,:) !> surface hamiltonian @@ -252,7 +256,7 @@ subroutine surfgreen_1984(omega,GLL,GRR,H00,H01,ones) enddo enddo - energy=omega+zi*eta + energy=omega+zi*eta_broadening temp=energy*ones-H00 diff --git a/src/surfstat.f90 b/src/surfstat.f90 index 1f79177d..064c33fc 100644 --- a/src/surfstat.f90 +++ b/src/surfstat.f90 @@ -21,7 +21,7 @@ subroutine surfstat ! general loop index integer :: i, j, io, ikp, nw_half, spindoslfile, spindosrfile - real(dp) :: emin, emax, w, k(2), time_start, time_end, s0(3), s1(3) + real(dp) :: emin, emax, w, k(2), time_start, time_end, s0(3), s1(3), eta_broadening real(dp), allocatable :: omega(:) @@ -81,7 +81,7 @@ subroutine surfstat sx_r_mpi = 0d0; sy_r_mpi = 0d0; sz_r_mpi = 0d0 - eta=(omegamax- omegamin)/dble(omeganum)*3.0d0 + eta_broadening=(omegamax- omegamin)/dble(omeganum)*3.0d0 do i= 1, omeganum omega(i)=omegamin+(i-1)*(omegamax-omegamin)/dble(omeganum) @@ -143,8 +143,8 @@ subroutine surfstat ! there are two method to calculate surface green's function ! the method in 1985 is better, you can find the ref in the ! subroutine - call surfgreen_1985(w,GLL,GRR,GB,H00,H01,ones) - ! call surfgreen_1984(w,GLL,GRR,H00,H01,ones) + call surfgreen_1985(w,GLL,GRR,GB,H00,H01,ones, eta_broadening) + ! call surfgreen_1984(w,GLL,GRR,H00,H01,ones, eta_broadening) ! calculate spectral function do i= 1, NtopOrbitals @@ -306,7 +306,7 @@ subroutine surfstat close(spindoslfile) close(spindosrfile) write(stdout,*)'ndim',ndim - write(stdout,*) 'knv2,omeganum,eta',knv2, omeganum, eta/eV2Hartree + write(stdout,*) 'knv2,omeganum,eta_broadening',knv2, omeganum, eta_broadening/eV2Hartree write(stdout,*)'calculate density of state successfully' ENDIF @@ -637,7 +637,7 @@ SUBROUTINE surfstat_jdos ! general loop index INTEGER :: i, j, io, iq, iq1, ik1, ikp INTEGER :: Nk_half, imin1, imax1, nw_half - REAL(DP) :: ktmp(2), eta, s0(3), s1(3) + REAL(DP) :: ktmp(2), eta_broadening, s0(3), s1(3) ! string for integer CHARACTER(LEN=140) :: ichar, jchar, kchar, fmt @@ -700,12 +700,12 @@ SUBROUTINE surfstat_jdos sx_r_mpi = 0d0; sy_r_mpi = 0d0; sz_r_mpi = 0d0 ! Broaden coeffient - eta=(omegamax- omegamin)/DBLE(omeganum) + eta_broadening=(omegamax- omegamin)/DBLE(omeganum) ! omega list DO i = 1, omeganum - omega(i) = omegamin+(i-1)*eta + omega(i) = omegamin+(i-1)*eta_broadening ENDDO - eta = eta * 3.0d0 + eta_broadening = eta_broadening * 3.0d0 DO i=1,Ndim ones(i,i) = 1.0d0 @@ -740,8 +740,8 @@ SUBROUTINE surfstat_jdos ! there are two method to calculate surface green's function ! the method in 1985 is better, you can find the ref in the ! subroutine - CALL surfgreen_1985(omega(j),GLL,GRR,GB,H00,H01,ones) - ! call surfgreen_1984(w,GLL,GRR,H00,H01,ones) + CALL surfgreen_1985(omega(j),GLL,GRR,GB,H00,H01,ones, eta_broadening) + ! call surfgreen_1984(w,GLL,GRR,H00,H01,ones, eta_broadening) ! calculate spectral function DO i = 1, NtopOrbitals io = TopOrbitals(i) diff --git a/src/unfolding.f90 b/src/unfolding.f90 index c68c0c4f..c41293da 100644 --- a/src/unfolding.f90 +++ b/src/unfolding.f90 @@ -85,7 +85,7 @@ subroutine unfolding_kpath - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy if (Is_Sparse_Hr) then if (NumSelectedEigenVals==0) NumSelectedEigenVals=OmegaNum neval=NumSelectedEigenVals @@ -125,7 +125,7 @@ subroutine unfolding_kpath NumberofEta=9 allocate(eta_array(NumberofEta)) eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening allocate(omega(omeganum_unfold)) omega= 0d0 @@ -136,7 +136,7 @@ subroutine unfolding_kpath !> first unfold the kpoints from the kpath of the supercell do ik= 1+cpuid, nk3_band, num_cpu if (cpuid==0) write(stdout, '(a, i10," /", i10)') 'BulkBand unfolding at :', ik, nk3_band - k_PBZ_direct= k3points(:, ik) + k_PBZ_direct= kpath_3d(:, ik) call direct_cart_rec_unfold(k_PBZ_direct, k_cart) if (Landaulevel_unfold_line_calc) then call cart_direct_rec_magneticcell(k_cart, k_PBZ_direct_in_SBZ) @@ -157,7 +157,7 @@ subroutine unfolding_kpath if (nvecs<50) nvecs= 50 if (nvecs>Ndimq) nvecs= Ndimq - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy if (allocated(zeigv)) deallocate(zeigv) if (allocated(psi)) deallocate(psi) @@ -323,7 +323,7 @@ end subroutine unfolding_kpath subroutine unfolding_kplane !> Unfold the energy bands of the supercell to a specified unit cell. - !> Calculate unfolded band at (k1, k2) at a given energy E_arc. + !> Calculate unfolded band at (k1, k2) at a given energy iso_energy. !> Implemented by QSWU 2019 use para use sparse @@ -411,9 +411,9 @@ subroutine unfolding_kplane enddo enddo - k_cart_abs = sqrt(E_arc+ photon_energy_arpes) + k_cart_abs = sqrt(iso_energy+ photon_energy_arpes) - sigma=(1d0,0d0)*E_arc + sigma=(1d0,0d0)*iso_energy if (Is_Sparse_Hr) then if (NumSelectedEigenVals==0) then @@ -458,7 +458,7 @@ subroutine unfolding_kplane NumberofEta=9 allocate(eta_array(NumberofEta)) eta_array=(/0.1d0, 0.2d0, 0.4d0, 0.8d0, 1.0d0, 2d0, 4d0, 8d0, 10d0/) - eta_array= eta_array*Eta_Arc + eta_array= eta_array*Fermi_broadening !> first unfold the kpoints from the kpath of the supercell do ik= 1+cpuid, knv3, num_cpu @@ -527,7 +527,7 @@ subroutine unfolding_kplane do ig=1, NumberofSelectedOrbitals_groups do ieta= 1, NumberofEta spectrum_unfold(ieta, ig, ik1, ik2)= spectrum_unfold(ieta, ig, ik1, ik2) + & - weight(ig)*delta(eta_array(ieta), W(n)-E_arc) + weight(ig)*delta(eta_array(ieta), W(n)-iso_energy) enddo ! ieta enddo ! ig enddo ! sum over n diff --git a/src/wanniercenter.f90 b/src/wanniercenter.f90 index 2a1664e6..8da38c6d 100644 --- a/src/wanniercenter.f90 +++ b/src/wanniercenter.f90 @@ -616,7 +616,7 @@ end subroutine wannier_center3D_plane_mirror ! ! if (nvecs>Num_wann) nvecs= Num_wann ! -! shiftsigma=(1d0,0d0)*E_arc +! shiftsigma=(1d0,0d0)*iso_energy ! nnzmax=splen+Num_wann ! nnz=splen ! allocate( acoo(nnzmax)) @@ -2362,7 +2362,7 @@ subroutine wannier_center3D_plane0 write(outfileindex, '(10000A16)')'k', 'largestgap', 'sum(wcc(:,ik))', & 'wcc(:, ik)' do ik2=1, Nk2 - write(outfileindex, '(10000f16.8)') dble(ik2-1)/dble(Nk2-1)/2d0, & + write(outfileindex, '(10000f16.8)') dble(ik2-1)/dble(Nk2-1), & largestgap(ik2), dmod(sum(wcc(:, ik2)), 1d0), & wcc(:, ik2) enddo @@ -2375,23 +2375,24 @@ subroutine wannier_center3D_plane0 outfileindex= outfileindex+ 1 if (cpuid==0) then open(unit=outfileindex, file='wcc.gnu') + write(outfileindex, '(a)')"# gnuplot version > 5.4" write(outfileindex, '(a)')"set encoding iso_8859_1" - write(outfileindex, '(a)')'set terminal postscript enhanced color font ",30"' - write(outfileindex, '(a)')"set output 'wcc.eps'" + write(outfileindex, '(a)')'set terminal pdf enhanced color font ",24" size 5, 4' + write(outfileindex, '(a)')"set output 'wcc.pdf'" write(outfileindex, '(a)')'unset key ' write(outfileindex, '(a)')'set border lw 3 ' write(outfileindex, '(a)')'set xtics offset 0, 0.2' write(outfileindex, '(a)')'set xtics format "%4.1f" nomirror out ' - write(outfileindex, '(a)')'set xlabel "k" ' + write(outfileindex, '(a)')'set xlabel "k in unit of line 3 of KPLANE_BULK" font ",16"' write(outfileindex, '(a)')'set xlabel offset 0, 0.7 ' write(outfileindex, '(a)')'set ytics 0.5 ' write(outfileindex, '(a)')'set ytics format "%4.1f" nomirror out' write(outfileindex, '(a)')'set ylabel "WCC"' write(outfileindex, '(a)')'set ylabel offset 2, 0.0 ' - write(outfileindex, '(a)')'set xrange [0: 0.5]' + write(outfileindex, '(a)')'set xrange [0: 1.0]' write(outfileindex, '(a)')'set yrange [0:1]' - write(outfileindex, '(a)')"plot 'wcc.dat' u 1:2 w l lw 2 lc 'blue', \" - write(outfileindex, '(a, i5, a)')" for [i=4: ", NumberofSelectedOccupiedBands+3, "] 'wcc.dat' u 1:i w p pt 7 ps 1.1 lc 'red'" + write(outfileindex, '(a, i5, a)')"plot for [i=4: ", NumberofSelectedOccupiedBands+3, & + "] 'wcc.dat' u 1:i w p pt 7 ps 0.5 lc 'black'" close(outfileindex) endif @@ -3099,7 +3100,7 @@ subroutine wannier_center3D_nodalline if (cpuid==0) write(stdout, '(a, a8, 5a10,a15)')'#', 'k1', 'k2', 'k3', 'kx', 'ky', 'kz', 'Chirality' if (cpuid==0) then do i=1, Num_NLs - write(stdout, '(6f10.5,i8)')NL_center_position_direct(:, i), NL_center_position_cart(:,i),chirality_all(i) + write(stdout, '(6f10.5,i8)')NL_center_position_direct(:, i), NL_center_position_cart(:,i)*Angstrom2atomic,chirality_all(i) enddo endif @@ -3216,7 +3217,7 @@ subroutine wannier_center3D_weyl if (cpuid==0) write(stdout, '(a, a8, 5a10,a15)')'#', 'k1', 'k2', 'k3', 'kx', 'ky','kz', 'Chirality' if (cpuid==0) then do i=1, Num_Weyls - write(stdout, '(6f10.5,i8)')weyl_position_direct(:, i), weyl_position_cart(:,i), chirality_all(i) + write(stdout, '(6f10.5,i8)')weyl_position_direct(:, i), weyl_position_cart(:,i)*Angstrom2atomic, chirality_all(i) enddo endif @@ -3544,7 +3545,7 @@ subroutine wannier_center3D_weyl_func_sphere(k0, r0, wcc, chirality) do ik1=1, NK1 k_direct= kpoints(:, ik1, ik2) call direct_cart_rec(k_direct, k_cart) - write(outfileindex, '(6f10.4)') k_cart, k_direct + write(outfileindex, '(6f10.4)') k_cart*Angstrom2atomic, k_direct enddo enddo close(outfileindex) @@ -3968,9 +3969,10 @@ subroutine Z2_3D if (cpuid==0) then open(unit=outfileindex, file='wanniercenter3D_Z2.gnu') - write(outfileindex,'(a)')' set encoding iso_8859_1 ' - write(outfileindex,'(a)')' set terminal postscript enhanced color font ",18"' - write(outfileindex,'(a)')' set output "wanniercenter3D_Z2.eps"' + write(outfileindex,'(a)')' #gnuplot version>5.4 ' + write(outfileindex,'(a)')' set encoding iso_8859_1' + write(outfileindex,'(a)')' set terminal pdf enhanced color font ",12" size 5,4' + write(outfileindex,'(a)')' set output "wanniercenter3D_Z2.pdf"' write(outfileindex,'(a)')' set size 0.6,1.0' write(outfileindex,'(a)')' set multiplot ' write(outfileindex,'(a)')' unset key ' @@ -3982,16 +3984,16 @@ subroutine Z2_3D write(outfileindex,'(3a)')' NOYTICS = "set format y '," '';", 'unset ylabel"' write(outfileindex,'(3a)')' YTICS = "set ytics format '," '%1.0f' ",& '1.0 nomirror in offset 0.7,0; set mytics 2;"' - write(outfileindex,'(a)')' TMARGIN = "set tmargin at screen 0.96; set bmargin at screen 0.71"' - write(outfileindex,'(a)')' MMARGIN = "set tmargin at screen 0.63; set bmargin at screen 0.38"' - write(outfileindex,'(a)')' BMARGIN = "set tmargin at screen 0.30; set bmargin at screen 0.05"' + write(outfileindex,'(a)')' TMARGIN = "set tmargin at screen 0.96; set bmargin at screen 0.72"' + write(outfileindex,'(a)')' MMARGIN = "set tmargin at screen 0.63; set bmargin at screen 0.39"' + write(outfileindex,'(a)')' BMARGIN = "set tmargin at screen 0.30; set bmargin at screen 0.06"' write(outfileindex,'(a)')' LMARGIN = "set lmargin at screen 0.20; set rmargin at screen 0.45"' write(outfileindex,'(a)')' RMARGIN = "set lmargin at screen 0.50; set rmargin at screen 0.75"' write(outfileindex,'(a)')' TITLE = "offset 0, -0.7"' write(outfileindex,'(3a)')' LCOLOR = "rgb '," '#696969'",'"' write(outfileindex,'(a)')' ' - write(outfileindex,'(3a)')' POS = "at graph -0.23,1.0 font', " ',18' ",'"' - write(outfileindex,'(3a)')' POS2 = "at graph -0.15,1.0 font'," ',18' ",'"' + write(outfileindex,'(3a)')' POS = "at graph -0.23,1.0 font', " ',12' ",'"' + write(outfileindex,'(3a)')' POS2 = "at graph -0.15,1.0 font'," ',12' ",'"' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' set xrange [0: 0.5]' write(outfileindex,'(a)')' set yrange [0:1]' @@ -4001,7 +4003,7 @@ subroutine Z2_3D write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' write(outfileindex,'(a)')' set ylabel "c" rotate by 0 offset 1.8,0' write(outfileindex,'(a)')' set label 1 "(a)" @POS front ' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:2 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:2 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @TMARGIN; @RMARGIN' write(outfileindex,'(a)')' @NOYTICS; @XTICS ' @@ -4009,7 +4011,7 @@ subroutine Z2_3D write(outfileindex,'(a)')' set label 1 "(b)" @POS2 front' write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' write(outfileindex,'(a)')' unset ylabel' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:3 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:3 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @MMARGIN; @LMARGIN' write(outfileindex,'(a)')' @YTICS; @XTICS ' @@ -4017,14 +4019,14 @@ subroutine Z2_3D write(outfileindex,'(a)')' set label 1 "(c)" @POS front' write(outfileindex,'(a)')' set xlabel "k_1" offset 0,1.6' write(outfileindex,'(a)')' set ylabel "c" rotate by 0 offset 1.8,0' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:4 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:4 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @MMARGIN; @RMARGIN' write(outfileindex,'(a)')' @NOYTICS; @XTICS ' write(outfileindex,'(a)')' set label 1 "(d)" @POS2 front' write(outfileindex,'(a)')' #set title "k_2=0.5" @TITLE' write(outfileindex,'(a)')' set xlabel "k_1" offset 0,1.6' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:5 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:5 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')'' write(outfileindex,'(a)')' @BMARGIN; @LMARGIN' write(outfileindex,'(a)')' @YTICS; @XTICS ' @@ -4032,7 +4034,7 @@ subroutine Z2_3D write(outfileindex,'(a)')' set label 1 "(e)" @POS front' write(outfileindex,'(a)')' set ylabel "a" rotate by 0 offset 1.8,0' write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:6 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:6 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @BMARGIN; @RMARGIN' @@ -4040,7 +4042,7 @@ subroutine Z2_3D write(outfileindex,'(a)')' #set title "k_3=0.5" @TITLE' write(outfileindex,'(a)')' set label 1 "(f)" @POS2 front' write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:7 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2.dat" u 1:7 w p pt 7 ps 0.2 lc @LCOLOR' close(outfileindex) endif diff --git a/src/wanniercenter_adaptive.f90 b/src/wanniercenter_adaptive.f90 index 801e5ae8..cf4d28b5 100644 --- a/src/wanniercenter_adaptive.f90 +++ b/src/wanniercenter_adaptive.f90 @@ -173,9 +173,10 @@ subroutine Z2_3D_adaptive if (cpuid==0) then open(unit=outfileindex, file='wanniercenter3D_Z2.gnu') - write(outfileindex,'(a)')' set encoding iso_8859_1 ' - write(outfileindex,'(a)')' set terminal postscript enhanced color font ",18"' - write(outfileindex,'(a)')' set output "wanniercenter3D_Z2.eps"' + write(outfileindex,'(a)')' #gnuplot version>5.4 ' + write(outfileindex,'(a)')' set encoding iso_8859_1' + write(outfileindex,'(a)')' set terminal pdf enhanced color font ",12" size 5,4' + write(outfileindex,'(a)')' set output "wanniercenter3D_Z2.pdf"' write(outfileindex,'(a)')' set size 0.6,1.0' write(outfileindex,'(a)')' set multiplot ' write(outfileindex,'(a)')' unset key ' @@ -187,16 +188,16 @@ subroutine Z2_3D_adaptive write(outfileindex,'(3a)')' NOYTICS = "set format y '," '';", 'unset ylabel"' write(outfileindex,'(3a)')' YTICS = "set ytics format '," '%1.0f' ",& '1.0 nomirror in offset 0.7,0; set mytics 2;"' - write(outfileindex,'(a)')' TMARGIN = "set tmargin at screen 0.96; set bmargin at screen 0.71"' - write(outfileindex,'(a)')' MMARGIN = "set tmargin at screen 0.63; set bmargin at screen 0.38"' - write(outfileindex,'(a)')' BMARGIN = "set tmargin at screen 0.30; set bmargin at screen 0.05"' + write(outfileindex,'(a)')' TMARGIN = "set tmargin at screen 0.96; set bmargin at screen 0.72"' + write(outfileindex,'(a)')' MMARGIN = "set tmargin at screen 0.63; set bmargin at screen 0.39"' + write(outfileindex,'(a)')' BMARGIN = "set tmargin at screen 0.30; set bmargin at screen 0.06"' write(outfileindex,'(a)')' LMARGIN = "set lmargin at screen 0.20; set rmargin at screen 0.45"' write(outfileindex,'(a)')' RMARGIN = "set lmargin at screen 0.50; set rmargin at screen 0.75"' write(outfileindex,'(a)')' TITLE = "offset 0, -0.7"' write(outfileindex,'(3a)')' LCOLOR = "rgb '," '#696969'",'"' write(outfileindex,'(a)')' ' - write(outfileindex,'(3a)')' POS = "at graph -0.23,1.0 font', " ',18' ",'"' - write(outfileindex,'(3a)')' POS2 = "at graph -0.15,1.0 font'," ',18' ",'"' + write(outfileindex,'(3a)')' POS = "at graph -0.23,1.0 font', " ',12' ",'"' + write(outfileindex,'(3a)')' POS2 = "at graph -0.15,1.0 font'," ',12' ",'"' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' set xrange [0: 0.5]' write(outfileindex,'(a)')' set yrange [0:1]' @@ -206,7 +207,7 @@ subroutine Z2_3D_adaptive write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' write(outfileindex,'(a)')' set ylabel "c" rotate by 0 offset 1.8,0' write(outfileindex,'(a)')' set label 1 "(a)" @POS front ' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_1.dat" u 1:2 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_1.dat" u ($1/2):2 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @TMARGIN; @RMARGIN' write(outfileindex,'(a)')' @NOYTICS; @XTICS ' @@ -214,7 +215,7 @@ subroutine Z2_3D_adaptive write(outfileindex,'(a)')' set label 1 "(b)" @POS2 front' write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' write(outfileindex,'(a)')' unset ylabel' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_2.dat" u 1:2 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_2.dat" u ($1/2):2 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @MMARGIN; @LMARGIN' write(outfileindex,'(a)')' @YTICS; @XTICS ' @@ -222,14 +223,14 @@ subroutine Z2_3D_adaptive write(outfileindex,'(a)')' set label 1 "(c)" @POS front' write(outfileindex,'(a)')' set xlabel "k_1" offset 0,1.6' write(outfileindex,'(a)')' set ylabel "c" rotate by 0 offset 1.8,0' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_3.dat" u 1:2 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_3.dat" u ($1/2):2 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @MMARGIN; @RMARGIN' write(outfileindex,'(a)')' @NOYTICS; @XTICS ' write(outfileindex,'(a)')' set label 1 "(d)" @POS2 front' write(outfileindex,'(a)')' #set title "k_2=0.5" @TITLE' write(outfileindex,'(a)')' set xlabel "k_1" offset 0,1.6' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_4.dat" u 1:2 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_4.dat" u ($1/2):2 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')'' write(outfileindex,'(a)')' @BMARGIN; @LMARGIN' write(outfileindex,'(a)')' @YTICS; @XTICS ' @@ -237,7 +238,7 @@ subroutine Z2_3D_adaptive write(outfileindex,'(a)')' set label 1 "(e)" @POS front' write(outfileindex,'(a)')' set ylabel "a" rotate by 0 offset 1.8,0' write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_5.dat" u 1:2 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_5.dat" u ($1/2):2 w p pt 7 ps 0.2 lc @LCOLOR' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' ' write(outfileindex,'(a)')' @BMARGIN; @RMARGIN' @@ -245,13 +246,14 @@ subroutine Z2_3D_adaptive write(outfileindex,'(a)')' #set title "k_3=0.5" @TITLE' write(outfileindex,'(a)')' set label 1 "(f)" @POS2 front' write(outfileindex,'(a)')' set xlabel "k_2" offset 0,1.6' - write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_6.dat" u 1:2 w p pt 7 ps 0.6 lc @LCOLOR' + write(outfileindex,'(a)')' plot "wanniercenter3D_Z2_6.dat" u ($1/2):2 w p pt 7 ps 0.2 lc @LCOLOR' close(outfileindex) endif if (cpuid==0) then + write(stdout, *)'# Notes: Please check the Wilson loop plots gnuplot wanniercenter3D_Z2.gnu ' write(stdout, *)'# z2 number for 6 planes' write(stdout, *)'k1=0.0, k2-k3 plane: ', Z2_all(1) write(stdout, *)'k1=0.5, k2-k3 plane: ', Z2_all(2) @@ -311,28 +313,29 @@ subroutine wannier_center3D_plane_adaptive endif if (cpuid==0) write(stdout, *)'Z2 for the plane you choose: ', Z2 - + !> generate gnu script for wannier charge center plots outfileindex= outfileindex+ 1 if (cpuid==0) then open(unit=outfileindex, file='wcc.gnu') + write(outfileindex, '(a)')"# gnuplot version > 5.4" write(outfileindex, '(a)')"set encoding iso_8859_1" - write(outfileindex, '(a)')'set terminal postscript enhanced color font ",30"' - write(outfileindex, '(a)')"set output 'wcc.eps'" + write(outfileindex, '(a)')'set terminal pdf enhanced color font ",24" size 5, 4' + write(outfileindex, '(a)')"set output 'wcc.pdf'" write(outfileindex, '(a)')'unset key ' write(outfileindex, '(a)')'set border lw 3 ' write(outfileindex, '(a)')'set xtics offset 0, 0.2' write(outfileindex, '(a)')'set xtics format "%4.1f" nomirror out ' - write(outfileindex, '(a)')'set xlabel "k" ' + write(outfileindex, '(a)')'set xlabel "k in unit of line 3 of KPLANE BULK" font ",18"' write(outfileindex, '(a)')'set xlabel offset 0, 0.7 ' write(outfileindex, '(a)')'set ytics 0.5 ' write(outfileindex, '(a)')'set ytics format "%4.1f" nomirror out' write(outfileindex, '(a)')'set ylabel "WCC"' write(outfileindex, '(a)')'set ylabel offset 2, 0.0 ' - write(outfileindex, '(a)')'set xrange [0: 0.5]' + write(outfileindex, '(a)')'set xrange [0: 1.0]' write(outfileindex, '(a)')'set yrange [0:1]' - write(outfileindex, '(a)')"plot 'wcc.dat' u 1:2 w l lw 2 lc 'blue', \" - write(outfileindex, '(a, i5, a)')" for [i=4: ", NumberofSelectedOccupiedBands+3, "] 'wcc.dat' u 1:i w p pt 7 ps 1.1 lc 'red'" + write(outfileindex, '(a, i5, a)')"plot for [i=4: ", NumberofSelectedOccupiedBands+3, & + "] 'wcc.dat' u 1:i w p pt 7 ps 0.5 lc 'black'" close(outfileindex) endif @@ -423,7 +426,7 @@ subroutine wannier_center3D_plane_adaptive_func(kstart, kvec1, kvec2, & !> initial k points do ik2=1, Nk2 kpoints(:, ik2)= kstart+ kvec2*(ik2-1d0)/dble(Nk2-1) - kpath_wcc(ik2)= (ik2-1d0)/(Nk2-1)/2d0 + kpath_wcc(ik2)= (ik2-1d0)/(Nk2-1) enddo !> fill data for kline_wcc @@ -740,16 +743,30 @@ subroutine Wcc_integrate_func(k2, kvec1, wcc, & VT= 0d0 if (Is_Sparse) then - neval=OmegaNum - if (neval>Num_wann-2) neval= Num_wann- 2 + + if (OmegaNum==0) OmegaNum= Num_wann + if (NumSelectedEigenVals==0) NumSelectedEigenVals=OmegaNum + + neval= NumSelectedEigenVals + + if (neval>Num_wann-2) then + neval= Num_wann- 2 + nvecs= Num_wann + endif + + !> ncv= NumLCZVecs if specfied in wt.in + if (NumLCZVecs.ne.0) then + nvecs= NumLCZVecs + else + nvecs=int(2*neval) + if (nvecs<50) nvecs= int(6*neval) + endif - !> ncv - nvecs=int(2*neval) - if (nvecs<50) nvecs= int(6*neval) + if (neval+2>=nvecs) neval= nvecs-2 if (nvecs>Num_wann) nvecs= Num_wann - shiftsigma=(1d0,0d0)*E_arc + shiftsigma=(1d0,0d0)*iso_energy nnzmax=splen+Num_wann nnz=splen allocate( acoo(nnzmax))