Skip to content

Commit 6cec494

Browse files
committed
update optical cond
1 parent 935ec75 commit 6cec494

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed

dptb/postprocess/optical/optical_cond.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import math
99
from dptb.utils.make_kpoints import kmesh_sampling_negf
1010
import time
11+
import logging
1112

13+
log = logging.getLogger(__name__)
1214

1315
def fermi_dirac(e, mu, beta):
1416
return 1/(1+torch.exp(beta*(e-mu)))
@@ -32,7 +34,7 @@ def cal_cond(model, data, e_fermi, mesh_grid, emax, num_val=None, gap_corr=0, nu
3234
data = model.idp(data)
3335
data = model(data)
3436

35-
print('application of the model is done')
37+
log.info('application of the model is done')
3638

3739
KB = 8.617333262e-5
3840
beta = 1/(KB*T)
@@ -48,7 +50,7 @@ def cal_cond(model, data, e_fermi, mesh_grid, emax, num_val=None, gap_corr=0, nu
4850
num_loop = math.ceil(tot_numk / nk_per_loop)
4951
omegas = torch.linspace(0,emax,num_omega, dtype=torch.float64)
5052

51-
print('tot_numk:',tot_numk, 'nk_per_loop:',nk_per_loop, 'num_loop:',num_loop)
53+
log.info('tot_numk:',tot_numk, 'nk_per_loop:',nk_per_loop, 'num_loop:',num_loop)
5254

5355
ac_cond = np.zeros((len(omegas)),dtype=np.complex128)
5456
ac_cond_ik = np.zeros((len(omegas)),dtype=np.complex128)
@@ -58,8 +60,8 @@ def cal_cond(model, data, e_fermi, mesh_grid, emax, num_val=None, gap_corr=0, nu
5860

5961
for ik in range(num_loop):
6062
t_start = time.time()
61-
print('<><><><><'*5)
62-
print(f'loop {ik+1} in {num_loop} circles')
63+
log.info('<><><><><'*5)
64+
log.info(f'loop {ik+1} in {num_loop} circles')
6365
istart = ik * nk_per_loop
6466
iend = min((ik + 1) * nk_per_loop, tot_numk)
6567
kpoints_ = kpoints[istart:iend]
@@ -72,18 +74,19 @@ def cal_cond(model, data, e_fermi, mesh_grid, emax, num_val=None, gap_corr=0, nu
7274
# Hamiltonian = data['hamiltonian'].detach().to(torch.complex128)
7375
# dhdk = {k: v.detach().to(torch.complex128) for k, v in dhdk.items()}
7476

75-
print(f' - get H and dHdk ...')
77+
log.info(f' - get H and dHdk ...')
7678

7779
eigs, eigv = torch.linalg.eigh(data['hamiltonian'])
7880

79-
if num_val is not None:
81+
if num_val is not None and abs(gap_corr) > 1e-3:
82+
log.info(f' - gap correction is applied with {gap_corr}')
8083
assert num_val > 0
8184
assert eigs[:,num_val].min() - eigs[:,num_val-1].max() > 1e-3 , f'the gap between the VBM {num_val-1} and the CBM {num_val} is too small'
82-
if abs(gap_corr)> 1e-3:
83-
print(f' - gap correction is applied {gap_corr}')
84-
eigs[:,:num_val] = eigs[:,:num_val] - gap_corr/2
85-
eigs[:,num_val:] = eigs[:,num_val:] + gap_corr/2
86-
print(f' - diagonalization of H ...')
85+
86+
eigs[:,:num_val] = eigs[:,:num_val] - gap_corr/2
87+
eigs[:,num_val:] = eigs[:,num_val:] + gap_corr/2
88+
89+
log.info(f' - diagonalization of H ...')
8790

8891
dh1 = eigv.conj().transpose(1,2) @ dhdk[direction[0]] @ eigv
8992
if direction[0] == direction[1]:
@@ -94,7 +97,7 @@ def cal_cond(model, data, e_fermi, mesh_grid, emax, num_val=None, gap_corr=0, nu
9497
p1p2 = dh1 * dh2.transpose(1,2)
9598

9699

97-
print(f' - get p matrix from dHdk ...')
100+
log.info(f' - get p matrix from dHdk ...')
98101

99102
p1p2.to(torch.complex128)
100103
eigs.to(torch.float64)
@@ -119,14 +122,14 @@ def cal_cond(model, data, e_fermi, mesh_grid, emax, num_val=None, gap_corr=0, nu
119122
ac_cond = ac_cond + ac_cond_ik
120123
ac_cond_linhard = ac_cond_linhard + ac_cond_linhard_ik
121124

122-
print(f' - get ac_cond ...')
125+
log.info(f' - get ac_cond ...')
123126
t_end = time.time()
124-
print(f'time cost: {t_end-t_start:.4f} s in loop {ik+1}')
127+
log.info(f'time cost: {t_end-t_start:.4f} s in loop {ik+1}')
125128

126-
volume = data['cell'][0] @(data['cell'][1].cross(data['cell'][2]))
127-
prefactor = g_s * 1j / (volume.numpy())
129+
ac_cond = 1.0j * ac_cond * np.pi
130+
volume = data['cell'][0] @ (data['cell'][1].cross(data['cell'][2],dim=0))
131+
prefactor = 2 * g_s * 1j / (volume.numpy())
128132
ac_cond = ac_cond * prefactor
129-
ac_cond.imag = -ac_cond.imag*np.pi
130133
ac_cond_linhard = ac_cond_linhard * prefactor
131134

132135
return omegas, ac_cond, ac_cond_linhard

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,6 @@ CMAKE_Fortran_COMPILER = "ifx"
7878
#CMAKE_Fortran_FLAGS = "-fpp -xHost -qopenmp -ipo -heap-arrays 32"
7979
CMAKE_C_FLAGS = "-O3 -xHost -ipo -fma -align"
8080
CMAKE_Fortran_FLAGS = "-fpp -O3 -xHost -qopenmp -ipo -heap-arrays 32 -unroll -fma -align"
81+
82+
# command to build the fortran code
83+
# BUILD_FORTRAN=ON USE_INTEL=ON USE_OPENMP=ON pip install .

0 commit comments

Comments
 (0)