Skip to content

[wien2k] pure-Python case.ctqmcout correlated-shell projectors#9

Open
krystophny wants to merge 4 commits into
TRIQS:unstablefrom
krystophny:port/dmftproj-ctqmcout-python
Open

[wien2k] pure-Python case.ctqmcout correlated-shell projectors#9
krystophny wants to merge 4 commits into
TRIQS:unstablefrom
krystophny:port/dmftproj-ctqmcout-python

Conversation

@krystophny

Copy link
Copy Markdown

Part of #7 (dmftproj Fortran-to-Python port). Stacks on #8.

Pure-Python case.ctqmcout: the correlated-shell projector core of dmftproj.
Reads the case.almblm{up,dn} Alm/Clm coefficients, builds the raw projector
over the in-window bands, applies the local rotation and cubic basis transform,
Loewdin-orthonormalizes the stacked shells (orthogonal_wannier_SO), and writes
case.ctqmcout. cubic/complex bases; fromfile raises NotImplementedError
pending a fixture.

Verification

Regenerates CaOs2.ctqmcout and compares to the committed dmftproj reference
(integer fields identical, floats at 1e-6, the single-precision basis-transform
floor):

wien2k_ctqmcout_python: ok      # max float diff 4.3e-7

The CaOs2 almblm fixtures move to gzip (234 kB each), shared with the oubwin
test; numpy only.

…CaOs2)

dftkit's Wien2k converter is only covered by the non-SOC SrVO3 case. This adds a
SOC + spin-polarized golden test: CaOs2, a cubic fluorite cell with two
symmetry-equivalent correlated Os atoms whose magnetic point group has 16
operations, 8 of them time-reversal. It exercises the combined-spin 'ud' block
and the time-reversal symmetry path of dmftproj + the converter on a small
8-k-point fixture, validated by h5diff against a reference produced by this
converter.
triqs_dftkit.wien2k.symqmc.write_symqmc builds the correlated-shell spinor
symmetry matrices (case.symqmc) from case.dmftsym + case.indmftpr + case.struct,
reproducing the dmftproj Fortran construction (Wigner D, orbital and spinor
time-reversal operators, angular-harmonics basis transform, spin-1/2 phase
blocks). It is a full replacement of the symqmc-writing, covering every path:

- non-mixing spin-diagonal bases (complex, cubic): the up/up block scaled by
  the +-(a+g)/2 phase, with the orbital time-reversal operator on the magnetic
  operations;
- mixing fromfile bases that couple spin (the |j,m_j> basis): the full 2(2l+1)
  spinor representation P spinrot P^dag with the spinor time-reversal
  -i sigma_y (x) T on the magnetic operations;
- l=0 (s) shells: the 2x2 spin phase block.

Verified against the dmftproj Fortran output for all three paths on CaOs2 (16
operations, 8 time-reversal): the cubic converter HDF5 is identical (h5diff) and
every matrix matches to machine precision. The mixing fromfile path is the one
dft_tools #148 singles out; dmftproj reads that basis with a single-precision
CMPLX cast and a 250-column line cap (set_ang_trans.f), so its case.symqmc
carries a ~1e-7 error there while this generator is full double precision.

Tests: the cubic path reuses the SOC golden h5; the mixing and l=0 paths compare
to the dmftproj matrix data (single precision, ~26 kB) and assert unitarity.
Port the dmftproj almblm reader and case.oubwin writer to numpy. Given
case.almblm{up,dn} and the energy window in case.indmftpr, select the
contiguous band range per k-point and spin and write case.oubwin{up,dn}
in the dmftproj format. Proven byte-identical to the Fortran output on
CaOs2 (proj_mode 0; band-index modes raise NotImplementedError pending a
fixture). Part of TRIQS#7.
Port the dmftproj projector core to numpy: read the almblm Alm/Clm
coefficients, build the raw correlated projector over the in-window bands,
apply the local rotation and cubic basis transform, Loewdin-orthonormalize
the stacked shells (orthogonal_wannier_SO), and write case.ctqmcout. Matches
the dmftproj CaOs2 reference to 4.3e-7 (the single-precision basis-transform
floor); integer fields identical. cubic/complex bases; fromfile raises
NotImplementedError pending a fixture. almblm fixtures switched to gzip
(shared with the oubwin test). Part of TRIQS#7.
@krystophny

Copy link
Copy Markdown
Author

Accuracy: reproduces the released dmftproj case.ctqmcout to 4.3e-7. The overlap is rank-deficient (more correlated spin-orbitals than bands), so O^{-1/2} amplifies the last-ULP gfortran-vs-numpy libm difference by ~1e8; even with the precision fix #14 + scipy ZHEEV #12 it floors at ~6.6e-7. dmftproj is byte-identical across BLAS, but no cross-language port matches it below this floor without changing the (preserved) algorithm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant