Previously, if some low-energy bands were outside the outer window, u_dis.mat were shifted to start with nonzero entry. Now, they are not shifted and keep the original band index.
For example, if there are 5 bands and only band 2, 3, 4 are inside the outer window and 1 and 5 are outside the window, the u_dis.mat file stores
- v3.1.0 :
[A, B, C, 0, 0]
- develop:
[0, A, B, C, 0]
The relevant code is (note the commented line)
|
open (newunit=matunit, file=trim(seedname)//'_u_dis.mat', form='formatted') |
|
write (matunit, *) header |
|
write (matunit, *) num_kpts, num_wann, num_bands |
|
do nkp = 1, num_kpts |
|
utmp = 0.d0 |
|
ioff = dis_manifold%nfirstwin(nkp) |
|
nbw = dis_manifold%ndimwin(nkp) |
|
utmp(ioff:ioff + nbw - 1, :) = u_matrix_opt(1:nbw, :, nkp) |
|
write (matunit, *) |
|
write (matunit, '(f15.10,sp,f15.10,sp,f15.10)') kpt_latt(:, nkp) |
|
!write (matunit, '(f15.10,sp,f15.10)') ((u_matrix_opt(i, j, nkp), i=1, num_bands), j=1, num_wann) |
|
write (matunit, '(f15.10,sp,f15.10)') ((utmp(i, j), i=1, num_bands), j=1, num_wann) |
|
end do |
|
close (matunit) |
|
deallocate (utmp) |
|
endif |
See http://github.com/TRIQS/dftkit/issues/1 for details and for an example where this causes a problem in a Wannier90 interface code.
I like the new ordering much better, but since it is a breaking change, I think one should revert to the old behavior.
Instead, I suggest that we create a new output, seedname_v.mat, which writes V = U_dis * U, with the new index ordering. Then we can suggest the interface packages to migrate to v.mat, while keeping the old interface u_dis.mat + u.mat for some time until we deprecate and remove it.
In addition, if the variational disentanglement is implemented in the future, it directly computes V instead of U_dis and U, so writing V is more natural.
Previously, if some low-energy bands were outside the outer window, u_dis.mat were shifted to start with nonzero entry. Now, they are not shifted and keep the original band index.
For example, if there are 5 bands and only band 2, 3, 4 are inside the outer window and 1 and 5 are outside the window, the
u_dis.matfile stores[A, B, C, 0, 0][0, A, B, C, 0]The relevant code is (note the commented line)
wannier90/src/plot.F90
Lines 2445 to 2460 in 0137a03
See http://github.com/TRIQS/dftkit/issues/1 for details and for an example where this causes a problem in a Wannier90 interface code.
I like the new ordering much better, but since it is a breaking change, I think one should revert to the old behavior.
Instead, I suggest that we create a new output,
seedname_v.mat, which writesV = U_dis * U, with the new index ordering. Then we can suggest the interface packages to migrate tov.mat, while keeping the old interfaceu_dis.mat+u.matfor some time until we deprecate and remove it.In addition, if the variational disentanglement is implemented in the future, it directly computes
Vinstead ofU_disandU, so writing V is more natural.