|
23 | 23 |
|
24 | 24 | ########################################################################## |
25 | 25 | import sys |
| 26 | +try: # try wannierberri import - needs to be placed before importing numpy |
| 27 | + import wannierberri as wb |
| 28 | +except ImportError: |
| 29 | + pass |
26 | 30 | import numpy |
27 | 31 | from warnings import warn |
28 | 32 | from triqs.gf import * |
@@ -253,23 +257,18 @@ def recompute_w90_input_on_different_mesh(sum_k, seedname, nk_optics, pathname=' |
253 | 257 | inverse_mass = None |
254 | 258 |
|
255 | 259 | if mpi.is_master_node(): |
256 | | - # try wannierberri import |
257 | | - try: |
258 | | - import wannierberri as wb |
259 | | - except ImportError: |
| 260 | + |
| 261 | + if 'wannierberri' not in sys.modules: |
260 | 262 | print('ImportError: WannierBerri needs to be installed to run optics calculations with Wannier90') |
261 | 263 | try: |
262 | 264 | mpi.MPI.COMM_WORLD.Abort(1) |
263 | 265 | except: |
264 | 266 | sys.exit() |
265 | 267 | # initialize WannierBerri system |
266 | 268 | shift_gamma = numpy.array([0.0, 0.0, 0.0]) |
267 | | - # wberri = wb.System_w90(pathname + seedname, berry=True, fft='numpy') |
268 | | - # WannierBerri uses python multiprocessing which might conflict with mpi. |
269 | | - # if there's a segfault, uncomment the following line |
270 | | - wberri = wb.System_w90(pathname + seedname, berry=True, fftlib='numpy', npar=16) |
| 269 | + wberri = wb.System_w90(pathname + seedname, berry=True) |
271 | 270 | grid = wb.Grid(wberri, NKdiv=1, NKFFT=[nk_x, nk_y, nk_z]) |
272 | | - dataK = wb.data_K.Data_K_R(wberri, dK=shift_gamma, grid=grid, fftlib='numpy') |
| 271 | + dataK = wb.data_K.Data_K_R(wberri, dK=shift_gamma, grid=grid) |
273 | 272 |
|
274 | 273 | assert dataK.HH_K.shape == hopping[:, 0, :, :].shape, 'wberri / wannier Hamiltonian has different number of orbitals than SumK object. Disentanglement is not supported as of now.' |
275 | 274 |
|
@@ -327,11 +326,12 @@ def _commutator(A, B): |
327 | 326 | # in the orbital basis |
328 | 327 | # vw_alpha = Hw_alpha + i [Hw, Aw_alpha] |
329 | 328 | elif oc_basis == 'w': |
330 | | - # first term, taken from |
331 | | - # github.com/wannier-berri/wannier-berri/blob/2d3982331c02775f5ee033c664849d5f2d41d0c1/wannierberri/data_K.py#L687 |
332 | | - Hw_alpha = wb.data_K.Data_K_R._R_to_k_H(dataK, dataK.Ham_R, der=1, hermitian=True) |
| 329 | + # first term |
| 330 | + Hw_R = dataK.get_R_mat('Ham').copy() |
| 331 | + Hw_alpha = dataK.rvec.R_to_k(Hw_R, hermitian=True, der=1)[dataK.select_K] |
333 | 332 | # second term |
334 | | - Aw_alpha = dataK.fft_R_to_k(dataK.get_R_mat('AA'), hermitian=True) |
| 333 | + Aw_R = dataK.get_R_mat('AA').copy() |
| 334 | + Aw_alpha = dataK.rvec.R_to_k(Aw_R, hermitian=True)[dataK.select_K] |
335 | 335 | c_Hw_Aw_alpha = _commutator(hopping[:, 0, :, :], Aw_alpha) |
336 | 336 | velocities_k = (Hw_alpha + 1j * c_Hw_Aw_alpha) / HARTREETOEV / BOHRTOANG |
337 | 337 |
|
|
0 commit comments