diff --git a/python/triqs_dftkit/wien2k/_dmftproj.py b/python/triqs_dftkit/wien2k/_dmftproj.py
new file mode 100644
index 0000000..1698c29
--- /dev/null
+++ b/python/triqs_dftkit/wien2k/_dmftproj.py
@@ -0,0 +1,528 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola, C. Martins
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+"""Shared dmftproj machinery for the pure-Python case.* generators.
+
+The five generators (symqmc, oubwin, ctqmcout, sympar, parproj) reproduce
+different outputs of the dmftproj Fortran executable but draw on the same
+underlying pieces: the list-directed almblm reader, the Fortran real/complex
+token parsers, the Wigner-D rotation in the dmftproj convention, the angular
+basis transforms (transmat), the case.indmftpr / case.dmftsym parsers, the
+proj_mode==0 band-window selection and the gfortran-style real formatters.
+This module owns each of those exactly once.
+
+All generators use the exact double-precision cubic harmonics. dmftproj reads
+the same coefficients from full-precision SRC_templates (the precision-fix PR),
+so the port reproduces its output to machine precision. `reptrans` keeps a
+`cast` flag only to reproduce the legacy single-precision template on demand.
+"""
+
+import math
+import os
+import numpy as np
+
+
+# --- list-directed token stream over a Fortran free-form text file -----------
+
+class Reader:
+ """Record-oriented reader mirroring Fortran list-directed and READ('()')
+ semantics on a free-form almblm file.
+
+ `record()` returns the whitespace tokens of the next physical line (the
+ common case: every almblm logical record fits on one line). `skip()`
+ consumes one physical line unconditionally, matching READ('()')."""
+
+ def __init__(self, path):
+ with open(path) as fh:
+ self._lines = fh.read().splitlines()
+ self._i = 0
+
+ def skip(self):
+ self._i += 1
+
+ def record(self):
+ toks = self._lines[self._i].split()
+ self._i += 1
+ return toks
+
+
+def to_float(tok):
+ """Parse a Fortran real token, accepting D/d exponents (1.0D-3) and the
+ list-directed 4.57E-002 form. Python float already handles E/e and the
+ embedded sign in the exponent; only D/d needs translation."""
+ return float(tok.replace('D', 'E').replace('d', 'e'))
+
+
+def to_complex(s):
+ s = s.strip().lstrip('(').rstrip(')')
+ re_s, im_s = s.split(',')
+ return complex(to_float(re_s), to_float(im_s))
+
+
+def read_complex(r):
+ """Read one list-directed complex `(re,im)` value, possibly split over
+ whitespace tokens."""
+ buf = list(r.record())
+ while ')' not in ''.join(buf):
+ buf += r.record()
+ return to_complex(''.join(buf))
+
+
+def read_two_complex(r):
+ """Read a record holding two list-directed complex values (Alm, Blm)."""
+ buf = list(r.record())
+ while ''.join(buf).count(')') < 2:
+ buf += r.record()
+ s = ''.join(buf)
+ cut = s.index(')') + 1
+ return to_complex(s[:cut]), to_complex(s[cut:])
+
+
+# --- angular bases: transmat = , m = -l..l --------------------------
+# Standard cubic harmonics, Wien2k convention, exact double precision. dmftproj
+# reads the same coefficients from full-precision SRC_templates (the precision-
+# fix PR); `reptrans(..., cast=True)` reproduces the legacy float32 template.
+
+_COMPLEX = {l: np.eye(2 * l + 1, dtype=complex) for l in range(4)}
+
+_CUBIC = {
+ 1: np.array([[0, 1, 0], [-1j, 0, -1j], [1, 0, -1]], dtype=complex),
+ 2: np.array([
+ [0, 0, 1, 0, 0],
+ [2 ** -0.5, 0, 0, 0, 2 ** -0.5],
+ [-(2 ** -0.5), 0, 0, 0, 2 ** -0.5],
+ [0, 2 ** -0.5, 0, -(2 ** -0.5), 0],
+ [0, 2 ** -0.5, 0, 2 ** -0.5, 0],
+ ], dtype=complex),
+}
+
+
+def reptrans(basis, l, cast=False):
+ """transmat = , exact double-precision cubic harmonics. dmftproj
+ reads these from full-precision SRC_templates (the precision-fix PR), so the
+ port uses the exact analytic values. A complex basis is the exact identity.
+ `cast` is retained for callers that still want the legacy float32 truncation."""
+ if basis == 'cubic' and l in _CUBIC:
+ c = _CUBIC[l]
+ return c.astype(np.complex64).astype(np.complex128) if cast else c
+ return _COMPLEX[l]
+
+
+def read_fromfile(path, l):
+ """Parse a dmftproj fromfile basis (each line: the coefficients of a new
+ basis vector in {|m,up>, |m,dn>}, m = -l..l, real/imag interleaved; '*'
+ marks the end of an irep). Return (P, mixing) where P = is the
+ transform matrix (reptrans.transmat), full 2(2l+1) for a spin-mixing basis
+ or the (2l+1) up/up block otherwise."""
+ n = 2 * (2 * l + 1)
+ rows = []
+ for line in open(path):
+ line = line.rstrip('\n')
+ if not line.strip():
+ continue
+ body = line[1:]
+ vals = [float(x) for x in body.split()][:2 * n]
+ rows.append([vals[2 * k] + 1j * vals[2 * k + 1] for k in range(n)])
+ if len(rows) == n:
+ break
+ R = np.array(rows) # R[i, :] = |new_i> in old basis
+ d = 2 * l + 1
+ up_up, up_dn = R[:d, :d], R[:d, d:]
+ dn_up, dn_dn = R[d:, :d], R[d:, d:]
+ mixing = not (np.allclose(dn_dn, up_up) and
+ np.allclose(up_dn, 0) and np.allclose(dn_up, 0))
+ P = np.conj(R) if mixing else np.conj(up_up) # = conj()
+ return P, mixing
+
+
+# --- Wigner D matrix (dmftproj convention, setsym.f) -------------------------
+
+def small_d(l, m, n, b):
+ f1 = (math.factorial(l + m) * math.factorial(l - m)) / \
+ (math.factorial(l + n) * math.factorial(l - n))
+ s = 0.0
+ for t in range(0, 2 * l + 1):
+ if (l - m - t) >= 0 and (l - n - t) >= 0 and (t + n + m) >= 0:
+ f2 = (math.factorial(l + n) * math.factorial(l - n)) / \
+ (math.factorial(l - m - t) * math.factorial(m + n + t) *
+ math.factorial(l - n - t) * math.factorial(t))
+ f3 = 1.0 if (2 * l - m - n - 2 * t) == 0 \
+ else math.sin(b / 2) ** (2 * l - m - n - 2 * t)
+ f4 = 1.0 if (2 * t + n + m) == 0 \
+ else math.cos(b / 2) ** (2 * t + n + m)
+ s += (-1) ** (l - m - t) * f2 * f3 * f4
+ return math.sqrt(f1) * s
+
+
+def dmat(l, a, b, c, det):
+ D = np.zeros((2 * l + 1, 2 * l + 1), dtype=complex)
+ for m in range(-l, l + 1):
+ for n in range(-l, l + 1):
+ v = np.exp(1j * n * a) * np.exp(1j * m * c) * small_d(l, m, n, b)
+ if det < -0.5:
+ v *= (-1) ** l
+ D[m + l, n + l] = v
+ return D
+
+
+def tmat(l):
+ """Complex-conjugation operator in the spherical-harmonic basis,
+ T[m, -m] = (-1)^m (timeinv.f)."""
+ T = np.zeros((2 * l + 1, 2 * l + 1), dtype=complex)
+ for m in range(-l, l + 1):
+ T[-m + l, m + l] = (-1) ** m
+ return T
+
+
+def timeinv_orbital(l, mat):
+ return tmat(l) @ np.conj(mat)
+
+
+def mixing_timeinv_op(l, P):
+ """The spinor time-reversal operator -i sigma_y (x) T in the mixing basis:
+ tinv_{new} = P tinv_{lm} P^T (timeinv.f, ifmixing branch). Returned as the
+ bare operator; callers apply it as tinv @ conj(mat)."""
+ d = 2 * l + 1
+ tm = tmat(l)
+ tinv = np.zeros((2 * d, 2 * d), dtype=complex)
+ tinv[:d, d:] = -tm
+ tinv[d:, :d] = tm
+ return P @ tinv @ P.T
+
+
+def rotloc_rotl_so(l, ref, ops, iatom, iref):
+ """The composed 2(2l+1) Rloc rotation rotloc(iatom)%rotl(l) under SP+SO
+ (setsym.f:496-528 + set_rotloc.f): the representative spinor rotloc
+ spmt (x) D(rotloc_ref) composed with the first symmetry op R[isym] mapping
+ iref onto iatom, with the orbital time-reversal applied for the magnetic op.
+ Returns (rotl, timeinv); callers apply their own basis transform (the full
+ transmat for a mixing basis, blkdiag(transmat, transmat) otherwise)."""
+ d = 2 * l + 1
+ Dref = dmat(l, ref['a'], ref['b'], ref['g'], float(ref['iprop']))
+ f = (ref['a'] + ref['g']) / 2.0
+ spmt = np.zeros((2, 2), dtype=complex)
+ spmt[0, 0] = np.exp(1j * f) * math.cos(ref['b'] / 2.0)
+ spmt[1, 1] = np.conj(spmt[0, 0])
+ f = -(ref['a'] - ref['g']) / 2.0
+ spmt[0, 1] = np.exp(1j * f) * math.sin(ref['b'] / 2.0)
+ spmt[1, 0] = -np.conj(spmt[0, 1])
+ rotl = np.zeros((2 * d, 2 * d), dtype=complex)
+ rotl[:d, :d] = spmt[0, 0] * Dref
+ rotl[d:, d:] = spmt[1, 1] * Dref
+ rotl[:d, d:] = spmt[0, 1] * Dref
+ rotl[d:, :d] = spmt[1, 0] * Dref
+
+ op = next(o for o in ops if o['perm'][iref - 1] == iatom)
+ det2 = (op['krotm'][0, 0] * op['krotm'][1, 1]
+ - op['krotm'][0, 1] * op['krotm'][1, 0])
+ timeinv = det2 < 0.0
+ srot_phase = (op['g'] - op['a']) if timeinv else (op['a'] + op['g'])
+ rotl_sym = dmat(l, op['a'], op['b'], op['g'], float(op['iprop']))
+ if timeinv:
+ rotl_sym = tmat(l) @ np.conj(rotl_sym)
+ ephase = np.exp(1j * srot_phase / 2.0)
+ tmp = np.zeros((2 * d, 2 * d), dtype=complex)
+ tmp[:d, :d] = ephase * rotl_sym
+ tmp[d:, d:] = np.conj(ephase) * rotl_sym
+ rotl = (tmp @ np.conj(rotl)) if timeinv else (tmp @ rotl)
+ return rotl, timeinv
+
+
+def mixing_rotrep(op, l, P, ti):
+ """The full 2(2l+1) spinor representation D(R)_{new_i} = P spinrot P^dag of
+ one symmetry operation in a spin-coupling (mixing) basis, with the spinor
+ time-reversal operator applied for the magnetic (timeinv) operations
+ (setsym.f spinrotmat + timeinv_op). This is srot%rotrep(l,isrt)%mat, shared
+ by the symqmc and sympar shell matrices."""
+ rotl = dmat(l, op['a'], op['b'], op['c'], np.linalg.det(op['krotm']))
+ phase = (op['c'] - op['a']) if ti else (op['a'] + op['c'])
+ e = np.exp(1j * phase / 2)
+ d = 2 * l + 1
+ spinrot = np.zeros((2 * d, 2 * d), dtype=complex)
+ if ti: # beta = pi, block-antidiagonal
+ spinrot[:d, d:] = e * rotl
+ spinrot[d:, :d] = -np.conj(e) * rotl
+ else: # beta = 0, block-diagonal
+ spinrot[:d, :d] = e * rotl
+ spinrot[d:, d:] = np.conj(e) * rotl
+ rotrep = P @ spinrot @ np.conj(P.T)
+ if ti:
+ rotrep = mixing_timeinv_op(l, P) @ np.conj(rotrep)
+ return rotrep
+
+
+# --- case.indmftpr -----------------------------------------------------------
+
+def read_indmftpr(indmftpr):
+ """Full structured parse of case.indmftpr.
+
+ Returns a dict with nsort, mult, lmax, the spin-orbit flag `so`, the energy
+ window (e_bot, e_top, proj_mode) and one `sorts` entry per atomic sort with
+ its basis name, optional fromfile sourcefile path, and the correlated /
+ included l lists (l_inc==2 / l_inc in {1,2}). Every generator derives its
+ shell or orbital list from this one parse."""
+ raw = [l.split('!')[0].strip() for l in open(indmftpr)]
+ raw = [l for l in raw if l != '']
+ nsort = int(raw[0].split()[0])
+ mult = [int(x) for x in raw[1].split()][:nsort]
+ lmax = int(raw[2].split()[0])
+ i = 3
+ so = 0
+ sorts = []
+ for isort in range(nsort):
+ basis = raw[i].split()[0]
+ i += 1
+ sourcefile = None
+ if basis == 'fromfile':
+ sourcefile = os.path.join(os.path.dirname(indmftpr), raw[i])
+ i += 1
+ l_inc = [int(x) for x in raw[i].split()]
+ i += 1
+ ireps = [int(x) for x in raw[i].split()]
+ i += 1
+ correlated_ls = [l for l in range(len(l_inc)) if l_inc[l] == 2]
+ included_ls = [l for l in range(len(l_inc)) if l_inc[l] in (1, 2)]
+ if any(n > 0 for n in ireps):
+ i += 1 # skip the correps line
+ if correlated_ls:
+ so = int(raw[i].split()[0]) # SO flag follows a correlated sort
+ i += 1
+ sorts.append(dict(basis=basis, sourcefile=sourcefile,
+ correlated_ls=correlated_ls, included_ls=included_ls))
+ last = raw[-1].split()
+ e_bot, e_top = to_float(last[0]), to_float(last[1])
+ proj_mode = int(last[2]) if len(last) >= 3 else 0
+ return dict(nsort=nsort, mult=mult, lmax=lmax, sorts=sorts, so=so,
+ e_bot=e_bot, e_top=e_top, proj_mode=proj_mode)
+
+
+# --- case.dmftsym ------------------------------------------------------------
+
+def read_dmftsym(path, rotloc=False):
+ """Symmetry operations from case.dmftsym. Each op carries (perm, a, b, g,
+ iprop, krotm); the third Euler angle is named both `c` and `g` for the
+ callers that use either name. With rotloc=True also parse the
+ 'Global->local' representative rotloc per sort and return it as a third
+ value (setsym.f:437-455)."""
+ lines = open(path).read().split('\n')
+ nsym = int(lines[0].split()[0])
+ perms = [[int(x) for x in lines[1 + i].split()] for i in range(nsym)]
+ starts = [i for i, l in enumerate(lines) if 'Sym. op.' in l]
+ ops = []
+ for k, s in enumerate(starts[:nsym]):
+ toks = lines[s + 1].split()
+ a, b, g = (math.radians(float(x)) for x in toks[:3])
+ iprop = int(toks[3])
+ krotm = np.array([[to_float(x) for x in lines[s + 2 + r].split()]
+ for r in range(3)])
+ ops.append(dict(perm=perms[k], a=a, b=b, c=g, g=g, iprop=iprop,
+ krotm=krotm))
+ if not rotloc:
+ return nsym, ops
+
+ gl = next(i for i, l in enumerate(lines) if 'Global->local' in l)
+ rotloc_ref = []
+ j = gl + 1
+ while len(rotloc_ref) < nsym and j < len(lines):
+ if lines[j].strip() == '' or not lines[j].split()[0].lstrip('-').isdigit():
+ j += 1
+ continue
+ # sort index line, then 3 krotm rows, then the Euler/iprop line.
+ if len(lines[j].split()) == 1:
+ krotm = np.array([[to_float(x) for x in lines[j + 1 + r].split()]
+ for r in range(3)])
+ ang = lines[j + 4].split()
+ a, b, g = (math.radians(float(x)) for x in ang[:3])
+ iprop = int(ang[3])
+ rotloc_ref.append(dict(krotm=krotm, a=a, b=b, g=g, iprop=iprop))
+ j += 5
+ else:
+ j += 1
+ return nsym, ops, rotloc_ref
+
+
+# --- almblm parsing ----------------------------------------------------------
+
+def read_almblm(path, info, projectors=False):
+ """Read one spin's almblm file in the dmftproj.f read order.
+
+ With projectors=False keep only the header (elecn, nk, nloat, eferm), the
+ per-(sort,l) overlap block (u_dot_norm, nLO, ovl_LO_u, ovl_LO_udot) and the
+ per-k band data (nbmin/nbmax, Fermi-shifted eband, tetrahedron weights); the
+ per-(l,m) coefficient records are still consumed to keep the reader in sync
+ but their values are discarded (oubwin's window-only path).
+
+ With projectors=True also accumulate the per-(l,m) Alm/Blm/Clm coefficients
+ in the canonical Wien2k packing lm = l*l + (m+l), for every atom of every
+ sort (ctqmcout/parproj)."""
+ nsort = info['nsort']
+ lmax = info['lmax']
+ mult = info['mult']
+ nlm = (lmax + 1) ** 2
+ natom = sum(mult)
+
+ r = Reader(path)
+ elecn = to_float(r.record()[0])
+ nk = int(r.record()[0])
+ r.record() # nloat
+ eferm = to_float(r.record()[0])
+
+ nLO = {}
+ u_dot_norm = {}
+ ovl_LO_u = {}
+ ovl_LO_udot = {}
+ kp = [None] * nk
+
+ for isrt in range(1, nsort + 1):
+ for l in range(lmax + 1):
+ u_dot_norm[(l, isrt)] = to_float(r.record()[0])
+ n = int(r.record()[0])
+ nLO[(l, isrt)] = n
+ for ilo in range(1, n + 1):
+ toks = r.record()
+ ovl_LO_u[(ilo, l, isrt)] = to_float(toks[0])
+ ovl_LO_udot[(ilo, l, isrt)] = to_float(toks[1])
+ for ik in range(nk):
+ r.skip() # "IK = .." banner
+ r.skip() # 3-int line
+ head = r.record()
+ nbmin, nbmax = int(head[1]), int(head[2])
+ nb = nbmax - nbmin + 1
+ if kp[ik] is None:
+ kp[ik] = dict(nbmin=nbmin, nbmax=nbmax, eband=None,
+ weight=None, tetr=None)
+ if projectors:
+ kp[ik].update(
+ Alm=np.zeros((nlm, natom + 1, nb), dtype=complex),
+ Blm=np.zeros((nlm, natom + 1, nb), dtype=complex),
+ Clm=np.zeros((4, nlm, natom + 1, nb), dtype=complex))
+ eband = np.empty(nb)
+ tetr = np.empty(nb)
+ for off in range(nb):
+ toks = r.record()
+ tetr[off] = to_float(toks[0])
+ eband[off] = to_float(toks[1])
+ eband = eband - eferm
+ if kp[ik]['eband'] is None:
+ kp[ik]['eband'] = eband
+ kp[ik]['weight'] = tetr[0]
+ kp[ik]['tetr'] = tetr
+ for imu in range(1, mult[isrt - 1] + 1):
+ iatom = sum(mult[:isrt - 1]) + imu
+ r.skip() # banner
+ r.record() # idum
+ for off in range(nb):
+ lm = 0
+ for l in range(lmax + 1):
+ for m in range(-l, l + 1):
+ alm, blm = read_two_complex(r)
+ for ilo in range(nLO[(l, isrt)]):
+ clm = read_complex(r)
+ if projectors:
+ kp[ik]['Clm'][ilo, lm, iatom, off] = clm
+ if projectors:
+ kp[ik]['Alm'][lm, iatom, off] = alm
+ kp[ik]['Blm'][lm, iatom, off] = blm
+ lm += 1
+
+ return dict(elecn=elecn, eferm=eferm, nk=nk, nlm=nlm, natom=natom,
+ nLO=nLO, u_dot_norm=u_dot_norm, ovl_LO_u=ovl_LO_u,
+ ovl_LO_udot=ovl_LO_udot, kp=kp)
+
+
+# --- band-window selection (set_projections.f, proj_mode==0) -----------------
+
+def select_window(nbmin, nbmax, eband, e1, e2):
+ """proj_mode==0 contiguous band selection for one k-point over the energy
+ array `eband` (already Fermi-shifted). The first band with e1 < E <= e2
+ opens the window; the first band above it with E > e2 closes it at the
+ preceding index; a window reaching nbmax closes at nbmax. Returns
+ (included, nb_bot, nb_top) with nb_bot=nb_top=0 when no band qualifies."""
+ included = False
+ nb_bot = nb_top = 0
+ for off, ib in enumerate(range(nbmin, nbmax + 1)):
+ e = eband[off]
+ if not included and e > e1 and e <= e2:
+ included = True
+ nb_bot = ib
+ elif included and e > e2:
+ nb_top = ib - 1
+ break
+ elif ib == nbmax and e > e1 and e <= e2:
+ nb_top = ib
+ included = True
+ if not included:
+ nb_bot = nb_top = 0
+ return included, nb_bot, nb_top
+
+
+def select_band_window(nbmin, nbmax, b_bot, b_top):
+ """proj_mode 1/2 band-index selection for one k-point (set_projections.f
+ 70-88). e1/e2 are band indices, not energies: every k-point is included,
+ nb_bot = b_bot clamped up to nbmin (strict INT(e1) > nbmin), nb_top = b_top
+ clamped down to nbmax. Returns (included=True, nb_bot, nb_top)."""
+ nb_bot = b_bot if b_bot > nbmin else nbmin
+ nb_top = b_top if b_top < nbmax else nbmax
+ return True, nb_bot, nb_top
+
+
+def band_index_window(info, spins):
+ """Resolve the (b_bot, b_top) band-index window for proj_mode 1 and 2.
+
+ proj_mode 2 (dmftproj.f:233-237): b_bot=INT(e_bot), b_top=INT(e_top) taken
+ directly from the indmftpr window line.
+
+ proj_mode 1 (dmftproj.f:704-722): e_bot/e_top are Fermi-shifted energies;
+ scan every spin and k-point for bands with e_bot < E <= e_top and take the
+ global min/max band index, seeded with b_bot=1000, b_top=1 so an empty scan
+ keeps that seed. `spins` is the list of read_almblm dicts (one per spin)."""
+ if info['proj_mode'] == 2:
+ return int(info['e_bot']), int(info['e_top'])
+ if info['proj_mode'] != 1:
+ raise ValueError('band_index_window is only valid for proj_mode 1 or 2')
+ e_bot, e_top = info['e_bot'], info['e_top']
+ b_bot, b_top = 1000, 1
+ for sp in spins:
+ for kp in sp['kp']:
+ for off, ib in enumerate(range(kp['nbmin'], kp['nbmax'] + 1)):
+ e = kp['eband'][off]
+ if e > e_bot and e <= e_top:
+ if ib > b_top:
+ b_top = ib
+ if ib < b_bot:
+ b_bot = ib
+ return b_bot, b_top
+
+
+# --- gfortran-style real formatters ------------------------------------------
+
+def fmt(x):
+ """One list-directed real, gfortran-style (leading sign space, ~17 sig)."""
+ return ' %.16E' % float(x)
+
+
+def write_row(f, arr):
+ f.write(''.join(fmt(x) for x in arr) + '\n')
+
+
+def fmt_scalar(x):
+ x = float(x)
+ return '%.16f' % x if abs(x) < 1e5 else '%.16E' % x
diff --git a/python/triqs_dftkit/wien2k/ctqmcout.py b/python/triqs_dftkit/wien2k/ctqmcout.py
new file mode 100644
index 0000000..b8ac01e
--- /dev/null
+++ b/python/triqs_dftkit/wien2k/ctqmcout.py
@@ -0,0 +1,412 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by L. Pourovskii, V. Vildosola, C. Martins, M. Aichhorn
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+"""Pure-Python generation of the dmftproj correlated-shell projector file
+(case.ctqmcout), replacing the projector path of the dmftproj Fortran
+executable (outputqmc.f subroutine outqmc).
+
+Given the alm/blm coefficient files (case.almblmup / case.almblmdn, one per
+spin), the projector definition (case.indmftpr), the structure
+(case.struct) and the symmetry input (case.dmftsym), this rebuilds the
+correlated (Wannier) projector pr_crorb%mat_rep and writes case.ctqmcout in
+the format the converter reads.
+
+It follows the Fortran path field by field:
+
+- almblm read order (dmftproj.f:559-689): header, per-sort per-l overlap
+ block, then per-k banners + idum/nbmin/nbmax + rtetr/eband lines, then the
+ per-(l,m) (Alm,Blm) / Clm complex coefficients in the canonical Wien2k lm
+ packing lm = l*l + (m+l) + 1.
+- band-window selection (set_projections.f:89-129, proj_mode==0).
+- raw correlated projector P(m,ib) = Alm(lm) + sum_ilo Clm(ilo,lm)*ovl_LO_u
+ (set_projections.f:243-267); Blm and the radial s12 do not enter pr_crorb.
+- local rotation rot_projectmat (Wigner-D of rotloc, identity here) then the
+ angular-basis transform mat_rep = transmat . (Rloc . P) where transmat =
+ is the cubic-harmonics transform (set_projections.f:450-478).
+- Loewdin orthonormalization of the stacked correlated projectors,
+ P <- O^{-1/2} P with O = D D^H over all correlated rows
+ (orthogonal_wannier_SO, dmftproj.f:847). This step is what the ctqmcout
+ numbers carry; it is applied per k over the full ndim x nbands stack.
+- the Rloc spinor block rotloc%rotrep (outputqmc.f:303-313), built from the
+ symmetry operation mapping the representative atom onto each equivalent one
+ (set_rotloc.f / setsym.f).
+
+ctqmcout layout is outputqmc.f:66-613. The cubic transform uses the exact
+analytic harmonics; with the precision-fixed dmftproj (full double precision
+templates and KIND=8 casts) the port reproduces case.ctqmcout to machine
+precision on a full-rank window.
+"""
+
+import os
+import numpy as np
+from scipy.linalg.lapack import zheev
+from scipy.linalg.blas import zgemm
+
+from ._dmftproj import (band_index_window, dmat, fmt_scalar, read_almblm,
+ read_dmftsym, read_fromfile, read_indmftpr, reptrans,
+ rotloc_rotl_so, select_band_window, select_window,
+ tmat, write_row)
+
+
+def _sqrt_inv(O):
+ """O^{-1/2} of a Hermitian matrix, reproducing orthogonal.f sqrtm
+ (inv=.TRUE.: Z diag(w^{-1/2}) Z^H). Use the same LAPACK routine the Fortran
+ calls, ZHEEV('V','U'), via scipy so the eigenvectors match rather than the
+ divide-and-conquer ZHEEVD of numpy.linalg.eigh. dmftproj takes 1/sqrt of the
+ eigenvalue as a *complex* sqrt (W_comp = CMPLX(W,0)); reproduce that with a
+ complex power. The result D1 @ conj(Z).T matches the Fortran's ZGEMM('N','T').
+
+ With a full-rank overlap (enough bands for the correlated spin-orbitals) the
+ eigenvectors are unique and ctqmcout matches dmftproj to machine precision.
+ A rank-deficient overlap (narrow window, more orbitals than bands) makes the
+ near-null eigenvectors non-unique, so O^{-1/2} amplifies the last-ULP libm
+ difference; that is a numerical property of the degenerate case, not the
+ port (see the ctqmcout test, which uses a full-rank window)."""
+ w, Z, info = zheev(O, compute_v=1, lower=0) # 'V', 'U'
+ D1 = Z * (w.astype(complex) ** -0.5) # Z @ diag(w^{-1/2})
+ return zgemm(1.0, D1, np.conj(Z), trans_b=1) # ZGEMM('N','T'): D1 @ conj(Z)^T
+
+
+# --- correlated / included orbital descriptors -------------------------------
+
+def _build_crorbs(info):
+ crorbs = []
+ for isort in range(1, info['nsort'] + 1):
+ sortinfo = info['sorts'][isort - 1]
+ for l in sortinfo['correlated_ls']:
+ for imu in range(1, info['mult'][isort - 1] + 1):
+ atom = sum(info['mult'][:isort - 1]) + imu
+ crorbs.append(dict(atom=atom, sort=isort, l=l,
+ basis=sortinfo['basis'], first=(imu == 1)))
+ return crorbs
+
+
+def _build_orbs(info):
+ orbs = []
+ for isort in range(1, info['nsort'] + 1):
+ sortinfo = info['sorts'][isort - 1]
+ for l in sortinfo['included_ls']:
+ for imu in range(1, info['mult'][isort - 1] + 1):
+ atom = sum(info['mult'][:isort - 1]) + imu
+ orbs.append(dict(atom=atom, sort=isort, l=l))
+ return orbs
+
+
+# --- Rloc spinor representation (set_rotloc.f / setsym.f) ---------------------
+
+def _rloc_rotrep(op, l, transmat):
+ """rotloc%rotrep(l)%mat, the 2(2l+1) spinor rotation in the new basis for a
+ non-mixing SO shell, with identity struct local rotation (rotloc_ref
+ Euler = 0). rotloc%rotl = blkdiag(ephase*D, conj(ephase)*D) with
+ D = D(R[isym])_{lm}, ephase = exp(i*phase/2); rotrep = S rotl S^H,
+ S = blkdiag(transmat, transmat). Returns (rotrep, timeinv)."""
+ a, b, g, iprop = op['a'], op['b'], op['g'], op['iprop']
+ krotm = op['krotm']
+ det2 = krotm[0, 0] * krotm[1, 1] - krotm[0, 1] * krotm[1, 0]
+ timeinv = det2 < 0.0
+ phase = (g - a) if timeinv else (a + g)
+ D = dmat(l, a, b, g, float(iprop))
+ if timeinv:
+ D = tmat(l) @ np.conj(D) # setsym.f:320-326 orbital time reversal
+ ephase = np.exp(1j * phase / 2)
+ d = 2 * l + 1
+ rotl = np.zeros((2 * d, 2 * d), dtype=complex)
+ rotl[:d, :d] = ephase * D
+ rotl[d:, d:] = np.conj(ephase) * D
+ S = np.zeros((2 * d, 2 * d), dtype=complex)
+ S[:d, :d] = transmat
+ S[d:, d:] = transmat
+ rotrep = S @ rotl @ np.conj(S.T)
+ return rotrep, timeinv
+
+
+def _rloc_rotrep_mixing(l, ref, ops, iatom, iref, P):
+ """rotloc(iatom)%rotrep(l)%mat for a mixing SO shell: the composed Rloc
+ spinor rotation (rotloc_rotl_so) put into the new basis with the full
+ 2(2l+1) transmat P (set_rotloc.f mixing branch). Returns (rotrep, timeinv)."""
+ rotl, timeinv = rotloc_rotl_so(l, ref, ops, iatom, iref)
+ rotrep = (P @ rotl @ P.T) if timeinv else (P @ rotl @ np.conj(P.T))
+ return rotrep, timeinv
+
+
+# --- ctqmcout writer ---------------------------------------------------------
+
+def write_ctqmcout(case):
+ """Read .almblm{up,dn}, .indmftpr, .struct,
+ .dmftsym and write .ctqmcout in the dmftproj format."""
+ info = read_indmftpr(case + '.indmftpr')
+ nsym, ops, rotloc_ref = read_dmftsym(case + '.dmftsym', rotloc=True)
+
+ up, dn = case + '.almblmup', case + '.almblmdn'
+ if os.path.exists(up) and os.path.exists(dn):
+ spin_files = [up, dn]
+ else:
+ spin_files = [case + '.almblm']
+ ifSP = len(spin_files) == 2
+ ifSO = bool(info['so'])
+ ns = 2 if ifSP else 1
+
+ spins = [read_almblm(p, info, projectors=True) for p in spin_files]
+ nk = spins[0]['nk']
+ elecn = spins[0]['elecn']
+
+ crorbs = _build_crorbs(info)
+ orbs = _build_orbs(info)
+ ncrorb = len(crorbs)
+ norb = len(orbs)
+
+ # band-index window for proj_mode 1/2 (set_projections is called with band
+ # indices, not energies). proj_mode 1 scans all spins for the global window.
+ bw = band_index_window(info, spins) if info['proj_mode'] != 0 else None
+
+ # window in [e_bot, e_top] (proj_mode 0) or [b_bot, b_top] (mode 1/2)
+ windows = []
+ for ik in range(nk):
+ kp = spins[0]['kp'][ik]
+ if info['proj_mode'] == 0:
+ windows.append(select_window(
+ kp['nbmin'], kp['nbmax'], kp['eband'],
+ info['e_bot'], info['e_top']))
+ else:
+ windows.append(select_band_window(
+ kp['nbmin'], kp['nbmax'], bw[0], bw[1]))
+
+ # window below e_bot (mode 0) or below b_bot (mode 1/2), for qbbot.
+ # Mode 1/2: set_projections(1, b_bot-1) -> select_band_window with top=b_bot-1.
+ win_below = []
+ for ik in range(nk):
+ kp = spins[0]['kp'][ik]
+ if info['proj_mode'] == 0:
+ win_below.append(select_window(
+ kp['nbmin'], kp['nbmax'], kp['eband'], -1e6, info['e_bot']))
+ else:
+ win_below.append(select_band_window(
+ kp['nbmin'], kp['nbmax'], 1, bw[0] - 1))
+
+ # qbbot: point integration over bands below e_bot, is=1 only under SO
+ qbbot = 0.0
+ for ispin in range(ns):
+ for ik in range(nk):
+ incl, nb_bot, nb_top = win_below[ik]
+ if incl:
+ qbbot += (nb_top - nb_bot + 1) * spins[ispin]['kp'][ik]['weight']
+ if ifSO:
+ break
+
+ transmats = {}
+ mixing = {}
+ for cr in crorbs:
+ key = (cr['l'], cr['sort'])
+ if cr['basis'] == 'fromfile':
+ transmats[key], mixing[key] = read_fromfile(
+ info['sorts'][cr['sort'] - 1]['sourcefile'], cr['l'])
+ else:
+ transmats[key], mixing[key] = reptrans(cr['basis'], cr['l']), False
+
+ # rotloc Euler angles per crorb: the symmetry op mapping the representative
+ # atom of the sort onto this atom (set_rotloc.f). With identity struct
+ # local rotation, rotloc%(a,b,g,iprop) are that op's Euler angles, and
+ # rot_projectmat applies dmat(l, a, b, g, iprop) in the |lm> basis
+ # (rot_projectmat.f:59-65). For atom 2 this is a non-trivial in-plane
+ # rotation (a=270) that mixes the m-rows; omitting it flips the m=1,2 rows.
+ rotloc_op = {}
+ for icr, cr in enumerate(crorbs):
+ iref = sum(info['mult'][:cr['sort'] - 1]) + 1
+ rotloc_op[icr] = next(o for o in ops
+ if o['perm'][iref - 1] == cr['atom'])
+
+ # ---- raw correlated projector mat_rep, then Loewdin orthonormalize ----
+ # Non-mixing: mat_rep[(icr, ik, is)] -> (2l+1, nbsel) per spin block.
+ # Mixing: mat_rep[(icr, ik)] -> (2*(2l+1), nbsel), the stacked spinor block.
+ mat_rep = {}
+ for icr, cr in enumerate(crorbs):
+ l = cr['l']
+ atom = cr['atom']
+ sort = cr['sort']
+ d = 2 * l + 1
+ transmat = transmats[(l, sort)]
+ ismix = mixing[(l, sort)]
+ op = rotloc_op[icr]
+ rot = dmat(l, op['a'], op['b'], op['g'], float(op['iprop']))
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ kp0 = spins[0]['kp'][ik]
+ off_bot = nb_bot - kp0['nbmin']
+ off_top = nb_top - kp0['nbmin']
+ nbsel = off_top - off_bot + 1
+ spin_blocks = []
+ for ispin in range(ns):
+ sp = spins[ispin]
+ kp = sp['kp'][ik]
+ nlo = sp['nLO'][(l, sort)]
+ P = np.zeros((d, nbsel), dtype=complex)
+ for mi, m in enumerate(range(-l, l + 1)):
+ lm = l * l + (m + l) # 0-based packed index
+ for j, off in enumerate(range(off_bot, off_top + 1)):
+ val = kp['Alm'][lm, atom, off]
+ for ilo in range(nlo):
+ val += kp['Clm'][ilo, lm, atom, off] * \
+ sp['ovl_LO_u'][(ilo + 1, l, sort)]
+ P[mi, j] = val
+ spin_blocks.append(rot @ P) # rot_projectmat per spin
+ if ismix:
+ stack = np.vstack(spin_blocks) # (2*(2l+1), nbsel), up then dn
+ mat_rep[(icr, ik)] = transmat @ stack
+ else:
+ for ispin in range(ns):
+ mat_rep[(icr, ik, ispin)] = transmat @ spin_blocks[ispin]
+
+ # Loewdin: per k stack all crorb rows. A mixing crorb contributes its full
+ # 2(2l+1) block once (is=1 only); a non-mixing one the two (2l+1) spin
+ # blocks (orthogonal_wannier_SO ndim layout).
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ blocks = []
+ layout = [] # (key, nrows)
+ for icr, cr in enumerate(crorbs):
+ l = cr['l']
+ if mixing[(l, cr['sort'])]:
+ blocks.append(mat_rep[(icr, ik)])
+ layout.append(((icr, ik), 2 * (2 * l + 1)))
+ else:
+ for ispin in range(ns):
+ blocks.append(mat_rep[(icr, ik, ispin)])
+ layout.append(((icr, ik, ispin), 2 * l + 1))
+ D = np.vstack(blocks) # ndim x nbnd
+ # match the Fortran's exact BLAS calls (orthogonal_wannier_SO): the
+ # near-singular O^{-1/2} amplifies any last-bit difference, so use the
+ # identical ZGEMM trans flags rather than numpy's conj-transpose copies.
+ O = zgemm(1.0, D, D, trans_b=2) # ZGEMM('N','C'): D @ D^H
+ S = _sqrt_inv(O)
+ D_orth = zgemm(1.0, S, D) # ZGEMM('N','N'): O^{-1/2} @ D
+ row = 0
+ for key, nrows in layout:
+ mat_rep[key] = D_orth[row:row + nrows, :]
+ row += nrows
+
+ # ---- Rloc rotrep per crorb ----
+ rloc_blocks = []
+ for cr in crorbs:
+ l = cr['l']
+ transmat = transmats[(l, cr['sort'])]
+ iref = sum(info['mult'][:cr['sort'] - 1]) + 1
+ if mixing[(l, cr['sort'])]:
+ rloc_blocks.append(_rloc_rotrep_mixing(
+ l, rotloc_ref[cr['sort'] - 1], ops, cr['atom'], iref, transmat))
+ else:
+ op = next(o for o in ops if o['perm'][iref - 1] == cr['atom'])
+ rloc_blocks.append(_rloc_rotrep(op, l, transmat))
+
+ # ---- write ----
+ with open(case + '.ctqmcout', 'w') as f:
+ f.write('13.605698\n')
+ f.write('%6d\n' % nk)
+ f.write('%6d\n' % (1 if ifSP else 0))
+ f.write('%6d\n' % (1 if ifSO else 0))
+ f.write(' %s\n' % fmt_scalar(qbbot))
+ f.write(' %s\n' % fmt_scalar(elecn))
+
+ f.write('%6d\n' % norb)
+ for o in orbs:
+ dim = 2 * (2 * o['l'] + 1) if ifSO else 2 * o['l'] + 1
+ f.write('%6d %6d %6d %6d \n' % (o['atom'], o['sort'], o['l'], dim))
+
+ f.write('%6d\n' % ncrorb)
+ for cr in crorbs:
+ l = cr['l']
+ size = 2 * (2 * l + 1) if ifSO else 2 * l + 1
+ f.write('%6d %6d %6d %6d %6d %6d \n' %
+ (cr['atom'], cr['sort'], l, size, 1, 1))
+
+ # Rloc block per crorb (non-mixing SP+SO whole shell)
+ for rotrep, timeinv in rloc_blocks:
+ for m in range(rotrep.shape[0]):
+ write_row(f, rotrep[m, :].real)
+ for m in range(rotrep.shape[0]):
+ write_row(f, rotrep[m, :].imag)
+ f.write('%6d\n' % (1 if timeinv else 0))
+
+ # complex-harmonics -> basis transform block (crorb%first only). Mixing
+ # writes the full 2(2l+1) transmat; non-mixing the spin block-diagonal.
+ for cr in crorbs:
+ if not cr['first']:
+ continue
+ l = cr['l']
+ transmat = transmats[(l, cr['sort'])]
+ d = 2 * l + 1
+ if mixing[(l, cr['sort'])]:
+ spinrot = transmat
+ else:
+ spinrot = np.zeros((2 * d, 2 * d), dtype=complex)
+ spinrot[:d, :d] = transmat
+ spinrot[d:, d:] = transmat
+ f.write('%6d %6d \n' % (1, 2 * d))
+ for m in range(2 * d):
+ write_row(f, spinrot[m, :].real)
+ for m in range(2 * d):
+ write_row(f, spinrot[m, :].imag)
+
+ # number of bands per k (skip is=2 under SO)
+ for ispin in range(ns):
+ if ifSP and ifSO and ispin == 1:
+ continue
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ f.write('%6d\n' % abs(nb_top - nb_bot + 1))
+
+ # projector block: DO ik, DO icrorb. Mixing writes the full 2(2l+1)
+ # block from is=1; non-mixing the two (2l+1) spin blocks.
+ for ik in range(nk):
+ for icr, cr in enumerate(crorbs):
+ l = cr['l']
+ if mixing[(l, cr['sort'])]:
+ P = mat_rep[(icr, ik)]
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].real)
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].imag)
+ continue
+ for ispin in range(ns):
+ P = mat_rep[(icr, ik, ispin)]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].real)
+ for ispin in range(ns):
+ P = mat_rep[(icr, ik, ispin)]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].imag)
+
+ # k-weights
+ for ik in range(nk):
+ f.write(' %s\n' % fmt_scalar(spins[0]['kp'][ik]['weight']))
+
+ # H(k) eigenvalues (skip is=2 under SO)
+ for ispin in range(ns):
+ if ifSP and ifSO and ispin == 1:
+ continue
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ kp = spins[ispin]['kp'][ik]
+ for ib in range(nb_bot, nb_top + 1):
+ f.write(' %s\n' % fmt_scalar(kp['eband'][ib - kp['nbmin']]))
diff --git a/python/triqs_dftkit/wien2k/oubwin.py b/python/triqs_dftkit/wien2k/oubwin.py
new file mode 100644
index 0000000..798757a
--- /dev/null
+++ b/python/triqs_dftkit/wien2k/oubwin.py
@@ -0,0 +1,123 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by L. Pourovskii, V. Vildosola, C. Martins, M. Aichhorn
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+"""Pure-Python generation of the dmftproj band-window file (case.oubwin),
+replacing the corresponding output of the dmftproj Fortran executable.
+
+Given the alm/blm coefficient file (case.almblm, or the spin pair
+case.almblmup / case.almblmdn) and the projector definition (case.indmftpr),
+this selects, per k-point and spin, the contiguous band range whose Fermi-
+shifted Kohn-Sham eigenvalues fall in the energy window, and writes the
+result in the case.oubwin format read by the charge self-consistency.
+
+It reproduces the Fortran path: read elecn/nk/nloat/eferm from the almblm
+header (outbwin.f / dmftproj.f), parse the energy window (e_bot, e_top,
+proj_mode) from the last line of case.indmftpr, shift every band eigenvalue
+by eferm, and apply the set_projections.f selection. For proj_mode==0 this is
+the energy-window rule (strict lower bound e_bot < E, inclusive upper bound
+E <= e_top, yielding a single contiguous [nb_bot, nb_top] per k). For
+proj_mode 1 and 2 the window is a pair of band indices (b_bot, b_top): every
+k-point is included with nb_bot/nb_top those indices clamped to the local
+nbmin/nbmax (set_projections.f:70-88). In mode 2 the indices come straight
+from the window line; in mode 1 they are the global min/max band index over
+all spins/k whose Fermi-shifted energy lies in (e_bot, e_top]
+(dmftproj.f:704-722). The weight written per included k-point is the
+tetrahedron weight of the lowest band nbmin.
+
+Spin-polarization is detected from the input files: case.almblmup /
+case.almblmdn present => two spin files (case.oubwinup / case.oubwindn),
+otherwise the single case.oubwin. The spin-orbit flag (ifSO) comes from
+case.indmftpr; with -so the up and dn windows must coincide and dmftproj
+aborts otherwise, a check this generator also performs.
+"""
+
+import os
+
+from ._dmftproj import (band_index_window, read_almblm, read_indmftpr,
+ select_band_window, select_window)
+
+
+def _windows_from_spin(sp, info, band_window):
+ """Per-k (included, nb_bot, nb_top, weight) for one already-read spin dict.
+ proj_mode==0 uses the energy window; modes 1/2 use the band-index window
+ (b_bot, b_top) precomputed in band_window."""
+ out = []
+ for kp in sp['kp']:
+ if info['proj_mode'] == 0:
+ incl, nb_bot, nb_top = select_window(
+ kp['nbmin'], kp['nbmax'], kp['eband'],
+ info['e_bot'], info['e_top'])
+ else:
+ incl, nb_bot, nb_top = select_band_window(
+ kp['nbmin'], kp['nbmax'], band_window[0], band_window[1])
+ out.append((incl, nb_bot, nb_top, kp['weight']))
+ return out
+
+
+def _write_oubwin_file(path, ifso, windows):
+ """Write one case.oubwin spin file (outbwin.f). Integer fields are i6;
+ the per-k weight is a list-directed real. Not-included k-points emit only
+ the flag line."""
+ with open(path, 'w') as f:
+ f.write('%6d\n' % len(windows))
+ f.write('%6d\n' % (1 if ifso else 0))
+ for incl, nb_bot, nb_top, weight in windows:
+ f.write('%6d\n' % (1 if incl else 0))
+ if incl:
+ f.write('%6d%6d\n' % (nb_bot, nb_top))
+ f.write(' %.16f \n' % weight)
+
+
+def write_oubwin(case):
+ """Read .almblm{up,dn} (or .almblm) and write the matching
+ .oubwin{up,dn} (or .oubwin) in the dmftproj format.
+
+ Spin-polarization is inferred from the input files. The spin-orbit flag
+ written into every file comes from case.indmftpr; under -sp+-so the up/dn
+ windows must coincide (dmftproj aborts otherwise)."""
+ info = read_indmftpr(case + '.indmftpr')
+ ifso = bool(info['so'])
+
+ up, dn = case + '.almblmup', case + '.almblmdn'
+ spin_polarized = os.path.exists(up) and os.path.exists(dn)
+
+ if spin_polarized:
+ sp_up = read_almblm(up, info)
+ sp_dn = read_almblm(dn, info)
+ # mode 1 scans both spins for the global band-index window.
+ bw = (band_index_window(info, [sp_up, sp_dn])
+ if info['proj_mode'] != 0 else None)
+ win_up = _windows_from_spin(sp_up, info, bw)
+ win_dn = _windows_from_spin(sp_dn, info, bw)
+ if ifso:
+ for u, d in zip(win_up, win_dn):
+ if u[0] != d[0] or u[1] != d[1] or u[2] != d[2]:
+ raise ValueError(
+ 'spin-orbit run requires identical up/dn band '
+ 'windows at every k-point')
+ _write_oubwin_file(case + '.oubwinup', ifso, win_up)
+ _write_oubwin_file(case + '.oubwindn', ifso, win_dn)
+ else:
+ sp = read_almblm(case + '.almblm', info)
+ bw = (band_index_window(info, [sp])
+ if info['proj_mode'] != 0 else None)
+ win = _windows_from_spin(sp, info, bw)
+ _write_oubwin_file(case + '.oubwin', ifso, win)
diff --git a/python/triqs_dftkit/wien2k/outband.py b/python/triqs_dftkit/wien2k/outband.py
new file mode 100644
index 0000000..c4e3a12
--- /dev/null
+++ b/python/triqs_dftkit/wien2k/outband.py
@@ -0,0 +1,329 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by L. Pourovskii, V. Vildosola, C. Martins, M. Aichhorn
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+"""Pure-Python generation of the dmftproj band-structure projector file
+(case.outband), replacing the -band path of the dmftproj Fortran executable
+(outband.f).
+
+case.outband feeds the converter method convert_bands_input: it is the
+band-structure analog of case.ctqmcout. The correlated-shell projectors are
+built exactly as in ctqmcout.py (raw Alm/Clm projector -> rot_projectmat local
+rotation -> cubic/fromfile transmat -> Loewdin orthonormalization
+orthogonal_wannier_SO), but evaluated on a band k-path and written in the
+outband layout. case.outband also carries the raw radial-normalized Theta
+projector pr_orb%matn_rep for every included shell (the parproj.py path, no
+Loewdin) and the k-path labels.
+
+Two band-mode differences from the ctqmcout path (dmftproj.f:557-581):
+
+- nkband, the number of k-points along the plotted k-path, is read from
+ .klist_band (read_k_list.f). It is written in the header and drives the
+ k-label block; the per-k projector/band data loop over the almblm nk, which is
+ the single representative k-point lapw2 -almd writes in band mode.
+- the Fermi energy is read from the LAST line of .indmftpr, not from the
+ almblm header; the band almblm keeps the eferm record as a placeholder that
+ the reader skips (READ(iualmblm,*) with no target).
+
+outband layout is outband.f:56-278: nkband, the per-spin per-k band counts, the
+Loewdin correlated projectors (DO ik, DO icrorb), H(k) eigenvalues, the
+included-orbital radial sizes, the raw Theta projectors, and the k-labels.
+"""
+
+import os
+import tempfile
+import numpy as np
+from scipy.linalg.blas import zgemm
+
+from ._dmftproj import (dmat, read_almblm, read_dmftsym, read_fromfile,
+ read_indmftpr, reptrans, select_window, to_float,
+ write_row)
+from .ctqmcout import _build_crorbs, _sqrt_inv
+from .parproj import (_build_matn_rep, _build_matn_rep_mixing, _build_orbs)
+
+
+def _read_indmftpr_band(indmftpr):
+ """case.indmftpr in band mode: the standard parse, plus the Fermi energy
+ appended as the last physical line after the (e_bot e_top proj_mode) window
+ line. The trailing scalar would be mistaken for the window line, so feed
+ read_indmftpr the file without that record and return eferm separately."""
+ raw = [l.split('!')[0].rstrip('\n') for l in open(indmftpr)]
+ nonblank = [i for i, l in enumerate(raw) if l.strip() != '']
+ eferm = to_float(raw[nonblank[-1]].split()[0])
+ tmp = tempfile.NamedTemporaryFile('w', suffix='.indmftpr', delete=False,
+ dir=os.path.dirname(os.path.abspath(indmftpr)))
+ tmp.write('\n'.join(raw[:nonblank[-1]]) + '\n')
+ tmp.close()
+ try:
+ info = read_indmftpr(tmp.name)
+ finally:
+ os.unlink(tmp.name)
+ return info, eferm
+
+
+def _read_almblm_band(path, info, eferm):
+ """Band-mode almblm read: identical to read_almblm but the header eferm
+ record is a placeholder the band path ignores; the Fermi shift uses the
+ eferm passed in (from case.indmftpr, dmftproj.f:576-581). read_almblm reads
+ the 4th record as eferm, so overwrite that record with the indmftpr value."""
+ text = open(path).read().splitlines()
+ text[3] = ' %.16E' % eferm # Reader record 4 (physical line index 3)
+ tmp = tempfile.NamedTemporaryFile('w', suffix='.almblm', delete=False)
+ tmp.write('\n'.join(text) + '\n')
+ tmp.close()
+ try:
+ return read_almblm(tmp.name, info, projectors=True)
+ finally:
+ os.unlink(tmp.name)
+
+
+def read_k_list(path):
+ """nkband and the k-path labels from .klist_band (read_k_list.f).
+
+ Every physical line up to the END marker is a k-point; a line whose first
+ character is not a blank carries a label, whose position is the k-point
+ index and whose name is the leading non-blank token. Returns
+ (nkband, [(pos, name), ...])."""
+ lines = open(path).read().splitlines()
+ nkband = 0
+ labels = []
+ for line in lines:
+ if line[:3] == 'END':
+ break
+ nkband += 1
+ if line[:1] != ' ':
+ labels.append((nkband, line.split()[0]))
+ return nkband, labels
+
+
+def write_outband(case):
+ """Read .almblm{up,dn}, .indmftpr, .struct,
+ .dmftsym and .klist_band and write .outband in the
+ dmftproj band format."""
+ info, eferm = _read_indmftpr_band(case + '.indmftpr')
+ nsym, ops, rotloc_ref = read_dmftsym(case + '.dmftsym', rotloc=True)
+
+ up, dn = case + '.almblmup', case + '.almblmdn'
+ if os.path.exists(up) and os.path.exists(dn):
+ spin_files = [up, dn]
+ else:
+ spin_files = [case + '.almblm']
+ ifSP = len(spin_files) == 2
+ ifSO = bool(info['so'])
+ ns = 2 if ifSP else 1
+
+ spins = [_read_almblm_band(p, info, eferm) for p in spin_files]
+ nk = spins[0]['nk']
+ info['nk'] = nk
+
+ nkband, labels = read_k_list(case + '.klist_band')
+
+ crorbs = _build_crorbs(info)
+ orbs = _build_orbs(info)
+ ncrorb = len(crorbs)
+ norb = len(orbs)
+
+ # proj_mode 0 energy window [e_bot, e_top] per k (band path: proj_mode 0).
+ windows = []
+ for ik in range(nk):
+ kp = spins[0]['kp'][ik]
+ windows.append(select_window(kp['nbmin'], kp['nbmax'], kp['eband'],
+ info['e_bot'], info['e_top']))
+
+ transmats = {}
+ mixing = {}
+ for o in orbs:
+ key = (o['l'], o['sort'])
+ if key in transmats:
+ continue
+ if o['basis'] == 'fromfile':
+ transmats[key], mixing[key] = read_fromfile(
+ info['sorts'][o['sort'] - 1]['sourcefile'], o['l'])
+ else:
+ transmats[key], mixing[key] = reptrans(o['basis'], o['l']), False
+
+ # rot_projectmat local rotation: the op mapping the sort representative onto
+ # this atom (set_projections.f via rot_projectmat). Same as ctqmcout/parproj.
+ rotloc_op = {}
+ for o in orbs:
+ iref = sum(info['mult'][:o['sort'] - 1]) + 1
+ rotloc_op[o['atom']] = next(op for op in ops
+ if op['perm'][iref - 1] == o['atom'])
+
+ # ---- correlated projector mat_rep, then Loewdin orthonormalize ----
+ mat_rep = {}
+ for icr, cr in enumerate(crorbs):
+ l = cr['l']
+ atom = cr['atom']
+ sort = cr['sort']
+ d = 2 * l + 1
+ transmat = transmats[(l, sort)]
+ ismix = mixing[(l, sort)]
+ op = rotloc_op[atom]
+ rot = dmat(l, op['a'], op['b'], op['g'], float(op['iprop']))
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ kp0 = spins[0]['kp'][ik]
+ off_bot = nb_bot - kp0['nbmin']
+ off_top = nb_top - kp0['nbmin']
+ nbsel = off_top - off_bot + 1
+ spin_blocks = []
+ for ispin in range(ns):
+ sp = spins[ispin]
+ kp = sp['kp'][ik]
+ nlo = sp['nLO'][(l, sort)]
+ P = np.zeros((d, nbsel), dtype=complex)
+ for mi, m in enumerate(range(-l, l + 1)):
+ lm = l * l + (m + l)
+ for j, off in enumerate(range(off_bot, off_top + 1)):
+ val = kp['Alm'][lm, atom, off]
+ for ilo in range(nlo):
+ val += kp['Clm'][ilo, lm, atom, off] * \
+ sp['ovl_LO_u'][(ilo + 1, l, sort)]
+ P[mi, j] = val
+ spin_blocks.append(rot @ P)
+ if ismix:
+ stack = np.vstack(spin_blocks)
+ mat_rep[(icr, ik)] = transmat @ stack
+ else:
+ for ispin in range(ns):
+ mat_rep[(icr, ik, ispin)] = transmat @ spin_blocks[ispin]
+
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ blocks = []
+ layout = []
+ for icr, cr in enumerate(crorbs):
+ l = cr['l']
+ if mixing[(l, cr['sort'])]:
+ blocks.append(mat_rep[(icr, ik)])
+ layout.append(((icr, ik), 2 * (2 * l + 1)))
+ else:
+ for ispin in range(ns):
+ blocks.append(mat_rep[(icr, ik, ispin)])
+ layout.append(((icr, ik, ispin), 2 * l + 1))
+ D = np.vstack(blocks)
+ # match the Fortran's exact BLAS calls (orthogonal_wannier_SO): the
+ # near-singular O^{-1/2} amplifies any last-bit difference, so use the
+ # identical ZGEMM trans flags rather than numpy's conj-transpose copies.
+ O = zgemm(1.0, D, D, trans_b=2) # ZGEMM('N','C'): D @ D^H
+ S = _sqrt_inv(O)
+ D_orth = zgemm(1.0, S, D) # ZGEMM('N','N'): O^{-1/2} @ D
+ row = 0
+ for key, nrows in layout:
+ mat_rep[key] = D_orth[row:row + nrows, :]
+ row += nrows
+
+ # ---- raw Theta projectors matn_rep per included orbital (parproj path) ----
+ matn_reps = {}
+ for o in orbs:
+ l = o['l']
+ transmat = transmats[(l, o['sort'])]
+ op = rotloc_op[o['atom']]
+ rot = dmat(l, op['a'], op['b'], op['g'], float(op['iprop']))
+ if mixing[(l, o['sort'])]:
+ matn_reps[o['atom']] = _build_matn_rep_mixing(
+ o, info, spins, windows, transmat, rot)
+ else:
+ matn_reps[o['atom']] = _build_matn_rep(
+ o, info, spins, ns, windows, transmat, rot)
+
+ # ---- write ----
+ with open(case + '.outband', 'w') as f:
+ f.write('%6d\n' % nkband)
+
+ # number of bands per k (skip is=2 under SP+SO)
+ for ispin in range(ns):
+ if ifSP and ifSO and ispin == 1:
+ continue
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ f.write('%6d\n' % abs(nb_top - nb_bot + 1))
+
+ # correlated projector block: DO ik, DO icrorb (Loewdin orthonormalized).
+ for ik in range(nk):
+ for icr, cr in enumerate(crorbs):
+ l = cr['l']
+ if mixing[(l, cr['sort'])]:
+ P = mat_rep[(icr, ik)]
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].real)
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].imag)
+ continue
+ for ispin in range(ns):
+ P = mat_rep[(icr, ik, ispin)]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].real)
+ for ispin in range(ns):
+ P = mat_rep[(icr, ik, ispin)]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].imag)
+
+ # H(k) eigenvalues (skip is=2 under SO)
+ for ispin in range(ns):
+ if ifSO and ispin == 1:
+ continue
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ kp = spins[ispin]['kp'][ik]
+ for ib in range(nb_bot, nb_top + 1):
+ f.write(' %.16E\n' % kp['eband'][ib - kp['nbmin']])
+
+ # included-orbital radial sizes norm_radf%n
+ for o in orbs:
+ n = spins[0]['nLO'][(o['l'], o['sort'])] + 2
+ f.write('%6d\n' % n)
+
+ # Theta projector block: DO iorb, DO ik, DO ir. Mixing writes the full
+ # 2(2l+1) block from is=1; non-mixing the two (2l+1) spin blocks.
+ for o in orbs:
+ l = o['l']
+ atom = o['atom']
+ n = spins[0]['nLO'][(l, o['sort'])] + 2
+ ismix = mixing[(l, o['sort'])]
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ for ir in range(n):
+ if ismix:
+ P = matn_reps[atom][ik][:, :, ir]
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].real)
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].imag)
+ continue
+ for ispin in range(ns):
+ P = matn_reps[atom][(ik, ispin)][:, :, ir]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].real)
+ for ispin in range(ns):
+ P = matn_reps[atom][(ik, ispin)][:, :, ir]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].imag)
+
+ # k-labels
+ for i, (pos, name) in enumerate(labels, start=1):
+ f.write('%6d%6d%s\n' % (i, pos, name))
diff --git a/python/triqs_dftkit/wien2k/parproj.py b/python/triqs_dftkit/wien2k/parproj.py
new file mode 100644
index 0000000..e75b064
--- /dev/null
+++ b/python/triqs_dftkit/wien2k/parproj.py
@@ -0,0 +1,567 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by L. Pourovskii, V. Vildosola, C. Martins, M. Aichhorn
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+"""Pure-Python generation of the dmftproj partial-projector file
+(case.parproj), replacing the parproj path of the dmftproj Fortran executable
+(outputqmc.f).
+
+This is the sibling of ctqmcout.py. Where ctqmcout covers the correlated
+shells (crorb, l_inc==2) and runs them through the Loewdin orthonormalization,
+parproj covers ALL included shells (orb, l_inc in {1,2}) and writes the RAW
+radial-normalized Theta projector. The three structural differences from
+ctqmcout are:
+
+1. No Loewdin orthonormalization. pr_orb%matn_rep is never touched by
+ orthogonal_wannier; the only normalization is the per-orbital radial
+ transform s12 = O_radial^{+1/2} (orthogonal_r with inv=.FALSE.) applied as
+ coeff.s12 per (m, ib) in set_projections.f:273-332.
+
+2. The Theta projector keeps the full radial vector coeff = [Alm, Blm, Clm...]
+ of length n = nLO+2; s12 is built from u_dot_norm, ovl_LO_u and the second
+ LO-overlap token ovl_LO_udot (set_projections.f:163-197). All n radial
+ channels are written separately (the ir loop).
+
+3. Three extra per-orbital blocks: the BZ-symmetrized, tetrahedron-weighted,
+ Rloc-rotated density matrix densmat (density.f + symmetrize_mat + rotdens_mat),
+ the per-orbital Rloc spinor rotrep (set_rotloc.f), and a time-reversal flag.
+
+The reference case CaOs2 is SP+SO (ifSP=ifSO=1, ns=2), so every per-orbital
+matrix is the full 2*(2l+1)=10 spin+orbital block. The exact cubic transmat and
+the rot_projectmat local rotation are applied to matn_rep before writing,
+exactly as in ctqmcout (dmftproj reads the same full-precision templates after
+the precision fix).
+
+outputqmc.f parproj writer: 897-1183. set_projections.f s12/projector:
+163-197/273-622. density.f Theta path: 588-915. symmetrize_mat.f /
+rot_dens.f / setsym.f / set_rotloc.f for the symmetrization and Rloc rotation.
+"""
+
+import math
+import os
+import numpy as np
+
+from ._dmftproj import (dmat, mixing_rotrep, read_almblm, read_dmftsym,
+ read_fromfile, read_indmftpr, reptrans,
+ rotloc_rotl_so, select_window, tmat, write_row)
+
+
+def _op_timeinv(op, ifSO):
+ det2 = (op['krotm'][0, 0] * op['krotm'][1, 1]
+ - op['krotm'][0, 1] * op['krotm'][1, 0])
+ return bool(ifSO and det2 < 0.0)
+
+
+def _sqrtm_real_sym(O):
+ """O^{+1/2} of a real symmetric matrix (orthogonal_r with inv=.FALSE.:
+ Z diag(sqrt(w)) Z^T, real part kept). dmftproj evaluates sqrt of the
+ eigenvalue as a complex sqrt (W_comp = CMPLX(W,0)); reproduce that with a
+ complex power so a negative eigenvalue gives i*sqrt(|w|)."""
+ w, Z = np.linalg.eigh(O)
+ D1 = Z * np.sqrt(w.astype(complex))
+ return (D1 @ Z.T).real
+
+
+# --- included orbital descriptors --------------------------------------------
+
+def _build_orbs(info):
+ orbs = []
+ for isort in range(1, info['nsort'] + 1):
+ sortinfo = info['sorts'][isort - 1]
+ for l in sortinfo['included_ls']:
+ for imu in range(1, info['mult'][isort - 1] + 1):
+ atom = sum(info['mult'][:isort - 1]) + imu
+ orbs.append(dict(atom=atom, sort=isort, l=l,
+ basis=sortinfo['basis']))
+ return orbs
+
+
+# --- s12 radial transform (set_projections.f:163-197) ------------------------
+
+def _build_s12(l, isrt, n, spin):
+ """O_radial^{+1/2} for one (l, sort, spin): the n x n radial overlap built
+ from u_dot_norm + ovl_LO_u + ovl_LO_udot, then its matrix square root."""
+ s = np.zeros((n, n))
+ s[0, 0] = 1.0
+ s[1, 1] = spin['u_dot_norm'][(l, isrt)]
+ for ilo in range(1, spin['nLO'][(l, isrt)] + 1):
+ s[1 + ilo, 1 + ilo] = 1.0
+ s[1 + ilo, 0] = spin['ovl_LO_u'][(ilo, l, isrt)]
+ s[0, 1 + ilo] = spin['ovl_LO_u'][(ilo, l, isrt)]
+ s[1 + ilo, 1] = spin['ovl_LO_udot'][(ilo, l, isrt)]
+ s[1, 1 + ilo] = spin['ovl_LO_udot'][(ilo, l, isrt)]
+ return _sqrtm_real_sym(s)
+
+
+# --- srot rotrep (setsym.f) --------------------------------------------------
+
+def _srot_rotrep_nonmixing(op, l, transmat, ifSP, ifSO):
+ """srot(isym)%rotrep(l,isrt)%mat, the (2l+1) up/up block of the symmetry op
+ in the new basis: transmat . D(R)_{lm} . transmat^H, with the orbital
+ time-reversal operator applied for the magnetic (timeinv) operations.
+
+ Returns (rotrep[2l+1,2l+1], timeinv, phase)."""
+ a, b, g, iprop = op['a'], op['b'], op['g'], op['iprop']
+ krotm = op['krotm']
+ det2 = krotm[0, 0] * krotm[1, 1] - krotm[0, 1] * krotm[1, 0]
+ if ifSP and ifSO:
+ timeinv = det2 < 0.0
+ phase = (g - a) if timeinv else (a + g)
+ else:
+ timeinv = False
+ phase = 0.0
+ rotl = dmat(l, a, b, g, float(iprop))
+ rotrep = transmat @ rotl @ np.conj(transmat.T)
+ if timeinv:
+ # timeinv_op in the new basis: reptrans T reptrans^T applied to conj.
+ tinv = transmat @ tmat(l) @ transmat.T
+ rotrep = tinv @ np.conj(rotrep)
+ return rotrep, timeinv, phase
+
+
+# --- rotloc rotrep (set_rotloc.f) under SP+SO, non-mixing --------------------
+
+def _rotloc_rotrep_so(orb, ops, info, ref, transmat, mixing):
+ """rotloc(iatom)%rotrep(l)%mat, the full 2*(2l+1) Rloc spinor rotation in
+ the new basis under SP+SO (set_rotloc.f), plus timeinv flag.
+
+ ref is the representative-sort rotloc; rotloc_rotl_so composes the
+ representative spinor rotloc with the first symmetry op mapping the sort
+ representative onto this atom. The new-basis transform is the full transmat
+ for a mixing (spin-coupling) basis, and blkdiag(transmat, transmat) for a
+ spin-diagonal one."""
+ l = orb['l']
+ iref = sum(info['mult'][:orb['sort'] - 1]) + 1
+ d = 2 * l + 1
+ rotl, timeinv = rotloc_rotl_so(l, ref, ops, orb['atom'], iref)
+ if mixing:
+ S = transmat
+ else:
+ S = np.zeros((2 * d, 2 * d), dtype=complex)
+ S[:d, :d] = transmat
+ S[d:, d:] = transmat
+ rotrep = (S @ rotl @ S.T) if timeinv else (S @ rotl @ np.conj(S.T))
+ return rotrep, timeinv
+
+
+# --- projector matn_rep (set_projections.f Theta path) -----------------------
+
+def _build_matn_rep(orb, info, spins, ns, windows, transmat, rot):
+ """matn_rep[(ik, is)] -> (2l+1, nbsel, n): the raw radial-normalized Theta
+ projector with the local rotation and the basis transform applied per
+ radial channel (non-mixing SP+SO path, set_projections.f:591-621)."""
+ l = orb['l']
+ atom = orb['atom']
+ sort = orb['sort']
+ out = {}
+ for ik in range(info['nk']):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ kp0 = spins[0]['kp'][ik]
+ off_bot = nb_bot - kp0['nbmin']
+ off_top = nb_top - kp0['nbmin']
+ nbsel = off_top - off_bot + 1
+ for ispin in range(ns):
+ sp = spins[ispin]
+ kp = sp['kp'][ik]
+ n = sp['nLO'][(l, sort)] + 2
+ s12 = _build_s12(l, sort, n, sp)
+ matn = np.zeros((2 * l + 1, nbsel, n), dtype=complex)
+ for mi, m in enumerate(range(-l, l + 1)):
+ lm = l * l + (m + l)
+ for j, off in enumerate(range(off_bot, off_top + 1)):
+ coeff = np.zeros(n, dtype=complex)
+ coeff[0] = kp['Alm'][lm, atom, off]
+ coeff[1] = kp['Blm'][lm, atom, off]
+ for ilo in range(n - 2):
+ coeff[2 + ilo] = kp['Clm'][ilo, lm, atom, off]
+ matn[mi, j, :] = coeff @ s12
+ # rot_projectmat then the basis transform, per radial channel.
+ for ir in range(n):
+ matn[:, :, ir] = transmat @ (rot @ matn[:, :, ir])
+ out[(ik, ispin)] = matn
+ return out
+
+
+def _raw_matn(orb, sp, ik, nb_bot, nb_top, rot):
+ """The rot_projectmat'd (2l+1, nbsel, n) Theta projector in the |lm> basis
+ for one spin, before the angular transform (set_projections.f matn_rep)."""
+ l, atom, sort = orb['l'], orb['atom'], orb['sort']
+ kp = sp['kp'][ik]
+ off_bot = nb_bot - kp['nbmin']
+ off_top = nb_top - kp['nbmin']
+ nbsel = off_top - off_bot + 1
+ n = sp['nLO'][(l, sort)] + 2
+ s12 = _build_s12(l, sort, n, sp)
+ matn = np.zeros((2 * l + 1, nbsel, n), dtype=complex)
+ for mi, m in enumerate(range(-l, l + 1)):
+ lm = l * l + (m + l)
+ for j, off in enumerate(range(off_bot, off_top + 1)):
+ coeff = np.zeros(n, dtype=complex)
+ coeff[0] = kp['Alm'][lm, atom, off]
+ coeff[1] = kp['Blm'][lm, atom, off]
+ for ilo in range(n - 2):
+ coeff[2 + ilo] = kp['Clm'][ilo, lm, atom, off]
+ matn[mi, j, :] = coeff @ s12
+ for ir in range(n):
+ matn[:, :, ir] = rot @ matn[:, :, ir]
+ return matn
+
+
+def _build_matn_rep_mixing(orb, info, spins, windows, transmat, rot):
+ """matn_rep[ik] -> (2*(2l+1), nbsel, n): the mixing Theta projector. Each
+ spin's rot_projectmat'd |lm> block is stacked (up then dn) and multiplied by
+ the full 2(2l+1) transmat per radial channel (set_projections.f:515-585)."""
+ l = orb['l']
+ d = 2 * l + 1
+ out = {}
+ for ik in range(info['nk']):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ up = _raw_matn(orb, spins[0], ik, nb_bot, nb_top, rot)
+ dn = _raw_matn(orb, spins[1], ik, nb_bot, nb_top, rot)
+ nbsel, n = up.shape[1], up.shape[2]
+ matn = np.zeros((2 * d, nbsel, n), dtype=complex)
+ matn[:d] = up
+ matn[d:] = dn
+ for ir in range(n):
+ matn[:, :, ir] = transmat @ matn[:, :, ir]
+ out[ik] = matn
+ return out
+
+
+def _orbital_densmat_mixing(orb, info, spins, windows, matn_rep):
+ """The single 2*(2l+1) raw density block for a mixing orbital, point-
+ integrated with the geometric k-weight (density.f:786-812): D = sum over k
+ and radial channels of matn_rep matn_rep^H, already in the new basis."""
+ l = orb['l']
+ d = 2 * l + 1
+ n = spins[0]['nLO'][(l, orb['sort'])] + 2
+ dens = np.zeros((2 * d, 2 * d), dtype=complex)
+ for ik in range(info['nk']):
+ incl, _, _ = windows[ik]
+ if not incl:
+ continue
+ weight = spins[0]['kp'][ik]['weight']
+ for i in range(n):
+ mat = matn_rep[orb['atom']][ik][:, :, i]
+ dens += (mat @ np.conj(mat.T)) * weight
+ return dens
+
+
+def _symmetrize_densmat_mixing(orb, ops, nsym, rotreps, dens_raw):
+ """symmetrize_mat for a mixing orbital (symmetrize_mat.f:140-188). For the
+ representative atom: sum over symmetry ops of rotrep (conj(D) if magnetic)
+ rotrep^H, divided by nsym. rotreps[isym] is srot%rotrep (mixing_rotrep)."""
+ d = 2 * (2 * orb['l'] + 1)
+ sym = np.zeros((d, d), dtype=complex)
+ for isym in range(nsym):
+ rotrep, timeinv = rotreps[isym]
+ tmp = np.conj(dens_raw) if timeinv else dens_raw
+ sym += rotrep @ (tmp @ np.conj(rotrep.T))
+ return sym / nsym
+
+
+def _rotdens_densmat_mixing(blk, rotrep_loc, timeinv):
+ """rotdens_mat for a mixing orbital (rot_dens.f:119-141): inverse(Rloc) D
+ Rloc on the single 2*(2l+1) block."""
+ if timeinv:
+ return rotrep_loc.T @ np.conj(blk @ rotrep_loc)
+ return np.conj(rotrep_loc.T) @ (blk @ rotrep_loc)
+
+
+# --- density matrix (density.f Theta path, non-mixing SP+SO) -----------------
+
+def _orbital_densmat_blocks(orb, info, spins, ns, windows, matn_reps):
+ """The nsp=4 raw density-matrix blocks (up/up, dn/dn, up/dn, dn/up) for one
+ orbital, point-integrated with the geometric k-weight (density.f:889-907,
+ tetr=.FALSE. path). The window is the bands below e_bot (dmftproj.f:798)."""
+ l = orb['l']
+ d = 2 * l + 1
+ blocks = [np.zeros((d, d), dtype=complex) for _ in range(4)]
+ for ik in range(info['nk']):
+ incl, nb_bot, nb_top = windows[ik]
+ if not incl:
+ continue
+ kp0 = spins[0]['kp'][ik]
+ off_bot = nb_bot - kp0['nbmin']
+ off_top = nb_top - kp0['nbmin']
+ n = spins[0]['nLO'][(l, orb['sort'])] + 2
+ for iss in range(1, 5):
+ if iss <= 2:
+ is_, is1 = iss, iss
+ else:
+ is_ = iss - 2
+ is1 = 3 - is_
+ isp, isp1 = is_ - 1, is1 - 1
+ weight = spins[isp]['kp'][ik]['weight']
+ acc = np.zeros((d, d), dtype=complex)
+ for i in range(n):
+ mat = matn_reps[orb['atom']][(ik, isp)][:, :, i]
+ cmat = matn_reps[orb['atom']][(ik, isp1)][:, :, i]
+ acc += mat @ np.conj(cmat.T)
+ blocks[iss - 1] += acc * weight
+ return blocks
+
+
+def _symmetrize_densmat(orbs, info, ops, nsym, srot_rotreps, dens_raw, ns,
+ ifSP, ifSO):
+ """symmetrize_mat for the non-mixing SP+SO path (symmetrize_mat.f:196-276).
+ dens_raw[atom] -> [4 blocks]. Returns symmetrized blocks per atom.
+
+ The blocks are summed over symmetry ops with srot%rotrep, the spin block
+ phase ephase (up/dn, dn/up), and the orbital-time-reversal conjugation for
+ magnetic ops; equivalent atoms of a sort scatter into one another via the
+ permutation. Result divided by nsym."""
+ out = {}
+ # group orbitals by sort, in orb order (they are already sort-major).
+ isort_groups = {}
+ for o in orbs:
+ isort_groups.setdefault(o['sort'], []).append(o)
+ for isrt, group in isort_groups.items():
+ l = group[0]['l']
+ d = 2 * l + 1
+ mult = len(group)
+ sym = [[np.zeros((d, d), dtype=complex) for _ in range(4)]
+ for _ in range(mult)]
+ for imult in range(mult):
+ iatom = group[imult]['atom']
+ for isym in range(nsym):
+ op = ops[isym]
+ rotrep, timeinv, phase = srot_rotreps[(isrt, isym)]
+ jorb = op['perm'][iatom - 1] - iatom + imult # 0-based target
+ for iss in range(1, 5):
+ is_ = iss if iss <= 2 else iss - 2
+ isp = is_ - 1
+ tmp = dens_raw[iatom][iss - 1].copy()
+ if ifSP and timeinv:
+ tmp = np.conj(tmp)
+ ephase = 1.0
+ if iss == 3:
+ ephase = np.exp(1j * phase)
+ elif iss == 4:
+ ephase = np.exp(-1j * phase)
+ val = rotrep @ (tmp @ np.conj(rotrep.T)) * ephase
+ sym[jorb][iss - 1] += val
+ for imult in range(mult):
+ iatom = group[imult]['atom']
+ out[iatom] = [sym[imult][k] / nsym for k in range(4)]
+ return out
+
+
+def _rotdens_densmat(orb, blocks, rotrep_loc, timeinv):
+ """rotdens_mat for non-mixing SP+SO (rot_dens.f:151-193): assemble the four
+ blocks into a 2*(2l+1) matrix, apply inverse(Rloc) D Rloc, return it as the
+ full 2*(2l+1) densprint matrix."""
+ l = orb['l']
+ d = 2 * l + 1
+ rd = np.zeros((2 * d, 2 * d), dtype=complex)
+ rd[:d, :d] = blocks[0]
+ rd[d:, d:] = blocks[1]
+ rd[:d, d:] = blocks[2]
+ rd[d:, :d] = blocks[3]
+ if timeinv:
+ rd = np.conj(rd @ rotrep_loc)
+ rd = rotrep_loc.T @ rd
+ else:
+ rd = rd @ rotrep_loc
+ rd = np.conj(rotrep_loc.T) @ rd
+ return rd
+
+
+# --- parproj writer ----------------------------------------------------------
+
+def write_parproj(case):
+ """Read .almblm{up,dn}, .indmftpr, .struct,
+ .dmftsym and write .parproj in the dmftproj format."""
+ info = read_indmftpr(case + '.indmftpr')
+ nsym, ops, rotloc_ref = read_dmftsym(case + '.dmftsym', rotloc=True)
+
+ up, dn = case + '.almblmup', case + '.almblmdn'
+ if os.path.exists(up) and os.path.exists(dn):
+ spin_files = [up, dn]
+ else:
+ spin_files = [case + '.almblm']
+ ifSP = len(spin_files) == 2
+ ifSO = bool(info['so'])
+ ns = 2 if ifSP else 1
+
+ spins = [read_almblm(p, info, projectors=True) for p in spin_files]
+ nk = spins[0]['nk']
+ info['nk'] = nk
+
+ orbs = _build_orbs(info)
+ norb = len(orbs)
+
+ # Two band ranges (dmftproj.f:757,836): the energy window [e_bot, e_top]
+ # for the written Theta projector (block A), and the full band range
+ # (-Elarge, Elarge) over which the density matrix is integrated. dmftproj
+ # computes the density matrix FIRST over the full range, then overwrites
+ # the projectors with the energy window before outputqmc.
+ # Two band ranges (dmftproj.f:798,836): the energy window [e_bot, e_top]
+ # for the written Theta projector (block A), and the bands below e_bot
+ # (-Elarge, e_bot) for the density matrix. dmftproj computes the density
+ # matrix over the below-e_bot range with point integration LAST (the third
+ # density call is correlated-only), so densmat in outputqmc is that one.
+ windows = []
+ below_windows = []
+ for ik in range(nk):
+ kp = spins[0]['kp'][ik]
+ windows.append(select_window(kp['nbmin'], kp['nbmax'], kp['eband'],
+ info['e_bot'], info['e_top']))
+ below_windows.append(select_window(kp['nbmin'], kp['nbmax'],
+ kp['eband'], -1e6, info['e_bot']))
+
+ transmats = {}
+ mixing = {}
+ for o in orbs:
+ key = (o['l'], o['sort'])
+ if o['basis'] == 'fromfile':
+ transmats[key], mixing[key] = read_fromfile(
+ info['sorts'][o['sort'] - 1]['sourcefile'], o['l'])
+ else:
+ transmats[key], mixing[key] = reptrans(o['basis'], o['l']), False
+
+ # rot_projectmat local rotation: the op mapping the representative atom of
+ # the sort onto this atom (set_projections.f via rot_projectmat).
+ rotloc_op = {}
+ for o in orbs:
+ iref = sum(info['mult'][:o['sort'] - 1]) + 1
+ rotloc_op[o['atom']] = next(op for op in ops
+ if op['perm'][iref - 1] == o['atom'])
+
+ # ---- projectors matn_rep per orbital (energy window for block A, full
+ # band range for the density matrix) ----
+ matn_reps = {}
+ matn_reps_full = {}
+ for o in orbs:
+ l = o['l']
+ transmat = transmats[(l, o['sort'])]
+ op = rotloc_op[o['atom']]
+ rot = dmat(l, op['a'], op['b'], op['g'], float(op['iprop']))
+ if mixing[(l, o['sort'])]:
+ matn_reps[o['atom']] = _build_matn_rep_mixing(
+ o, info, spins, windows, transmat, rot)
+ matn_reps_full[o['atom']] = _build_matn_rep_mixing(
+ o, info, spins, below_windows, transmat, rot)
+ else:
+ matn_reps[o['atom']] = _build_matn_rep(
+ o, info, spins, ns, windows, transmat, rot)
+ matn_reps_full[o['atom']] = _build_matn_rep(
+ o, info, spins, ns, below_windows, transmat, rot)
+
+ # ---- rotloc rotrep per orbital ----
+ rotloc_rotrep = {}
+ for o in orbs:
+ transmat = transmats[(o['l'], o['sort'])]
+ ref = rotloc_ref[o['sort'] - 1]
+ rotloc_rotrep[o['atom']] = _rotloc_rotrep_so(
+ o, ops, info, ref, transmat, mixing[(o['l'], o['sort'])])
+
+ # ---- density matrices: raw -> symmetrize -> rotdens ----
+ # Non-mixing sorts use the 4-block path; mixing sorts the single-block path.
+ nonmix_orbs = [o for o in orbs if not mixing[(o['l'], o['sort'])]]
+ densprint = {}
+
+ if nonmix_orbs:
+ srot_rotreps = {}
+ for isrt in range(1, info['nsort'] + 1):
+ ls = info['sorts'][isrt - 1]['included_ls']
+ if not ls or mixing[(ls[0], isrt)]:
+ continue
+ l = ls[0]
+ for isym in range(nsym):
+ srot_rotreps[(isrt, isym)] = _srot_rotrep_nonmixing(
+ ops[isym], l, transmats[(l, isrt)], ifSP, ifSO)
+ dens_raw = {o['atom']: _orbital_densmat_blocks(
+ o, info, spins, ns, below_windows, matn_reps_full)
+ for o in nonmix_orbs}
+ dens_sym = _symmetrize_densmat(nonmix_orbs, info, ops, nsym,
+ srot_rotreps, dens_raw, ns, ifSP, ifSO)
+ for o in nonmix_orbs:
+ rotrep_loc, timeinv = rotloc_rotrep[o['atom']]
+ densprint[o['atom']] = _rotdens_densmat(
+ o, dens_sym[o['atom']], rotrep_loc, timeinv)
+
+ for o in orbs:
+ l, sort = o['l'], o['sort']
+ if not mixing[(l, sort)]:
+ continue
+ rotreps = []
+ for isym in range(nsym):
+ ti = _op_timeinv(ops[isym], ifSO)
+ rotreps.append(
+ (mixing_rotrep(ops[isym], l, transmats[(l, sort)], ti), ti))
+ raw = _orbital_densmat_mixing(o, info, spins, below_windows,
+ matn_reps_full)
+ sym = _symmetrize_densmat_mixing(o, ops, nsym, rotreps, raw)
+ rotrep_loc, timeinv = rotloc_rotrep[o['atom']]
+ densprint[o['atom']] = _rotdens_densmat_mixing(sym, rotrep_loc, timeinv)
+
+ # ---- write ----
+ with open(case + '.parproj', 'w') as f:
+ for o in orbs:
+ n = spins[0]['nLO'][(o['l'], o['sort'])] + 2
+ f.write('%6d\n' % n)
+
+ for o in orbs:
+ l = o['l']
+ atom = o['atom']
+ n = spins[0]['nLO'][(l, o['sort'])] + 2
+ ismix = mixing[(l, o['sort'])]
+
+ # (A) Theta projector (outputqmc.f:935-973). Mixing writes the full
+ # 2(2l+1) block from is=1 only; non-mixing the two (2l+1) spin blocks.
+ for ik in range(nk):
+ incl, nb_bot, nb_top = windows[ik]
+ for ir in range(n):
+ if ismix:
+ P = matn_reps[atom][ik][:, :, ir]
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].real)
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, P[m, :].imag)
+ continue
+ for ispin in range(ns):
+ P = matn_reps[atom][(ik, ispin)][:, :, ir]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].real)
+ for ispin in range(ns):
+ P = matn_reps[atom][(ik, ispin)][:, :, ir]
+ for mi in range(2 * l + 1):
+ write_row(f, P[mi, :].imag)
+
+ # (B) density matrix, SP+SO 2*(2l+1) (outputqmc.f:1012-1066).
+ dp = densprint[atom]
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, dp[m, :].real)
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, dp[m, :].imag)
+
+ # (C) Rloc rotrep, SP+SO 2*(2l+1) (outputqmc.f:1130-1177).
+ rotrep_loc, timeinv = rotloc_rotrep[atom]
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, rotrep_loc[m, :].real)
+ for m in range(2 * (2 * l + 1)):
+ write_row(f, rotrep_loc[m, :].imag)
+ if ifSP:
+ f.write('%6d\n' % (1 if timeinv else 0))
diff --git a/python/triqs_dftkit/wien2k/sympar.py b/python/triqs_dftkit/wien2k/sympar.py
new file mode 100644
index 0000000..a74b3db
--- /dev/null
+++ b/python/triqs_dftkit/wien2k/sympar.py
@@ -0,0 +1,177 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+"""Pure-Python generation of the dmftproj included-shell symmetry file
+(case.sympar), replacing the corresponding output of the dmftproj Fortran
+executable (outputqmc.f, unit ousympar).
+
+case.sympar is the sibling of case.symqmc. Both write the same per-operation
+spinor symmetry matrix srot(isym)%rotrep(l,isrt)%mat (setsym.f), built
+identically for every shell as transmat . D(R)_lm . transmat^dag. They differ
+only in the shell list: symqmc covers the CORRELATED shells (l_inc==2), sympar
+covers ALL INCLUDED shells (l_inc in {1,2}), iterating orb(1:norb) instead of
+crorb(1:ncrorb). The orb ordering is (sort, l, atom) per dmftproj.f:357-387.
+
+The per-shell basis transmat is per sort: a complex shell uses the exact
+identity, a cubic shell uses the exact double-precision cubic-d harmonics (the
+same full-precision templates dmftproj reads after the precision fix), as
+ctqmcout does. Mixed within one file (Ca complex, Os cubic for CaOs2).
+
+sympar drops three things symqmc/ctqmcout carry: no orbital-description block
+at the top, no ifsplit/irep sub-block selection (always the full matrix), and
+no crorb%ifSOat/correp metadata. It is purely group-theoretic: header, perms,
+optional timeflag line (ifSP), the representation matrices, and (only when
+.not.ifSP) a paramagnetic time-reversal operator per orbital.
+
+This reference case (CaOs2) is SP+SO: indmftpr SO flag=1 sets ifSO, and
+ifSO=>ifSP, so it exercises the non-mixing 2*(2l+1)=10-wide block-diag spinor
+path and writes the timeflag line; the paramagnetic tail is absent.
+"""
+
+import os
+import numpy as np
+
+from ._dmftproj import (dmat, fmt, mixing_rotrep, read_dmftsym, read_fromfile,
+ read_indmftpr, reptrans, timeinv_orbital, tmat,
+ write_row)
+
+
+# --- included shells ---------------------------------------------------------
+
+def _included_shells(info):
+ """One entry per INCLUDED shell (l_inc in {1,2}), one per atom of its sort,
+ in orb order (sort, l, atom). Each shell carries l, basis name, a mixing
+ flag and the transform P: a spin-coupling fromfile basis gives the full
+ 2(2l+1) P (P spinrot P^dag matrix), otherwise the (2l+1) up/up block (the
+ single-precision-cast cubic harmonics dmftproj writes)."""
+ shells = []
+ for isort in range(info['nsort']):
+ s = info['sorts'][isort]
+ for l in s['included_ls']:
+ if s['basis'] == 'fromfile':
+ P, mixing = read_fromfile(s['sourcefile'], l)
+ else:
+ P, mixing = reptrans(s['basis'], l), False
+ for imu in range(1, info['mult'][isort] + 1):
+ atom = sum(info['mult'][:isort]) + imu
+ shells.append(dict(l=l, sort=isort + 1, atom=atom,
+ basis=s['basis'], P=P, mixing=mixing))
+ return shells
+
+
+# --- matrix construction (shared with symqmc) --------------------------------
+
+def _phase(op, ti):
+ a, c = op['a'], op['c']
+ return (c - a) if ti else (a + c) # (g-a) on magnetic ops, else (a+g)
+
+
+def _l0_matrix(op, ti):
+ e = np.exp(1j * _phase(op, ti) / 2)
+ return np.array([[e, 0], [0, np.conj(e)]], dtype=complex)
+
+
+def _nonmixing_matrix(op, shell, ti):
+ """Non-mixing SP+SO whole shell: the up/up block scaled by +-(a+g)/2,
+ block-diagonal over spin, with the orbital time-reversal operator on the
+ magnetic operations (setsym.f, outputqmc.f:1292-1339)."""
+ l, P = shell['l'], shell['P']
+ rotl = dmat(l, op['a'], op['b'], op['c'], np.linalg.det(op['krotm']))
+ if ti:
+ rotl = timeinv_orbital(l, rotl)
+ rotrep = P @ rotl @ np.conj(P.T)
+ e = np.exp(1j * _phase(op, ti) / 2)
+ d = 2 * l + 1
+ mat = np.zeros((2 * d, 2 * d), dtype=complex)
+ mat[:d, :d] = e * rotrep
+ mat[d:, d:] = np.conj(e) * rotrep
+ return mat
+
+
+def _shell_matrix(op, shell, ti):
+ l = shell['l']
+ if l == 0:
+ return _l0_matrix(op, ti)
+ if shell['mixing']:
+ return mixing_rotrep(op, l, shell['P'], bool(ti))
+ return _nonmixing_matrix(op, shell, ti)
+
+
+# --- output ------------------------------------------------------------------
+
+def _write_matrix(f, mat):
+ for m in range(mat.shape[0]):
+ write_row(f, mat[m, :].real)
+ for m in range(mat.shape[0]):
+ write_row(f, mat[m, :].imag)
+
+
+def write_sympar(case):
+ """Write .sympar from .dmftsym, .indmftpr, .struct.
+
+ Detects ifSP/ifSO from the presence of .almblm{up,dn} and the indmftpr
+ SO flag, exactly as oubwin/symqmc/ctqmcout. For SP+SO the file carries the
+ timeflag line and 2*(2l+1)-wide block-diag spinor matrices; the paramagnetic
+ time-reversal tail is written only when .not.ifSP."""
+ info = read_indmftpr(case + '.indmftpr')
+ shells, so = _included_shells(info), info['so']
+ nsym, ops = read_dmftsym(case + '.dmftsym')
+ natom = len(ops[0]['perm'])
+
+ ifSP = os.path.exists(case + '.almblmup') and os.path.exists(case + '.almblmdn')
+ ifSO = bool(so)
+ ifSP = ifSP or ifSO # ifSO => ifSP
+
+ timeflag = []
+ for op in ops:
+ det2 = (op['krotm'][0, 0] * op['krotm'][1, 1]
+ - op['krotm'][0, 1] * op['krotm'][1, 0])
+ timeflag.append(1 if (ifSO and det2 < 0.0) else 0)
+
+ with open(case + '.sympar', 'w') as f:
+ f.write('%6d %6d\n' % (nsym, natom))
+ for op in ops:
+ f.write(''.join('%6d ' % p for p in op['perm']) + '\n')
+ if ifSP:
+ f.write(''.join('%6d ' % t for t in timeflag) + '\n')
+
+ for isym, op in enumerate(ops):
+ for sh in shells:
+ l = sh['l']
+ ti = bool(timeflag[isym])
+ if l == 0 and not (ifSP and ifSO):
+ f.write(fmt(1.0) + '\n')
+ f.write(fmt(0.0) + '\n')
+ continue
+ _write_matrix(f, _shell_matrix(op, sh, ti))
+
+ if not ifSP:
+ for sh in shells:
+ l = sh['l']
+ if l == 0:
+ f.write(fmt(1.0) + '\n')
+ f.write(fmt(0.0) + '\n')
+ continue
+ tm = tmat(l)
+ op = sh['P'] @ tm @ sh['P'].T
+ ident = np.eye(2 * l + 1, dtype=complex)
+ time_op = op @ np.conj(ident)
+ _write_matrix(f, time_op)
diff --git a/python/triqs_dftkit/wien2k/symqmc.py b/python/triqs_dftkit/wien2k/symqmc.py
new file mode 100644
index 0000000..33e5785
--- /dev/null
+++ b/python/triqs_dftkit/wien2k/symqmc.py
@@ -0,0 +1,158 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+"""Pure-Python generation of the dmftproj correlated-shell symmetry file
+(case.symqmc), replacing the corresponding output of the dmftproj Fortran
+executable.
+
+Given the dmftproj symmetry input (case.dmftsym), the projector definition
+(case.indmftpr) and the structure (case.struct), this builds the spinor symmetry
+matrices and writes them in the case.symqmc format the converter reads. It
+reproduces the Fortran construction: the Wigner D matrix (dmat), the orbital
+time-reversal operator for the magnetic (SP+SO) operations, the basis transform
+to the chosen angular harmonics, and the spin-1/2 phase blocks.
+
+Covers all dmftproj spin-orbit cases:
+
+- non-mixing spin-diagonal bases (complex, cubic, and a fromfile basis whose
+ spin-up and spin-down blocks coincide): the spin-reduced up/up block scaled
+ by the +-(a+g)/2 phase, with the orbital time-reversal operator on the
+ magnetic operations;
+- mixing bases (a fromfile basis that couples spin, e.g. the |j, m_j> basis):
+ the full 2(2l+1) spinor representation P spinrot P^dag, with the spinor
+ time-reversal operator -i sigma_y (x) T applied to the magnetic operations;
+- l = 0 (s) shells: the 2x2 spin phase block.
+
+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 (Fortran
+set_ang_trans.f), so its case.symqmc carries a ~1e-7 error there; this generator
+is full double precision.
+"""
+
+import numpy as np
+
+from ._dmftproj import (dmat, mixing_rotrep, read_dmftsym, read_fromfile,
+ read_indmftpr, reptrans, timeinv_orbital)
+
+
+# --- correlated shells -------------------------------------------------------
+
+def _correlated_shells(info):
+ """One entry per correlated atom (l_inc==2), in sort order. Each shell
+ carries l, basis name, its transform matrix P = and a mixing flag
+ (True for a spin-coupling fromfile basis). symqmc builds its symmetry
+ matrices from the EXACT cubic harmonics (no single-precision cast)."""
+ shells = []
+ for isort in range(info['nsort']):
+ s = info['sorts'][isort]
+ basis = s['basis']
+ for l in s['correlated_ls']:
+ if basis == 'fromfile':
+ P, mixing = read_fromfile(s['sourcefile'], l)
+ else:
+ P, mixing = reptrans(basis, l, cast=False), False
+ for _ in range(info['mult'][isort]):
+ shells.append(dict(l=l, basis=basis, P=P, mixing=mixing))
+ return shells
+
+
+# The symqmc test reaches into these two names directly; keep them as the
+# module's parsing entry points.
+_read_dmftsym = read_dmftsym
+
+
+def _read_correlated_shells(indmftpr, struct):
+ info = read_indmftpr(indmftpr)
+ return _correlated_shells(info), info['so']
+
+
+def write_symqmc(case):
+ """Write .symqmc from .dmftsym, .indmftpr, .struct."""
+ nsym, ops = read_dmftsym(case + '.dmftsym')
+ info = read_indmftpr(case + '.indmftpr')
+ shells, so = _correlated_shells(info), info['so']
+ natom = len(ops[0]['perm'])
+
+ timeinv = []
+ for op in ops:
+ det2 = op['krotm'][0, 0] * op['krotm'][1, 1] - op['krotm'][0, 1] * op['krotm'][1, 0]
+ timeinv.append(1 if (so and det2 < 0.0) else 0)
+
+ with open(case + '.symqmc', 'w') as f:
+ f.write('%6d %6d\n' % (nsym, natom))
+ for op in ops:
+ f.write(''.join('%6d ' % p for p in op['perm']) + '\n')
+ if so:
+ f.write(''.join('%6d ' % t for t in timeinv) + '\n')
+ for isym, op in enumerate(ops):
+ for sh in shells:
+ f.write(_format_matrix(_shell_matrix(op, sh, timeinv[isym])))
+
+
+def _shell_matrix(op, shell, ti):
+ """Spinor symmetry matrix for one correlated shell under one operation."""
+ l = shell['l']
+ if l == 0:
+ return _l0_matrix(op, ti)
+ if shell['mixing']:
+ return _mixing_matrix(op, shell, ti)
+ return _nonmixing_matrix(op, shell, ti)
+
+
+def _phase(op, ti):
+ a, c = op['a'], op['c']
+ return (c - a) if ti else (a + c) # (g-a) on magnetic ops, else (a+g)
+
+
+def _l0_matrix(op, ti):
+ """s shell: 2x2 spin phase block diag(e, conj(e)) (outputqmc.f l==0)."""
+ e = np.exp(1j * _phase(op, ti) / 2)
+ return np.array([[e, 0], [0, np.conj(e)]], dtype=complex)
+
+
+def _nonmixing_matrix(op, shell, ti):
+ """Spin-diagonal basis: the up/up block scaled by +-(a+g)/2, with the
+ orbital time-reversal operator on the magnetic operations."""
+ l, P = shell['l'], shell['P']
+ rotl = dmat(l, op['a'], op['b'], op['c'], np.linalg.det(op['krotm']))
+ if ti:
+ rotl = timeinv_orbital(l, rotl)
+ rotrep = P @ rotl @ np.conj(P.T)
+ e = np.exp(1j * _phase(op, ti) / 2)
+ d = 2 * l + 1
+ mat = np.zeros((2 * d, 2 * d), dtype=complex)
+ mat[:d, :d] = e * rotrep
+ mat[d:, d:] = np.conj(e) * rotrep
+ return mat
+
+
+def _mixing_matrix(op, shell, ti):
+ """Spin-coupling basis: full 2(2l+1) spinor representation (setsym.f,
+ timeinv.f), shared with sympar via _dmftproj.mixing_rotrep."""
+ return mixing_rotrep(op, shell['l'], shell['P'], bool(ti))
+
+
+def _format_matrix(mat):
+ out = []
+ for part in (mat.real, mat.imag):
+ for row in part:
+ out.append(''.join(' %.14E' % x for x in row) + '\n')
+ return ''.join(out)
diff --git a/test/python/wien2k/CMakeLists.txt b/test/python/wien2k/CMakeLists.txt
index d9968e3..23ac38c 100644
--- a/test/python/wien2k/CMakeLists.txt
+++ b/test/python/wien2k/CMakeLists.txt
@@ -11,3 +11,113 @@ add_test(NAME Py_wien2k_convert
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_property(TEST Py_wien2k_convert APPEND PROPERTY ENVIRONMENT
PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Spin-orbit + spin-polarized converter test (CaOs2: cubic, two equivalent
+# correlated atoms, 8 time-reversal symmetry operations).
+file(COPY CaOs2.ctqmcout CaOs2.symqmc CaOs2.struct CaOs2.outputs
+ CaOs2.oubwinup CaOs2.oubwindn wien2k_soc_convert.ref.h5
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+add_test(NAME Py_wien2k_soc_convert
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_soc_convert.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_soc_convert APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Pure-Python case.symqmc generator vs the dmftproj Fortran output (reuses the
+# SOC reference h5; adds only the small text inputs the generator reads).
+file(COPY CaOs2.dmftsym CaOs2.indmftpr DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+add_test(NAME Py_wien2k_symqmc_python
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_symqmc_python.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_symqmc_python APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Generator on the two paths the cubic test does not reach: the spin-mixing
+# fromfile (|j,m_j>) basis and an l=0 shell. Reuses CaOs2.dmftsym/struct; the
+# references are the dmftproj matrix data (single precision, ~26 kB total).
+file(COPY CaOs2_jbasis.indmftpr CaOs2_l0.indmftpr jbasis_d.dat
+ wien2k_symqmc_jbasis.ref.npy wien2k_symqmc_l0.ref.npy
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+add_test(NAME Py_wien2k_symqmc_mixing
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_symqmc_mixing.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_symqmc_mixing APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Pure-Python case.oubwin band-window generator vs the dmftproj Fortran output.
+# Reuses the committed CaOs2.oubwin{up,dn} references and the gzipped CaOs2
+# almblm inputs (shared with the ctqmcout test). CaOs2_mode1 adds the band-index
+# projection path (proj_mode 1, window 60..76) against its own dmftproj refs.
+file(COPY CaOs2.almblmup.gz CaOs2.almblmdn.gz
+ CaOs2_mode1.indmftpr CaOs2_mode1.oubwinup CaOs2_mode1.oubwindn
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+add_test(NAME Py_wien2k_oubwin_python
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_oubwin_python.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_oubwin_python APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Wide-window fromfile (|j, m_j>) inputs and references shared by the ctqmcout,
+# sympar and parproj generator tests (the spin-mixing dft_tools #148 path).
+file(COPY CaOs2_jbasis_full.indmftpr CaOs2_jbasis_full.ctqmcout.gz
+ CaOs2_jbasis_full.sympar.gz CaOs2_jbasis_full.parproj.gz
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+# Pure-Python case.ctqmcout correlated-shell projector generator vs the dmftproj
+# Fortran output. Reuses CaOs2.ctqmcout / indmftpr / struct / dmftsym and the
+# gzipped almblm; floats compared at 1e-11 (full-rank wide window). The
+# CaOs2_mode{1,2}_full fixtures exercise the band-index projection modes
+# (proj_mode 1 scan, proj_mode 2 explicit indices), both resolving to bands
+# 43..92, against their own precision-fixed dmftproj references.
+file(COPY CaOs2_mode1_full.indmftpr CaOs2_mode1_full.ctqmcout.gz
+ CaOs2_mode2_full.indmftpr CaOs2_mode2_full.ctqmcout.gz
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+add_test(NAME Py_wien2k_ctqmcout_python
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_ctqmcout_python.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_ctqmcout_python APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Pure-Python case.sympar partial-shell symmetry generator vs the dmftproj
+# Fortran output. The CaOs2_partial fixture adds an uncorrelated Ca d-shell to
+# the correlated Os d-shells; inputs reuse the CaOs2 struct/dmftsym/almblm.
+file(COPY CaOs2_partial.indmftpr CaOs2_partial.sympar.gz
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+add_test(NAME Py_wien2k_sympar_python
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_sympar_python.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_sympar_python APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Pure-Python case.parproj partial projectors + density matrices vs the dmftproj
+# Fortran output. Same CaOs2_partial fixture as the sympar test.
+file(COPY CaOs2_partial.parproj.gz DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+add_test(NAME Py_wien2k_parproj_python
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_parproj_python.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_parproj_python APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+
+# Unit tests for the shared dmftproj machinery (_dmftproj), the module the five
+# case.* generators are built on. Reuses CaOs2 / CaOs2_partial indmftpr + dmftsym.
+add_test(NAME Py_wien2k_dmftproj_common
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_dmftproj_common_python.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_dmftproj_common APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
+# Pure-Python case.outband band-structure projector generator (the -band path
+# that feeds convert_bands_input) vs the precision-fixed dmftproj -band output.
+# The CaOs2_band fixture is the spin-mixing fromfile (|j, m_j>) Os d shell on a
+# 4-point k-path; the band almblm carries a single representative k-point and the
+# Fermi energy comes from the last line of the band indmftpr. Reuses
+# CaOs2.struct/dmftsym and jbasis_d.dat; floats compared at 1e-11 (full-rank
+# wide window).
+file(COPY CaOs2_band.indmftpr CaOs2_band.klist_band
+ CaOs2_band.almblmup.gz CaOs2_band.almblmdn.gz CaOs2_band.outband.gz
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+add_test(NAME Py_wien2k_outband_python
+ COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wien2k_outband_python.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+set_property(TEST Py_wien2k_outband_python APPEND PROPERTY ENVIRONMENT
+ PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD})
diff --git a/test/python/wien2k/CaOs2.almblmdn.gz b/test/python/wien2k/CaOs2.almblmdn.gz
new file mode 100644
index 0000000..b8fabd6
Binary files /dev/null and b/test/python/wien2k/CaOs2.almblmdn.gz differ
diff --git a/test/python/wien2k/CaOs2.almblmup.gz b/test/python/wien2k/CaOs2.almblmup.gz
new file mode 100644
index 0000000..b8a7d3d
Binary files /dev/null and b/test/python/wien2k/CaOs2.almblmup.gz differ
diff --git a/test/python/wien2k/CaOs2.ctqmcout b/test/python/wien2k/CaOs2.ctqmcout
new file mode 100644
index 0000000..f0f6b70
--- /dev/null
+++ b/test/python/wien2k/CaOs2.ctqmcout
@@ -0,0 +1,134 @@
+13.605698
+ 1
+ 1
+ 1
+ 59.000000000000000
+ 65.999999999899998
+ 2
+ 2 2 2 10
+ 3 2 2 10
+ 2
+ 2 2 2 10 1 1
+ 3 2 2 10 1 1
+ -0.70710678118655124 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.70710678118655135 1.4765966227514582E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.4765966227514582E-014 0.70710678118655135 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -7.4384942649885488E-015 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654391 -7.4384942649885488E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118655135 -1.4765966227514582E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4765966227514582E-014 0.70710678118655135 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -7.4384942649885488E-015 0.70710678118654391
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654391 -7.4384942649885488E-015
+ 0.70710678118654380 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654391 1.4765966227514582E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.4765966227514582E-014 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 7.3829831137572910E-015 -0.70710678118655124 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 7.3829831137572910E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654391 1.4765966227514582E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.4765966227514582E-014 0.70710678118654391 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -7.3829831137572910E-015 -0.70710678118655124
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 -7.3829831137572910E-015
+ 0
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0
+ 1 10
+ 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.70710678118654757 0.0000000000000000 -0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.70710678118654757 0.0000000000000000 0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654757
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654757 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654757
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654757 0.0000000000000000 -0.70710678118654757 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654757 0.0000000000000000 0.70710678118654757 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 17
+ -1.6364737630493277E-009 -8.0888580725012358E-009 -1.5073029468734900E-009 3.9125565708416238E-009 -0.22604523778910127 -8.5019869066658420E-010 -1.4187713677944467E-009 -1.7703175882762738E-006 0.63346496101916416 4.5676245507321725E-009 1.5871259379114100E-010 6.3028484878877605E-009 -9.9996340688402678E-010 -2.8646318384193197E-008 7.9677698266477674E-009 -1.1581990243364088E-008 -0.19390347890876408
+ 2.7875320727334552E-002 3.8009442999480978E-009 -3.9500288317967722E-009 -1.1788397060873433E-009 -4.5514785274318637E-010 2.9663661576540072E-009 -8.0694023614837972E-010 -5.1944669240485263E-002 7.2541333040723273E-007 7.4583849446314001E-009 4.2091825644866673E-009 1.3239830131143230E-008 2.3620513131834740E-010 2.8049672864679444E-008 -9.5249947599798597E-009 -1.5752412382940841E-009 -6.7496732202006374E-009
+ 0.19110210807023098 -8.3316935337577537E-008 -3.5104925200946670E-008 5.3430576914173581E-009 1.2722675775929680E-008 -1.2949630709638371E-008 -4.5194740638146307E-010 -3.4444008106951406E-003 4.9209227645008261E-008 -1.9113364262590849E-009 -1.1461163163064751E-009 -1.5288821845741855E-008 1.2727575557688944E-008 -3.1162266842011540E-007 7.4961918091694824E-008 -6.6492784117367224E-008 6.8759250839698748E-008
+ -4.9388629252584230E-009 0.29092631454868900 -1.5885931072284031E-007 -0.26186273671481425 8.0539611164703330E-008 0.13228893266070882 -6.1805276250495673E-008 -1.1079887676563146E-008 5.3173233879045139E-010 -2.3840147529573242E-002 -1.0608106442841662E-002 0.14437186320991247 9.7191033993625750E-008 -4.7713932481133646E-003 5.1171312951558291E-007 2.1964099794077409E-002 3.2400036566811004E-007
+ 1.8592746163798155E-009 0.29092646296782387 4.8441700280963662E-008 0.26186268702601345 -9.9842993354526051E-009 -0.13228898591171678 1.8184892086969941E-008 3.3517932105639359E-009 -4.2586751776201810E-010 -2.3840148278003584E-002 1.0608102453760544E-002 -0.14437181732446680 -2.8926941569162286E-008 -4.7707401468565225E-003 -1.4504517662227057E-007 -2.1963827329681194E-002 -4.0589252956389349E-008
+ 1.3006696899978029E-009 0.18297860272758862 6.6105447730274154E-009 2.6699977239241286E-009 -7.2860931617780095E-009 2.6706936640113406E-009 -2.7420975896170643E-009 -6.3845930993881882E-009 4.6437991070965278E-009 -0.44807657053580940 -5.6321642543075172E-009 -3.5831648061960114E-009 -8.7704023764065650E-009 1.5170843870321297E-002 -1.8386433216578399E-008 -1.7861132437565136E-008 -2.1565000285449407E-008
+ 2.3893728172146132E-011 -5.8621641607927665E-009 -4.7384080530992929E-009 0.16250576882794018 2.2024603974671464E-010 0.11724038428184635 -1.9094457224568921E-008 -2.8002757235361795E-009 1.2563600890478659E-009 -5.3842324955590105E-009 0.35421161006985175 8.7769738380358300E-002 -1.2413796631434059E-008 -2.5522095869749546E-008 2.9450812436724036E-008 0.14251485370955291 5.4371433324732525E-009
+ -1.5236083225149538E-009 -1.9345731894701970E-008 -1.8405071672535539E-008 -0.15563645491315550 6.7335927729939222E-009 -0.49211255646386814 1.0042068649617921E-008 -1.7406941738124803E-010 1.3096659286419698E-009 2.9637998217792738E-009 -2.4850483673703155E-002 -0.14074232206643406 8.8573385670315238E-009 -2.7047485419311018E-008 4.2695771179307555E-008 5.9909611100427487E-002 2.6235520044645383E-008
+ -0.40614676845385977 -5.5326408415975868E-008 -9.8551064905514207E-009 8.9405754409816131E-010 0.35500916387514836 -1.4850464068693635E-008 -1.6981627411048823E-008 -2.5927854792783937E-003 -4.4846238299319691E-002 -2.3610729165662912E-009 -6.1981372798689336E-010 -1.3308623144893715E-008 5.3517099407272490E-009 -2.3470650786659528E-007 7.7647948907330766E-008 -2.7547831649394795E-008 -6.1732102405569381E-002
+ -0.40614673849569044 1.7227729145971521E-008 6.1509173627593437E-009 2.4681191141917476E-009 -0.35500916980606606 1.4130259422996842E-008 3.9662489693809647E-009 -2.5930378594641442E-003 4.4846312179011541E-002 2.0951472180287700E-009 5.4256729990038056E-010 4.9600369929685963E-009 9.2563740408443708E-009 8.7502036481521710E-008 -3.8776236724741492E-008 -4.5556174024477548E-009 6.1732136084814260E-002
+ -2.9375681845920077E-010 -5.4996044474491380E-009 -8.9874871604376554E-010 -1.7286616428843901E-009 -0.18214494389185584 -4.9425806497296206E-009 1.3341248710820386E-009 -8.0222427225665845E-008 -0.30620242356549132 4.3010703135895242E-010 9.9675407716276727E-010 -1.1708638180509657E-009 4.5806177761915576E-011 2.2972194100486450E-009 -1.7341048936631688E-009 -6.4077302744847920E-010 -0.61492130856835681
+ 1.6762973200700901E-002 8.3757111802912033E-009 -0.27082885938954970 7.1929776703982158E-009 1.7747191133215382E-009 -9.2059275821354266E-009 -7.3945719574441751E-002 0.70189401345399727 1.6172347103871265E-006 -1.2000664471106977E-009 -1.6061616339665583E-009 2.5313978520830045E-009 0.13535439378273573 6.3507988755650439E-009 0.63471485456001864 6.8403657486643410E-009 -1.8631379770672733E-009
+ 0.11492028157002675 -6.6924049847962291E-008 -0.62205403742112542 -9.0731184993978598E-009 -2.8675878444658382E-008 -2.6356276320418915E-009 0.15344525864684783 4.6541890385691724E-002 1.1022809036555606E-007 -1.8294231895223204E-009 -9.8800668052124091E-010 -1.8503330702008538E-008 -0.22237925390573565 -1.9729670628751630E-009 -0.20012695331359981 1.5299584998451109E-008 6.8635818381152023E-009
+ -2.5643977191075550E-009 -0.35224938002421180 5.9139080579439503E-010 -0.32529737378209117 -9.3811329532618534E-008 7.8572519339873789E-002 -3.7756390079974734E-009 -8.2440501208695438E-009 7.9284502728282035E-010 -2.8967098079511151E-002 1.8246437950490392E-002 -0.14705803567260523 8.1448394255010481E-010 0.20312432006570522 1.3795138452952988E-008 -9.4782925351665187E-002 -9.3789054526339713E-008
+ -5.8830401784356914E-011 -0.35224924006447123 -2.9094474070747572E-009 0.32529741646115973 1.6818904155830553E-008 -7.8572484062731804E-002 1.0401410550747200E-009 1.1157780017376459E-009 -9.8806053873539545E-010 -2.8967090476840658E-002 -1.8246440377539450E-002 0.14705802609409765 4.8120744728587045E-009 0.20312435185006003 5.1889203035151739E-009 9.4783003107920510E-002 2.0617133292183437E-008
+ -3.6059486385991273E-011 -0.22154767181960641 -4.3666837584732465E-009 -2.3700925023919114E-009 5.8745202249981382E-009 -1.8907495839802861E-009 -2.6460905332983103E-009 3.3991009495120138E-009 1.6478849788282492E-009 -0.54443778022841149 -8.3626721440915476E-010 -3.1722110562833976E-010 -2.5855588148992714E-009 -0.64591431417268008 5.3259903518536913E-009 -5.8965798836662491E-009 1.0650557018015385E-009
+ -1.2150427926714141E-010 -4.0118973955998543E-009 2.3638013507327320E-009 0.20187185934300889 2.5429245229356206E-009 6.9634421363991228E-002 -1.5241739967259630E-009 -3.9392436219525426E-009 3.3412829840168361E-010 1.6930876672513725E-009 -0.60926070783466080 -8.9402795740053290E-002 -4.3117759119384675E-009 2.8057260935437424E-009 1.0264872708201556E-008 -0.61501096964091095 3.2484065827446341E-009
+ -1.1172313740963202E-009 3.9429180505528409E-009 -3.7697853426112111E-009 -0.19333851645543204 -3.2436893733587295E-009 -0.29228817177237698 -2.6111437954460776E-009 1.0350119399947264E-009 -4.7388330047844555E-010 -1.3296972736845110E-010 4.2744002940343459E-002 0.14336099426169066 7.4418616796492475E-010 4.2116653256506721E-008 1.8519824222048552E-008 -0.25853516965252632 1.0375206847991757E-008
+ -0.24423852360876522 -5.1646580628083888E-008 -0.12760982409050936 -1.0659668655112989E-008 0.28606273266739701 -1.0454024862025998E-008 -0.41400167750017902 3.5036324071657216E-002 2.1677742108702644E-002 -1.6010427777144940E-009 -1.7614192765886939E-009 -2.2476683811204583E-008 0.20257530446460467 -1.7254604170860407E-008 -0.14588209601226013 3.2651605199294944E-008 -0.19576969760255078
+ -0.24423850300244257 1.9638041414349023E-008 -0.12760981741350305 5.9383972880259453E-009 -0.28606273790119507 -1.0504878225658375E-008 -0.41400170183241886 3.5036312238196220E-002 -2.1677579123179261E-002 -8.4932099343800901E-010 6.8693395947932463E-010 2.1763149811873753E-009 0.20257529433929861 1.6771639879642121E-008 -0.14588209000315056 -3.0328483776047447E-008 0.19576970510776853
+ 1.5742593420368659E-009 2.7663536665404652E-009 1.8502466755381737E-009 4.1545534087880997E-009 -0.22604524330183060 3.3561777604142808E-009 1.4747450787935593E-009 1.7703142767497045E-006 -0.63346496101679717 -4.5584756646660029E-009 -1.4133293060279910E-010 9.0367639538542631E-009 -4.3079617306589231E-010 1.6823160391632297E-008 -7.9983581606319914E-009 -7.9660645582934864E-009 -0.19390348916968214
+ -2.7875320516982997E-002 -9.8504411695241786E-009 -7.8371958516376568E-009 1.5129406281486946E-009 1.1316237388957151E-009 5.7953332962810498E-010 -1.2226862273360659E-009 5.1944669280297999E-002 -7.2536230720706391E-007 -7.4588525599505437E-009 -4.2166535087245802E-009 1.0869592216248509E-008 2.7808804725547166E-009 -2.8179038275099079E-008 4.2071397899902890E-009 -1.3387478020219511E-008 6.1286595168445476E-009
+ -0.19110211207511088 7.3619775981124216E-008 2.3559333247811542E-008 -1.4784480513246270E-008 -1.1115226766187535E-008 1.1637569535744193E-008 -1.7722160752721371E-009 3.4444003936094959E-003 -5.0066090057178471E-008 2.0712533037166276E-009 1.2138071671031628E-009 1.2265849997915118E-008 -1.3412063354801199E-008 3.1502262751540708E-007 -7.4099555210789280E-008 6.6748946037724849E-008 -7.0377762743457329E-008
+ 5.8867673959312925E-009 0.29092654611302515 1.6043118238196619E-007 -0.26186264729115688 -7.7583474149628449E-008 0.13228903780293455 4.5828382299185551E-008 1.1189847324048000E-008 -6.4161757077216673E-010 2.3840146743883548E-002 1.0608106405228556E-002 0.14437178223917738 -9.2510279707870297E-008 -4.7703121331356306E-003 -5.0710315484458914E-007 2.1963521355808605E-002 -3.2388085008271195E-007
+ -2.0611763464110732E-009 0.29092640195832109 -4.1780328981358853E-008 0.26186269300196408 6.5145009521278771E-009 -0.13228898457668678 -1.2381655699153787E-008 -3.3817522539523969E-009 4.3891898722244074E-010 2.3840148525995981E-002 -1.0608102412027309E-002 -0.14437182636010429 2.6471724874926621E-008 -4.7709686247501808E-003 1.4546065062816202E-007 -2.1963788072849814E-002 4.0855522464531085E-008
+ -1.4119917990111533E-009 0.18297859349654697 -4.5962238588814453E-009 -1.9925930663407642E-009 2.6096051413764505E-010 -2.9600964876233509E-009 -6.9093627752431666E-009 6.4351647809770088E-009 -4.6391106869871014E-009 0.44807657052396277 5.5933940202089487E-009 1.7132905980721300E-009 -1.3621071854369413E-009 1.5170798116606250E-002 2.0608663120491609E-008 1.0989432491835354E-008 8.5874429342512463E-009
+ -3.2996234151727865E-011 5.5628681758493206E-009 9.5140043389568367E-009 0.16250577105738925 -6.0312180647196198E-009 0.11724038769308767 -1.4823777762351086E-008 2.8065403272227263E-009 -1.2684406390683123E-009 5.3780197928348473E-009 -0.35421161004201923 8.7769737148320204E-002 -2.1539468729564028E-008 1.7660724718389309E-008 -1.5884563977142187E-008 0.14251484359654584 -2.0085620692105112E-008
+ 1.8384234868455688E-009 1.8514900688217580E-008 1.5655499847025844E-008 -0.15563646800806255 -8.4316077074118275E-009 -0.49211254887555472 1.3531033430693936E-008 2.2355024467665528E-010 -1.2918408467519571E-009 -2.8976718084908578E-009 2.4850483899222165E-002 -0.14074230046277000 -1.6751496664189300E-008 2.4400923412522542E-008 -4.3163273919020436E-008 5.9909731753925548E-002 -2.5735806120589130E-008
+ 0.40614676611073364 5.7318190577374422E-008 2.2076147725745869E-008 -2.4974135851905523E-009 0.35500913394195077 2.0562514399998390E-008 2.7069392921030576E-009 2.5927862223980719E-003 4.4846238500052510E-002 2.5265093538242557E-009 5.0706685303566229E-010 1.2727421868984430E-008 5.3890158877803532E-009 2.3356505406810666E-007 -7.1822962672043274E-008 2.9319634161002884E-008 -6.1732208180109584E-002
+ 0.40614673796945883 -2.1593234460881796E-008 -8.8401390543305508E-009 -1.1082150801032474E-009 -0.35500912348431773 -1.0290715571286910E-008 -1.5195442659818969E-008 2.5930377658901055E-003 -4.4846311604862694E-002 -2.1221874090835210E-009 -5.0536414900050731E-010 -7.8231853321640755E-009 -2.1554415376099141E-009 -8.8495970539629362E-008 4.0414586893298193E-008 8.4488285488055934E-010 6.1732175713997348E-002
+ 5.0992271142369417E-010 4.6599282142188231E-009 9.3446623396195022E-010 9.7327162801908101E-010 -0.18214494212216939 -5.3573107428721319E-009 -2.9504519753454791E-010 8.0257447634623298E-008 0.30620242351428700 -4.2249656780723851E-010 -9.9778349719933987E-010 2.7309658904653166E-009 -1.9695127432732024E-009 7.1486199140908220E-009 -4.0683123379810595E-010 -9.4435123679549703E-009 -0.61492129564244624
+ -1.6762973199701860E-002 -2.9426969349565142E-009 -0.27082885939648832 3.8782576739255932E-009 -1.7765090857923100E-009 -1.0124186916709490E-008 -7.3945720138237386E-002 -0.70189401344110103 -1.6172720797124096E-006 1.1705823355188979E-009 1.5966969712953837E-009 -9.9775396154796125E-010 0.13535439281086128 5.8443843662636267E-009 0.63471485619332590 1.0269302867014800E-008 -8.8157104489323579E-010
+ -0.11492027822477965 6.7694678028205186E-008 -0.62205403359225053 2.2342683926840195E-008 1.8699330907773905E-008 8.1676527370455741E-009 0.15344526855196647 -4.6541890491933968E-002 -1.0971233021460377E-007 1.7229510241713816E-009 1.0500466741275098E-009 2.3254591277694101E-008 -0.22237924342687854 3.5100679340660536E-009 -0.20012697063281365 -2.3048694160675769E-008 -2.0471419143459975E-009
+ 3.5271622814834441E-009 -0.35224914838542887 -3.5225121935369326E-009 -0.32529746639083307 8.8551442100024941E-008 7.8572427791505556E-002 6.4385694426295145E-009 8.0381310779977693E-009 -9.9751663228796189E-010 2.8967097721370329E-002 -1.8246438428526985E-002 -0.14705802375342400 -7.0275330142045251E-009 0.20312441859369038 -6.7548424524306092E-009 -9.4783079473931664E-002 9.5614138269067609E-008
+ 1.3952373313671362E-010 -0.35224927618413732 1.4455955989094554E-010 0.32529741430357523 -1.3276187178202917E-008 -7.8572464395327335E-002 5.4904801009519814E-009 -1.1001610704872115E-009 1.0137971615894012E-009 2.8967090634768711E-002 1.8246440613480460E-002 0.14705803262703129 6.6806076064579093E-009 0.20312438512626860 -1.1491059936198912E-008 9.4783003797673682E-002 -1.9574697961566100E-008
+ 1.9361544634676521E-011 -0.22154768180279524 -4.4635028219269060E-009 1.8884562931050695E-009 -2.6504861088999919E-009 2.5373722478085742E-009 -3.3036546558675735E-009 -3.3931586267152647E-009 -1.6404859039496945E-009 0.54443778027765288 8.1119964826220452E-010 -9.3895268045326840E-010 -2.4061645547839061E-009 -0.64591432122296211 7.3282704732187262E-009 2.2826705161791458E-009 -6.8361902293349349E-009
+ 1.5099987235009866E-010 3.9085791329904687E-009 2.7197902189263675E-009 0.20187185973947180 9.5584212911557755E-009 6.9634421132944838E-002 -4.9396034311808418E-010 3.9530186904019645E-009 -3.3464319924958049E-010 -1.6703983974089809E-009 0.60926070784040942 -8.9402797225288710E-002 -4.4211580837835744E-009 -1.1430896889116693E-009 8.2534217955115856E-009 -0.61501097703679075 8.6409543543525274E-009
+ 1.2692370470051071E-009 -3.3632447914108679E-009 2.7817690031500991E-009 -0.19333847723231190 6.0780715477958229E-009 -0.29228812716847979 9.0572109757205474E-009 -1.0543292728153569E-009 4.5881300520309981E-010 1.7833293749406573E-010 -4.2744003049157930E-002 0.14336097652304478 3.6376140861799886E-009 -4.1440144181854518E-008 -8.6513383736921835E-009 -0.25853520729997059 -1.0450496688074811E-008
+ 0.24423852348107675 5.4303121395571919E-008 -0.12760981439406968 1.3545050409211572E-008 0.28606274835538148 -1.1009534975559398E-008 -0.41400169364682754 -3.5036324314588418E-002 -2.1677741702875800E-002 1.7643542180073014E-009 1.6819076556279465E-009 1.4102545031613096E-008 0.20257529503844063 1.8392694761220754E-008 -0.14588209020097798 -3.8684821490684642E-008 -0.19576960619363615
+ 0.24423849905495446 -2.3160394495418732E-008 -0.12760983883351798 -5.4856564602087157E-009 -0.28606274404624205 -4.8315143197851219E-009 -0.41400168683919236 -3.5036312368052311E-002 2.1677579131180954E-002 8.5965184683648331E-010 -6.4978366769731779E-010 -1.3605097637932516E-008 0.20257531280783131 -1.6396565986282201E-008 -0.14588210560397749 2.3135718924320573E-008 0.19576960103086796
+ 1.0000000000000000
+ -0.14719728634143203
+ -6.2687483552602008E-002
+ -5.6791699157407005E-002
+ -4.6939855280641041E-002
+ -2.3731054975468013E-002
+ -5.9289132889430718E-003
+ 0.0000000000000000
+ 7.0047796896619996E-002
+ 7.0116347318387007E-002
+ 0.10027100453936799
+ 0.10379476904357798
+ 0.14516977295802591
+ 0.15348172411197192
+ 0.20481842207514100
+ 0.21209028506752292
+ 0.21406914507310593
+ 0.22096001200155491
diff --git a/test/python/wien2k/CaOs2.dmftsym b/test/python/wien2k/CaOs2.dmftsym
new file mode 100644
index 0000000..aa6f374
--- /dev/null
+++ b/test/python/wien2k/CaOs2.dmftsym
@@ -0,0 +1,124 @@
+ 16
+ 1 3 2
+ 1 2 3
+ 1 2 3
+ 1 3 2
+ 1 2 3
+ 1 3 2
+ 1 3 2
+ 1 2 3
+ 1 2 3
+ 1 3 2
+ 1 3 2
+ 1 2 3
+ 1 3 2
+ 1 2 3
+ 1 2 3
+ 1 3 2
+
+Sym. op. : 1
+ 0.0 0.0 0.0 -1 - euler angles: a,b,c; iprop
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 2
+ 270.0 0.0 0.0 -1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 3
+ 90.0 0.0 0.0 -1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 4
+ 180.0 0.0 0.0 -1 - euler angles: a,b,c; iprop
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 5
+ 180.0 0.0 0.0 1 - euler angles: a,b,c; iprop
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 6
+ 90.0 0.0 0.0 1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 7
+ 270.0 0.0 0.0 1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 8
+ 0.0 0.0 0.0 1 - euler angles: a,b,c; iprop
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+
+Sym. op. : 9
+ 0.0 180.0 180.0 1 - euler angles: a,b,c; iprop
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+
+Sym. op. : 10
+ 0.0 180.0 90.0 1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+
+Sym. op. : 11
+ 0.0 180.0 270.0 1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+
+Sym. op. : 12
+ 0.0 180.0 0.0 1 - euler angles: a,b,c; iprop
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+
+Sym. op. : 13
+ 0.0 180.0 0.0 -1 - euler angles: a,b,c; iprop
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+
+Sym. op. : 14
+ 0.0 180.0 270.0 -1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ -1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+
+Sym. op. : 15
+ 0.0 180.0 90.0 -1 - euler angles: a,b,c; iprop
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+
+Sym. op. : 16
+ 0.0 180.0 180.0 -1 - euler angles: a,b,c; iprop
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 -1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 -1.00000000000000
+ Global->local coordinates rotation matrices
+ 1
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+ 0.0 0.0 0.0 1 - euler angles: a,b,c; iprop
+ 2
+ 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000
+ 0.000000000000000E+000 1.00000000000000 0.000000000000000E+000
+ 0.000000000000000E+000 0.000000000000000E+000 1.00000000000000
+ 0.0 0.0 0.0 1 - euler angles: a,b,c; iprop
diff --git a/test/python/wien2k/CaOs2.indmftpr b/test/python/wien2k/CaOs2.indmftpr
new file mode 100644
index 0000000..abca02f
--- /dev/null
+++ b/test/python/wien2k/CaOs2.indmftpr
@@ -0,0 +1,11 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+cubic
+0 0 2 0
+0 0 0 0
+1
+-0.15 0.30
diff --git a/test/python/wien2k/CaOs2.oubwindn b/test/python/wien2k/CaOs2.oubwindn
new file mode 100644
index 0000000..778773d
--- /dev/null
+++ b/test/python/wien2k/CaOs2.oubwindn
@@ -0,0 +1,5 @@
+ 1
+ 1
+ 1
+ 60 76
+ 1.0000000000000000
diff --git a/test/python/wien2k/CaOs2.oubwinup b/test/python/wien2k/CaOs2.oubwinup
new file mode 100644
index 0000000..778773d
--- /dev/null
+++ b/test/python/wien2k/CaOs2.oubwinup
@@ -0,0 +1,5 @@
+ 1
+ 1
+ 1
+ 60 76
+ 1.0000000000000000
diff --git a/test/python/wien2k/CaOs2.outputs b/test/python/wien2k/CaOs2.outputs
new file mode 100644
index 0000000..e97a1f8
--- /dev/null
+++ b/test/python/wien2k/CaOs2.outputs
@@ -0,0 +1,562 @@
+CaOs2 fluorite test s-o calc. M|| 0.00 0.00 1.00
+ Bravais Matrix:
+ 0.00000 0.50000 0.50000
+ 0.50000 0.00000 0.50000
+ 0.50000 0.50000 0.00000
+ ATOMIC POSITIONS:
+ 1 0.00000000 0.00000000 0.00000000
+ 2 3.00000000 3.00000000 3.00000000
+ 3 9.00000000 9.00000000 9.00000000
+ PGLSYM: THE CRYSTAL SYSTEM IS CUBIC
+ PGLSYM: ORDER OF LATTICE POINT GROUP (NO BASE) = 48
+ PGBSYM: ORDER OF LATTICE SPACE GROUP (WITH BASE) = 48
+ PGBSYM: SPACE GROUP IS SYMMORPHIC
+ PGBSYM: SPACE GROUP CONTAINS INVERSION
+ Symmetry operation 1
+ 1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 1 in struct file
+ Symmetry operation 2
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 2 in struct file
+ Symmetry operation 3
+ -1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 3 in struct file
+ Symmetry operation 4
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 4 in struct file
+ Symmetry operation 5
+ 0.00000 -1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 5 in struct file
+ Symmetry operation 6
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 6 in struct file
+ Symmetry operation 7
+ 0.00000 1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 7 in struct file
+ Symmetry operation 8
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 8 in struct file
+ Symmetry operation 9
+ 0.00000 0.00000 -1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 9 in struct file
+ Symmetry operation 10
+ 0.00000 0.00000 -1.00000
+ 0.00000 -1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 10 in struct file
+ Symmetry operation 11
+ 0.00000 0.00000 1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 11 in struct file
+ Symmetry operation 12
+ 0.00000 0.00000 1.00000
+ 0.00000 -1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 12 in struct file
+ Symmetry operation 13
+ 0.00000 -1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 13 in struct file
+ Symmetry operation 14
+ 0.00000 1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 14 in struct file
+ Symmetry operation 15
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 15 in struct file
+ Symmetry operation 16
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 16 in struct file
+ Symmetry operation 17
+ 1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 17 in struct file
+ Symmetry operation 18
+ -1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ this is operation 18 in struct file
+ Symmetry operation 19
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 19 in struct file
+ Symmetry operation 20
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 -1.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ this is operation 20 in struct file
+ Symmetry operation 21
+ 0.00000 0.00000 -1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 21 in struct file
+ Symmetry operation 22
+ 0.00000 0.00000 -1.00000
+ 0.00000 -1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 22 in struct file
+ Symmetry operation 23
+ 0.00000 0.00000 1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 23 in struct file
+ Symmetry operation 24
+ 0.00000 0.00000 1.00000
+ 0.00000 -1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 24 in struct file
+ Symmetry operation 25
+ 0.00000 0.00000 -1.00000
+ 0.00000 1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 25 in struct file
+ Symmetry operation 26
+ 0.00000 0.00000 -1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 26 in struct file
+ Symmetry operation 27
+ 0.00000 0.00000 1.00000
+ 0.00000 1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 27 in struct file
+ Symmetry operation 28
+ 0.00000 0.00000 1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 28 in struct file
+ Symmetry operation 29
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 29 in struct file
+ Symmetry operation 30
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 30 in struct file
+ Symmetry operation 31
+ 1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 31 in struct file
+ Symmetry operation 32
+ -1.00000 0.00000 0.00000
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 32 in struct file
+ Symmetry operation 33
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 33 in struct file
+ Symmetry operation 34
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 34 in struct file
+ Symmetry operation 35
+ 0.00000 -1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 35 in struct file
+ Symmetry operation 36
+ 0.00000 1.00000 0.00000
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 36 in struct file
+ Symmetry operation 37
+ 0.00000 0.00000 -1.00000
+ 0.00000 1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 37 in struct file
+ Symmetry operation 38
+ 0.00000 0.00000 -1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ this is operation 38 in struct file
+ Symmetry operation 39
+ 0.00000 0.00000 1.00000
+ 0.00000 1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 39 in struct file
+ Symmetry operation 40
+ 0.00000 0.00000 1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ this is operation 40 in struct file
+ Symmetry operation 41
+ 0.00000 -1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 41 in struct file
+ Symmetry operation 42
+ 0.00000 -1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 42 in struct file
+ Symmetry operation 43
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 0.0000 -1.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 43 in struct file
+ Symmetry operation 44
+ 0.00000 1.00000 0.00000
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ 0.0000 -1.0000 0.0000 0.0000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 44 in struct file
+ Symmetry operation 45
+ 1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 45 in struct file
+ Symmetry operation 46
+ 1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ 1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 46 in struct file
+ Symmetry operation 47
+ -1.00000 0.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ this is operation 47 in struct file
+ Symmetry operation 48
+ -1.00000 0.00000 0.00000
+ 0.00000 1.00000 0.00000
+ 0.00000 0.00000 1.00000
+ 0.00000 0.00000 0.00000
+ -1.0000 0.0000 0.0000 0.0000
+ 0.0000 1.0000 0.0000 0.0000
+ 0.0000 0.0000 1.0000 0.0000
+ this is operation 48 in struct file
+
+
+
+DETERMINATION OF POINTGROUP FOR ALL POSITIONS
+CaOs2 fluorite test s-o calc. M|| 0.00 0.00 1.00
+ 1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+ 2 6.0000000 6.0000000 0.0000000 0.5000000 0.5000000 0.0000000
+ 3 6.0000000 0.0000000 6.0000000 0.5000000 0.0000000 0.5000000
+ 4 0.0000000 6.0000000 6.0000000 0.0000000 0.5000000 0.5000000
+Ca : 4 Atoms, Index 1 to 4
+ 5 3.0000000 3.0000000 3.0000000 0.2500000 0.2500000 0.2500000
+ 6 9.0000000 9.0000000 3.0000000 0.7500000 0.7500000 0.2500000
+ 7 9.0000000 3.0000000 9.0000000 0.7500000 0.2500000 0.7500000
+ 8 3.0000000 9.0000000 9.0000000 0.2500000 0.7500000 0.7500000
+ 9 9.0000000 9.0000000 9.0000000 0.7500000 0.7500000 0.7500000
+ 10 3.0000000 3.0000000 9.0000000 0.2500000 0.2500000 0.7500000
+ 11 3.0000000 9.0000000 3.0000000 0.2500000 0.7500000 0.2500000
+ 12 9.0000000 3.0000000 3.0000000 0.7500000 0.2500000 0.2500000
+Os : 8 Atoms, Index 5 to 12
+number of atoms: 12
+
+ ATOM: 1
+Ca operation # 1 1
+Ca operation # 2 -1
+Ca operation # 3 2 || x
+Ca operation # 4 2 || y
+Ca operation # 5 2 || z
+Ca operation # 6 m n z
+Ca operation # 7 m n y
+Ca operation # 8 m n x
+Ca operation # 9 4 || x
+Ca operation # 10 4 || y
+Ca operation # 11 4 || z
+Ca operation # 12 m n 110
+Ca operation # 13 m n -110
+Ca operation # 14 m n 101
+Ca operation # 15 m n 011
+Ca operation # 16 m n -101
+Ca operation # 17 m n 0-11
+Ca operation # 18 2 || 110
+Ca operation # 19 2 || -110
+Ca operation # 20 2 || 101
+Ca operation # 21 2 || 011
+Ca operation # 22 2 || -101
+Ca operation # 23 2 || 0-11
+Ca operation # 24 3 || 111
+Ca operation # 25 3 || 11-1
+Ca operation # 26 3 || -111
+Ca operation # 27 3 || 1-11
+Ca operation # 28 S6 || 111
+Ca operation # 29 S6 || -1-11
+Ca operation # 30 S6 || 1-1-1
+Ca operation # 31 S6 || 1-11
+Ca operation # 32 S4 || x
+Ca operation # 33 S4 || y
+Ca operation # 34 S4 || z
+Ca operation # 35 4 || x
+Ca operation # 36 4 || y
+Ca operation # 37 4 || z
+Ca operation # 38 3 || 111
+Ca operation # 39 3 || 11-1
+Ca operation # 40 3 || -111
+Ca operation # 41 3 || 1-11
+Ca operation # 42 S6 || 111
+Ca operation # 43 S6 || -1-11
+Ca operation # 44 S6 || 1-1-1
+Ca operation # 45 S6 || 1-11
+Ca operation # 46 S4 || x
+Ca operation # 47 S4 || y
+Ca operation # 48 S4 || z
+ pointgroup is m3m (pos. iatnr!!)
+ axes should be: any
+ z-rotation vector: 0.0000 0.0000 1.0000
+ y-rotation vector: 0.0000 0.0000 0.0000 0
+LOCAL ROT MATRIX: NEW OLD
+ 1.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000
+ 0.0000000 1.0000000 0.0000000 0.0000000 1.0000000 0.0000000
+ 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 1.0000000
+lm: 0 0 4 0 4 4 6 0 6 4
+ ==============================================
+
+ ATOM: 2
+Os operation # 1 1
+Os operation # 3 2 || x
+Os operation # 4 2 || y
+Os operation # 5 2 || z
+Os operation # 12 m n 110
+Os operation # 13 m n -110
+Os operation # 14 m n 101
+Os operation # 15 m n 011
+Os operation # 16 m n -101
+Os operation # 17 m n 0-11
+Os operation # 24 3 || 111
+Os operation # 25 3 || 11-1
+Os operation # 26 3 || -111
+Os operation # 27 3 || 1-11
+Os operation # 32 S4 || x
+Os operation # 33 S4 || y
+Os operation # 34 S4 || z
+Os operation # 38 3 || 111
+Os operation # 39 3 || 11-1
+Os operation # 40 3 || -111
+Os operation # 41 3 || 1-11
+Os operation # 46 S4 || x
+Os operation # 47 S4 || y
+Os operation # 48 S4 || z
+ pointgroup is -43m (pos. iatnr!!)
+ axes should be: any
+ z-rotation vector: 0.0000 0.0000 1.0000
+ y-rotation vector: 1.0000 0.0000 0.0000 0
+LOCAL ROT MATRIX: NEW OLD
+ 1.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000
+ 0.0000000 1.0000000 0.0000000 0.0000000 1.0000000 0.0000000
+ 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 1.0000000
+lm: 0 0 4 0 4 4 6 0 6 4 -3 2
+ ==============================================
diff --git a/test/python/wien2k/CaOs2.struct b/test/python/wien2k/CaOs2.struct
new file mode 100644
index 0000000..0db2f5f
--- /dev/null
+++ b/test/python/wien2k/CaOs2.struct
@@ -0,0 +1,82 @@
+CaOs2 fluorite test s-o calc. M|| 0.00 0.00 1.00
+F 2
+ RELA
+ 12.000000 12.000000 12.000000 90.000000 90.000000 90.000000
+ATOM -1: X=0.00000000 Y=0.00000000 Z=0.00000000
+ MULT= 1 ISPLIT=-2
+Ca NPT= 781 R0=.000010000 RMT= 2.30000 Z: 20.00000
+LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000
+ 0.0000000 1.0000000 0.0000000
+ 0.0000000 0.0000000 1.0000000
+ATOM -2: X=0.25000000 Y=0.25000000 Z=0.25000000
+ MULT= 2 ISPLIT=-2
+ -2: X=0.75000000 Y=0.75000000 Z=0.75000000
+Os NPT= 781 R0=.000005000 RMT= 2.00000 Z: 76.00000
+LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000
+ 0.0000000 1.0000000 0.0000000
+ 0.0000000 0.0000000 1.0000000
+ 16 NUMBER OF SYMMETRY OPERATIONS
+-1 0 0 0.00000000
+ 0-1 0 0.00000000
+ 0 0-1 0.00000000
+ 1 A 3 so. oper. type orig. index
+ 0 1 0 0.00000000
+-1 0 0 0.00000000
+ 0 0-1 0.00000000
+ 2 A 5
+ 0-1 0 0.00000000
+ 1 0 0 0.00000000
+ 0 0-1 0.00000000
+ 3 A 14
+ 1 0 0 0.00000000
+ 0 1 0 0.00000000
+ 0 0-1 0.00000000
+ 4 A 17
+-1 0 0 0.00000000
+ 0-1 0 0.00000000
+ 0 0 1 0.00000000
+ 5 A 32
+ 0 1 0 0.00000000
+-1 0 0 0.00000000
+ 0 0 1 0.00000000
+ 6 A 35
+ 0-1 0 0.00000000
+ 1 0 0 0.00000000
+ 0 0 1 0.00000000
+ 7 A 44
+ 1 0 0 0.00000000
+ 0 1 0 0.00000000
+ 0 0 1 0.00000000
+ 8 A 46
+ 1 0 0 0.00000000
+ 0-1 0 0.00000000
+ 0 0-1 0.00000000
+ 9 B 1
+ 0 1 0 0.00000000
+ 1 0 0 0.00000000
+ 0 0-1 0.00000000
+ 10 B 7
+ 0-1 0 0.00000000
+-1 0 0 0.00000000
+ 0 0-1 0.00000000
+ 11 B 13
+-1 0 0 0.00000000
+ 0 1 0 0.00000000
+ 0 0-1 0.00000000
+ 12 B 18
+ 1 0 0 0.00000000
+ 0-1 0 0.00000000
+ 0 0 1 0.00000000
+ 13 B 31
+ 0 1 0 0.00000000
+ 1 0 0 0.00000000
+ 0 0 1 0.00000000
+ 14 B 36
+ 0-1 0 0.00000000
+-1 0 0 0.00000000
+ 0 0 1 0.00000000
+ 15 B 42
+-1 0 0 0.00000000
+ 0 1 0 0.00000000
+ 0 0 1 0.00000000
+ 16 B 48
diff --git a/test/python/wien2k/CaOs2.symqmc b/test/python/wien2k/CaOs2.symqmc
new file mode 100644
index 0000000..76b4983
--- /dev/null
+++ b/test/python/wien2k/CaOs2.symqmc
@@ -0,0 +1,658 @@
+ 16 3
+ 1 3 2
+ 1 2 3
+ 1 2 3
+ 1 3 2
+ 1 2 3
+ 1 3 2
+ 1 3 2
+ 1 2 3
+ 1 2 3
+ 1 3 2
+ 1 3 2
+ 1 2 3
+ 1 3 2
+ 1 2 3
+ 1 2 3
+ 1 3 2
+ 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.70710678118655124 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 0.70710678118655135 1.4813100786493514E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 1.4813100786493514E-014 0.70710678118655135 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932468359E-015 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118654391 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118655135 -1.4813100786493514E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4813100786493514E-014 0.70710678118655135 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -7.4065503932468359E-015 0.70710678118654391
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654391 -7.4065503932468359E-015
+ 0.70710678118654380 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654391 1.4813100786493672E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.4813100786493672E-014 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 7.4065503932467570E-015 -0.70710678118655135 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655135 7.4065503932467570E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.70710678118654391 1.4813100786493672E-014 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 1.4813100786493672E-014 0.70710678118654391 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932467570E-015 -0.70710678118655135
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118655135 -7.4065503932467570E-015
+ -0.70710678118655124 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 0.70710678118655135 1.4813100786493514E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 1.4813100786493514E-014 0.70710678118655135 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932468359E-015 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118654391 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118655135 -1.4813100786493514E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4813100786493514E-014 0.70710678118655135 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -7.4065503932468359E-015 0.70710678118654391
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654391 -7.4065503932468359E-015
+ 0.70710678118654380 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654391 1.4813100786493672E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.4813100786493672E-014 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 7.4065503932467570E-015 -0.70710678118655135 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655135 7.4065503932467570E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.70710678118654391 1.4813100786493672E-014 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 1.4813100786493672E-014 0.70710678118654391 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932467570E-015 -0.70710678118655135
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118655135 -7.4065503932467570E-015
+ 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654635 4.9377002621645402E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -2.4688501310822614E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -4.9377002621645402E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 -0.70710678118654891
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654891 -2.4688501310822614E-015
+ 0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.9377002621645228E-015 -0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822701E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -2.4688501310822701E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645228E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.4688501310822701E-015 -0.70710678118654635
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 2.4688501310822701E-015
+ 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654635 4.9377002621645402E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -2.4688501310822614E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -4.9377002621645402E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 -0.70710678118654891
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654891 -2.4688501310822614E-015
+ 0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.9377002621645228E-015 -0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822701E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -2.4688501310822701E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645228E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.4688501310822701E-015 -0.70710678118654635
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 2.4688501310822701E-015
+ -3.4914813388431334E-015 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -3.4914813388431341E-015 -1.3965925355372535E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -1.3965925355372535E-014 -3.4914813388431341E-015 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 3.4914813388431341E-015 -6.9829626776862675E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -6.9829626776862675E-015 3.4914813388431341E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431341E-015 1.3965925355372535E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.3965925355372535E-014 -3.4914813388431341E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 3.4914813388431341E-015 6.9829626776862675E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.9829626776862675E-015 3.4914813388431341E-015
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 -4.8761767757959364E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.8761767757959364E-029 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000002 -2.4380883878979682E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4380883878979682E-029 -1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -1.0000000000000002 -4.8761767757959364E-029 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -4.8761767757959364E-029 -1.0000000000000002 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 1.0000000000000002 -2.4380883878979682E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -2.4380883878979682E-029 1.0000000000000002
+ -3.4914813388431334E-015 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -3.4914813388431341E-015 -1.3965925355372535E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -1.3965925355372535E-014 -3.4914813388431341E-015 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 3.4914813388431341E-015 -6.9829626776862675E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -6.9829626776862675E-015 3.4914813388431341E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431341E-015 1.3965925355372535E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.3965925355372535E-014 -3.4914813388431341E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 3.4914813388431341E-015 6.9829626776862675E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.9829626776862675E-015 3.4914813388431341E-015
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 -4.8761767757959364E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.8761767757959364E-029 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000002 -2.4380883878979682E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4380883878979682E-029 -1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -1.0000000000000002 -4.8761767757959364E-029 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -4.8761767757959364E-029 -1.0000000000000002 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 1.0000000000000002 -2.4380883878979682E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -2.4380883878979682E-029 1.0000000000000002
+ -3.4914813388431334E-015 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -3.4914813388431341E-015 -1.3965925355372535E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -1.3965925355372535E-014 -3.4914813388431341E-015 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 3.4914813388431341E-015 -6.9829626776862675E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -6.9829626776862675E-015 3.4914813388431341E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431341E-015 1.3965925355372535E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.3965925355372535E-014 -3.4914813388431341E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 3.4914813388431341E-015 6.9829626776862675E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.9829626776862675E-015 3.4914813388431341E-015
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 -4.8761767757959364E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.8761767757959364E-029 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000002 -2.4380883878979682E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4380883878979682E-029 -1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -1.0000000000000002 -4.8761767757959364E-029 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -4.8761767757959364E-029 -1.0000000000000002 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 1.0000000000000002 -2.4380883878979682E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -2.4380883878979682E-029 1.0000000000000002
+ -3.4914813388431334E-015 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -3.4914813388431341E-015 -1.3965925355372535E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -1.3965925355372535E-014 -3.4914813388431341E-015 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 3.4914813388431341E-015 -6.9829626776862675E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -6.9829626776862675E-015 3.4914813388431341E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431341E-015 1.3965925355372535E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.3965925355372535E-014 -3.4914813388431341E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 3.4914813388431341E-015 6.9829626776862675E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.9829626776862675E-015 3.4914813388431341E-015
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 -4.8761767757959364E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.8761767757959364E-029 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000002 -2.4380883878979682E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4380883878979682E-029 -1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -1.0000000000000002 -4.8761767757959364E-029 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -4.8761767757959364E-029 -1.0000000000000002 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 1.0000000000000002 -2.4380883878979682E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -2.4380883878979682E-029 1.0000000000000002
+ 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654635 4.9377002621645402E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -2.4688501310822614E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -4.9377002621645402E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 -0.70710678118654891
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654891 -2.4688501310822614E-015
+ 0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.9377002621645228E-015 -0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822701E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -2.4688501310822701E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645228E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.4688501310822701E-015 -0.70710678118654635
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 2.4688501310822701E-015
+ 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654635 4.9377002621645402E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -2.4688501310822614E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -4.9377002621645402E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645402E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822614E-015 -0.70710678118654891
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654891 -2.4688501310822614E-015
+ 0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -4.9377002621645228E-015 -0.70710678118654891 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.4688501310822701E-015 -0.70710678118654635 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 -2.4688501310822701E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654891 -4.9377002621645228E-015 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.9377002621645228E-015 0.70710678118654891 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.4688501310822701E-015 -0.70710678118654635
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654635 2.4688501310822701E-015
+ -0.70710678118655124 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 0.70710678118655135 1.4813100786493514E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 1.4813100786493514E-014 0.70710678118655135 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932468359E-015 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118654391 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118655135 -1.4813100786493514E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4813100786493514E-014 0.70710678118655135 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -7.4065503932468359E-015 0.70710678118654391
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654391 -7.4065503932468359E-015
+ 0.70710678118654380 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654391 1.4813100786493672E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.4813100786493672E-014 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 7.4065503932467570E-015 -0.70710678118655135 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655135 7.4065503932467570E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.70710678118654391 1.4813100786493672E-014 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 1.4813100786493672E-014 0.70710678118654391 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932467570E-015 -0.70710678118655135
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118655135 -7.4065503932467570E-015
+ -0.70710678118655124 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 0.70710678118655135 1.4813100786493514E-014 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 1.4813100786493514E-014 0.70710678118655135 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932468359E-015 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118654391 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118655135 -1.4813100786493514E-014 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4813100786493514E-014 0.70710678118655135 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -7.4065503932468359E-015 0.70710678118654391
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654391 -7.4065503932468359E-015
+ 0.70710678118654380 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 -0.70710678118654391 1.4813100786493672E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.4813100786493672E-014 -0.70710678118654391 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 7.4065503932467570E-015 -0.70710678118655135 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655135 7.4065503932467570E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.70710678118654391 1.4813100786493672E-014 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 1.4813100786493672E-014 0.70710678118654391 -0.0000000000000000 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -7.4065503932467570E-015 -0.70710678118655135
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.70710678118655135 -7.4065503932467570E-015
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000002
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -3.4914813388431334E-015 -1.4744151969902386E-043 -0.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.4744151969902390E-043 -3.4914813388431349E-015 -1.3965925355372538E-014 2.4380883878979687E-029 -9.7523535515918749E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -5.8976607879609558E-043 -1.3965925355372538E-014 -3.4914813388431349E-015 9.7523535515918749E-029 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -4.2228929611829786E-029 2.4380883878979687E-029 4.8761767757959375E-029 3.4914813388431349E-015 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.4457859223659572E-029 -4.8761767757959375E-029 -2.4380883878979687E-029 -6.9829626776862691E-015 3.4914813388431349E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 -1.4744151969902386E-043 0.0000000000000000 -4.2228929611829775E-029 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4744151969902390E-043 -3.4914813388431349E-015 1.3965925355372538E-014 2.4380883878979687E-029 9.7523535515918749E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.8976607879609558E-043 1.3965925355372538E-014 -3.4914813388431349E-015 -9.7523535515918749E-029 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 2.4380883878979687E-029 -4.8761767757959375E-029 3.4914813388431349E-015 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.4457859223659572E-029 4.8761767757959375E-029 -2.4380883878979687E-029 6.9829626776862691E-015 3.4914813388431349E-015
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 -4.8761767757959375E-029 -6.9829626776862691E-015 -3.4050160435183584E-043 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0591572583992568E-057 -4.8761767757959375E-029 1.0000000000000004 3.4050160435183584E-043 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.2094846145109831E-014 -6.9829626776862691E-015 1.7025080217591792E-043 -1.0000000000000004 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9488303939804779E-043 -1.7025080217591792E-043 6.9829626776862691E-015 -2.4380883878979687E-029 -1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 -1.2094846145109828E-014 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 -1.0000000000000004 -4.8761767757959375E-029 6.9829626776862691E-015 -3.4050160435183584E-043
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0591572583992568E-057 -4.8761767757959375E-029 -1.0000000000000004 3.4050160435183584E-043 -6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 1.7025080217591792E-043 1.0000000000000004 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9488303939804779E-043 -1.7025080217591792E-043 -6.9829626776862691E-015 -2.4380883878979687E-029 1.0000000000000004
+ -3.4914813388431334E-015 -1.4744151969902386E-043 -0.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.4744151969902390E-043 -3.4914813388431349E-015 -1.3965925355372538E-014 2.4380883878979687E-029 -9.7523535515918749E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -5.8976607879609558E-043 -1.3965925355372538E-014 -3.4914813388431349E-015 9.7523535515918749E-029 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -4.2228929611829786E-029 2.4380883878979687E-029 4.8761767757959375E-029 3.4914813388431349E-015 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.4457859223659572E-029 -4.8761767757959375E-029 -2.4380883878979687E-029 -6.9829626776862691E-015 3.4914813388431349E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 -1.4744151969902386E-043 0.0000000000000000 -4.2228929611829775E-029 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4744151969902390E-043 -3.4914813388431349E-015 1.3965925355372538E-014 2.4380883878979687E-029 9.7523535515918749E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.8976607879609558E-043 1.3965925355372538E-014 -3.4914813388431349E-015 -9.7523535515918749E-029 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 2.4380883878979687E-029 -4.8761767757959375E-029 3.4914813388431349E-015 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.4457859223659572E-029 4.8761767757959375E-029 -2.4380883878979687E-029 6.9829626776862691E-015 3.4914813388431349E-015
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 -4.8761767757959375E-029 -6.9829626776862691E-015 -3.4050160435183584E-043 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0591572583992568E-057 -4.8761767757959375E-029 1.0000000000000004 3.4050160435183584E-043 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.2094846145109831E-014 -6.9829626776862691E-015 1.7025080217591792E-043 -1.0000000000000004 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9488303939804779E-043 -1.7025080217591792E-043 6.9829626776862691E-015 -2.4380883878979687E-029 -1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 -1.2094846145109828E-014 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 -1.0000000000000004 -4.8761767757959375E-029 6.9829626776862691E-015 -3.4050160435183584E-043
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0591572583992568E-057 -4.8761767757959375E-029 -1.0000000000000004 3.4050160435183584E-043 -6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 1.7025080217591792E-043 1.0000000000000004 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9488303939804779E-043 -1.7025080217591792E-043 -6.9829626776862691E-015 -2.4380883878979687E-029 1.0000000000000004
+ 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774187E-029 -0.70710678118654657 4.9377002621645417E-015 4.9377002621645236E-015 3.4479776644296691E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.0851379681525983E-043 4.9377002621645417E-015 -0.70710678118654657 -3.4479776644296691E-029 -4.9377002621645236E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774187E-029 -1.7239888322148284E-029 -4.9377002621645417E-015 -2.4688501310822618E-015 0.70710678118654913 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.5523477266151499E-015 4.9377002621645417E-015 1.7239888322148284E-029 0.70710678118654913 -2.4688501310822618E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774187E-029 -0.70710678118654657 -4.9377002621645417E-015 4.9377002621645236E-015 -3.4479776644296691E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525983E-043 -4.9377002621645417E-015 -0.70710678118654657 3.4479776644296691E-029 -4.9377002621645236E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774187E-029 -1.7239888322148284E-029 4.9377002621645417E-015 -2.4688501310822618E-015 -0.70710678118654913
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151499E-015 -4.9377002621645417E-015 1.7239888322148284E-029 -0.70710678118654913 -2.4688501310822618E-015
+ 0.70710678118654879 2.9860362490774288E-029 0.0000000000000000 8.5523477266151484E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774294E-029 -0.70710678118654913 -4.9377002621645236E-015 4.9377002621645417E-015 -3.4479776644296568E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0851379681525908E-043 -4.9377002621645236E-015 -0.70710678118654913 3.4479776644296568E-029 -4.9377002621645417E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774294E-029 -1.7239888322148345E-029 4.9377002621645236E-015 -2.4688501310822709E-015 -0.70710678118654657 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151200E-015 -4.9377002621645236E-015 1.7239888322148345E-029 -0.70710678118654657 -2.4688501310822709E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 -2.9860362490774288E-029 0.0000000000000000 -8.5523477266151484E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774294E-029 0.70710678118654913 -4.9377002621645236E-015 -4.9377002621645417E-015 -3.4479776644296568E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525908E-043 -4.9377002621645236E-015 0.70710678118654913 3.4479776644296568E-029 4.9377002621645417E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774294E-029 1.7239888322148345E-029 4.9377002621645236E-015 2.4688501310822709E-015 -0.70710678118654657
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151200E-015 -4.9377002621645236E-015 -1.7239888322148345E-029 -0.70710678118654657 2.4688501310822709E-015
+ 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774187E-029 -0.70710678118654657 4.9377002621645417E-015 4.9377002621645236E-015 3.4479776644296691E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.0851379681525983E-043 4.9377002621645417E-015 -0.70710678118654657 -3.4479776644296691E-029 -4.9377002621645236E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774187E-029 -1.7239888322148284E-029 -4.9377002621645417E-015 -2.4688501310822618E-015 0.70710678118654913 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.5523477266151499E-015 4.9377002621645417E-015 1.7239888322148284E-029 0.70710678118654913 -2.4688501310822618E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774187E-029 -0.70710678118654657 -4.9377002621645417E-015 4.9377002621645236E-015 -3.4479776644296691E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525983E-043 -4.9377002621645417E-015 -0.70710678118654657 3.4479776644296691E-029 -4.9377002621645236E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774187E-029 -1.7239888322148284E-029 4.9377002621645417E-015 -2.4688501310822618E-015 -0.70710678118654913
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151499E-015 -4.9377002621645417E-015 1.7239888322148284E-029 -0.70710678118654913 -2.4688501310822618E-015
+ 0.70710678118654879 2.9860362490774288E-029 0.0000000000000000 8.5523477266151484E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774294E-029 -0.70710678118654913 -4.9377002621645236E-015 4.9377002621645417E-015 -3.4479776644296568E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0851379681525908E-043 -4.9377002621645236E-015 -0.70710678118654913 3.4479776644296568E-029 -4.9377002621645417E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774294E-029 -1.7239888322148345E-029 4.9377002621645236E-015 -2.4688501310822709E-015 -0.70710678118654657 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151200E-015 -4.9377002621645236E-015 1.7239888322148345E-029 -0.70710678118654657 -2.4688501310822709E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 -2.9860362490774288E-029 0.0000000000000000 -8.5523477266151484E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774294E-029 0.70710678118654913 -4.9377002621645236E-015 -4.9377002621645417E-015 -3.4479776644296568E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525908E-043 -4.9377002621645236E-015 0.70710678118654913 3.4479776644296568E-029 4.9377002621645417E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774294E-029 1.7239888322148345E-029 4.9377002621645236E-015 2.4688501310822709E-015 -0.70710678118654657
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151200E-015 -4.9377002621645236E-015 -1.7239888322148345E-029 -0.70710678118654657 2.4688501310822709E-015
+ -0.70710678118655124 -2.9860362490774389E-029 -0.0000000000000000 -8.5523477266151783E-015 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774400E-029 0.70710678118655157 1.4813100786493517E-014 -4.9377002621645583E-015 1.0343932993288934E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044577500E-043 1.4813100786493517E-014 0.70710678118655157 -1.0343932993288934E-028 4.9377002621645583E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.9581087472323184E-029 -5.1719664966445210E-029 4.9377002621645070E-015 -7.4065503932468359E-015 -0.70710678118654413 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266150900E-015 -4.9377002621645070E-015 5.1719664966445210E-029 -0.70710678118654413 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 -2.9860362490774389E-029 0.0000000000000000 -8.5523477266151783E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774400E-029 0.70710678118655157 -1.4813100786493517E-014 -4.9377002621645583E-015 -1.0343932993288934E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.2554139044577500E-043 -1.4813100786493517E-014 0.70710678118655157 1.0343932993288934E-028 4.9377002621645583E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472323184E-029 -5.1719664966445210E-029 -4.9377002621645070E-015 -7.4065503932468359E-015 0.70710678118654413
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.5523477266150900E-015 4.9377002621645070E-015 5.1719664966445210E-029 0.70710678118654413 -7.4065503932468359E-015
+ 0.70710678118654380 2.9860362490774075E-029 0.0000000000000000 8.5523477266150884E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774086E-029 -0.70710678118654413 1.4813100786493672E-014 4.9377002621645070E-015 1.0343932993289042E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044578161E-043 1.4813100786493672E-014 -0.70710678118654413 -1.0343932993289042E-028 -4.9377002621645070E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.9581087472322242E-029 5.1719664966444672E-029 4.9377002621645583E-015 7.4065503932467586E-015 -0.70710678118655157 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151799E-015 -4.9377002621645583E-015 -5.1719664966444672E-029 -0.70710678118655157 7.4065503932467586E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -2.9860362490774075E-029 -0.0000000000000000 -8.5523477266150884E-015 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774086E-029 0.70710678118654413 1.4813100786493672E-014 -4.9377002621645070E-015 1.0343932993289042E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.2554139044578161E-043 1.4813100786493672E-014 0.70710678118654413 -1.0343932993289042E-028 4.9377002621645070E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472322242E-029 -5.1719664966444672E-029 4.9377002621645583E-015 -7.4065503932467586E-015 -0.70710678118655157
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151799E-015 -4.9377002621645583E-015 5.1719664966444672E-029 -0.70710678118655157 -7.4065503932467586E-015
+ -0.70710678118655124 -2.9860362490774389E-029 -0.0000000000000000 -8.5523477266151783E-015 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774400E-029 0.70710678118655157 1.4813100786493517E-014 -4.9377002621645583E-015 1.0343932993288934E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044577500E-043 1.4813100786493517E-014 0.70710678118655157 -1.0343932993288934E-028 4.9377002621645583E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.9581087472323184E-029 -5.1719664966445210E-029 4.9377002621645070E-015 -7.4065503932468359E-015 -0.70710678118654413 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266150900E-015 -4.9377002621645070E-015 5.1719664966445210E-029 -0.70710678118654413 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 -2.9860362490774389E-029 0.0000000000000000 -8.5523477266151783E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774400E-029 0.70710678118655157 -1.4813100786493517E-014 -4.9377002621645583E-015 -1.0343932993288934E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.2554139044577500E-043 -1.4813100786493517E-014 0.70710678118655157 1.0343932993288934E-028 4.9377002621645583E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472323184E-029 -5.1719664966445210E-029 -4.9377002621645070E-015 -7.4065503932468359E-015 0.70710678118654413
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.5523477266150900E-015 4.9377002621645070E-015 5.1719664966445210E-029 0.70710678118654413 -7.4065503932468359E-015
+ 0.70710678118654380 2.9860362490774075E-029 0.0000000000000000 8.5523477266150884E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774086E-029 -0.70710678118654413 1.4813100786493672E-014 4.9377002621645070E-015 1.0343932993289042E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044578161E-043 1.4813100786493672E-014 -0.70710678118654413 -1.0343932993289042E-028 -4.9377002621645070E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.9581087472322242E-029 5.1719664966444672E-029 4.9377002621645583E-015 7.4065503932467586E-015 -0.70710678118655157 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151799E-015 -4.9377002621645583E-015 -5.1719664966444672E-029 -0.70710678118655157 7.4065503932467586E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -2.9860362490774075E-029 -0.0000000000000000 -8.5523477266150884E-015 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774086E-029 0.70710678118654413 1.4813100786493672E-014 -4.9377002621645070E-015 1.0343932993289042E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.2554139044578161E-043 1.4813100786493672E-014 0.70710678118654413 -1.0343932993289042E-028 4.9377002621645070E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472322242E-029 -5.1719664966444672E-029 4.9377002621645583E-015 -7.4065503932467586E-015 -0.70710678118655157
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151799E-015 -4.9377002621645583E-015 5.1719664966444672E-029 -0.70710678118655157 -7.4065503932467586E-015
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 4.2228929611829786E-029 1.0000000000000004 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000004 0.0000000000000000 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 0.0000000000000000 1.0000000000000004 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.9829626776862691E-015 0.0000000000000000 1.0000000000000004
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -0.70710678118655124 -2.9860362490774389E-029 -0.0000000000000000 -8.5523477266151783E-015 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774400E-029 0.70710678118655157 1.4813100786493517E-014 -4.9377002621645583E-015 1.0343932993288934E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044577500E-043 1.4813100786493517E-014 0.70710678118655157 -1.0343932993288934E-028 4.9377002621645583E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.9581087472323184E-029 -5.1719664966445210E-029 4.9377002621645070E-015 -7.4065503932468359E-015 -0.70710678118654413 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266150900E-015 -4.9377002621645070E-015 5.1719664966445210E-029 -0.70710678118654413 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 -2.9860362490774389E-029 0.0000000000000000 -8.5523477266151783E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774400E-029 0.70710678118655157 -1.4813100786493517E-014 -4.9377002621645583E-015 -1.0343932993288934E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.2554139044577500E-043 -1.4813100786493517E-014 0.70710678118655157 1.0343932993288934E-028 4.9377002621645583E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472323184E-029 -5.1719664966445210E-029 -4.9377002621645070E-015 -7.4065503932468359E-015 0.70710678118654413
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.5523477266150900E-015 4.9377002621645070E-015 5.1719664966445210E-029 0.70710678118654413 -7.4065503932468359E-015
+ 0.70710678118654380 2.9860362490774075E-029 0.0000000000000000 8.5523477266150884E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774086E-029 -0.70710678118654413 1.4813100786493672E-014 4.9377002621645070E-015 1.0343932993289042E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044578161E-043 1.4813100786493672E-014 -0.70710678118654413 -1.0343932993289042E-028 -4.9377002621645070E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.9581087472322242E-029 5.1719664966444672E-029 4.9377002621645583E-015 7.4065503932467586E-015 -0.70710678118655157 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151799E-015 -4.9377002621645583E-015 -5.1719664966444672E-029 -0.70710678118655157 7.4065503932467586E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -2.9860362490774075E-029 -0.0000000000000000 -8.5523477266150884E-015 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774086E-029 0.70710678118654413 1.4813100786493672E-014 -4.9377002621645070E-015 1.0343932993289042E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.2554139044578161E-043 1.4813100786493672E-014 0.70710678118654413 -1.0343932993289042E-028 4.9377002621645070E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472322242E-029 -5.1719664966444672E-029 4.9377002621645583E-015 -7.4065503932467586E-015 -0.70710678118655157
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151799E-015 -4.9377002621645583E-015 5.1719664966444672E-029 -0.70710678118655157 -7.4065503932467586E-015
+ -0.70710678118655124 -2.9860362490774389E-029 -0.0000000000000000 -8.5523477266151783E-015 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774400E-029 0.70710678118655157 1.4813100786493517E-014 -4.9377002621645583E-015 1.0343932993288934E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044577500E-043 1.4813100786493517E-014 0.70710678118655157 -1.0343932993288934E-028 4.9377002621645583E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.9581087472323184E-029 -5.1719664966445210E-029 4.9377002621645070E-015 -7.4065503932468359E-015 -0.70710678118654413 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266150900E-015 -4.9377002621645070E-015 5.1719664966445210E-029 -0.70710678118654413 -7.4065503932468359E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118655124 -2.9860362490774389E-029 0.0000000000000000 -8.5523477266151783E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774400E-029 0.70710678118655157 -1.4813100786493517E-014 -4.9377002621645583E-015 -1.0343932993288934E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -6.2554139044577500E-043 -1.4813100786493517E-014 0.70710678118655157 1.0343932993288934E-028 4.9377002621645583E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472323184E-029 -5.1719664966445210E-029 -4.9377002621645070E-015 -7.4065503932468359E-015 0.70710678118654413
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.5523477266150900E-015 4.9377002621645070E-015 5.1719664966445210E-029 0.70710678118654413 -7.4065503932468359E-015
+ 0.70710678118654380 2.9860362490774075E-029 0.0000000000000000 8.5523477266150884E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774086E-029 -0.70710678118654413 1.4813100786493672E-014 4.9377002621645070E-015 1.0343932993289042E-028 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 6.2554139044578161E-043 1.4813100786493672E-014 -0.70710678118654413 -1.0343932993289042E-028 -4.9377002621645070E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.9581087472322242E-029 5.1719664966444672E-029 4.9377002621645583E-015 7.4065503932467586E-015 -0.70710678118655157 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151799E-015 -4.9377002621645583E-015 -5.1719664966444672E-029 -0.70710678118655157 7.4065503932467586E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654380 -2.9860362490774075E-029 -0.0000000000000000 -8.5523477266150884E-015 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774086E-029 0.70710678118654413 1.4813100786493672E-014 -4.9377002621645070E-015 1.0343932993289042E-028
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.2554139044578161E-043 1.4813100786493672E-014 0.70710678118654413 -1.0343932993289042E-028 4.9377002621645070E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.9581087472322242E-029 -5.1719664966444672E-029 4.9377002621645583E-015 -7.4065503932467586E-015 -0.70710678118655157
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151799E-015 -4.9377002621645583E-015 5.1719664966444672E-029 -0.70710678118655157 -7.4065503932467586E-015
+ 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774187E-029 -0.70710678118654657 4.9377002621645417E-015 4.9377002621645236E-015 3.4479776644296691E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.0851379681525983E-043 4.9377002621645417E-015 -0.70710678118654657 -3.4479776644296691E-029 -4.9377002621645236E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774187E-029 -1.7239888322148284E-029 -4.9377002621645417E-015 -2.4688501310822618E-015 0.70710678118654913 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.5523477266151499E-015 4.9377002621645417E-015 1.7239888322148284E-029 0.70710678118654913 -2.4688501310822618E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774187E-029 -0.70710678118654657 -4.9377002621645417E-015 4.9377002621645236E-015 -3.4479776644296691E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525983E-043 -4.9377002621645417E-015 -0.70710678118654657 3.4479776644296691E-029 -4.9377002621645236E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774187E-029 -1.7239888322148284E-029 4.9377002621645417E-015 -2.4688501310822618E-015 -0.70710678118654913
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151499E-015 -4.9377002621645417E-015 1.7239888322148284E-029 -0.70710678118654913 -2.4688501310822618E-015
+ 0.70710678118654879 2.9860362490774288E-029 0.0000000000000000 8.5523477266151484E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774294E-029 -0.70710678118654913 -4.9377002621645236E-015 4.9377002621645417E-015 -3.4479776644296568E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0851379681525908E-043 -4.9377002621645236E-015 -0.70710678118654913 3.4479776644296568E-029 -4.9377002621645417E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774294E-029 -1.7239888322148345E-029 4.9377002621645236E-015 -2.4688501310822709E-015 -0.70710678118654657 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151200E-015 -4.9377002621645236E-015 1.7239888322148345E-029 -0.70710678118654657 -2.4688501310822709E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 -2.9860362490774288E-029 0.0000000000000000 -8.5523477266151484E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774294E-029 0.70710678118654913 -4.9377002621645236E-015 -4.9377002621645417E-015 -3.4479776644296568E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525908E-043 -4.9377002621645236E-015 0.70710678118654913 3.4479776644296568E-029 4.9377002621645417E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774294E-029 1.7239888322148345E-029 4.9377002621645236E-015 2.4688501310822709E-015 -0.70710678118654657
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151200E-015 -4.9377002621645236E-015 -1.7239888322148345E-029 -0.70710678118654657 2.4688501310822709E-015
+ 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774187E-029 -0.70710678118654657 4.9377002621645417E-015 4.9377002621645236E-015 3.4479776644296691E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.0851379681525983E-043 4.9377002621645417E-015 -0.70710678118654657 -3.4479776644296691E-029 -4.9377002621645236E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774187E-029 -1.7239888322148284E-029 -4.9377002621645417E-015 -2.4688501310822618E-015 0.70710678118654913 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -8.5523477266151499E-015 4.9377002621645417E-015 1.7239888322148284E-029 0.70710678118654913 -2.4688501310822618E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.70710678118654624 2.9860362490774182E-029 0.0000000000000000 8.5523477266151168E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774187E-029 -0.70710678118654657 -4.9377002621645417E-015 4.9377002621645236E-015 -3.4479776644296691E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525983E-043 -4.9377002621645417E-015 -0.70710678118654657 3.4479776644296691E-029 -4.9377002621645236E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774187E-029 -1.7239888322148284E-029 4.9377002621645417E-015 -2.4688501310822618E-015 -0.70710678118654913
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151499E-015 -4.9377002621645417E-015 1.7239888322148284E-029 -0.70710678118654913 -2.4688501310822618E-015
+ 0.70710678118654879 2.9860362490774288E-029 0.0000000000000000 8.5523477266151484E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.9860362490774294E-029 -0.70710678118654913 -4.9377002621645236E-015 4.9377002621645417E-015 -3.4479776644296568E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0851379681525908E-043 -4.9377002621645236E-015 -0.70710678118654913 3.4479776644296568E-029 -4.9377002621645417E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9860362490774294E-029 -1.7239888322148345E-029 4.9377002621645236E-015 -2.4688501310822709E-015 -0.70710678118654657 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.5523477266151200E-015 -4.9377002621645236E-015 1.7239888322148345E-029 -0.70710678118654657 -2.4688501310822709E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.70710678118654879 -2.9860362490774288E-029 0.0000000000000000 -8.5523477266151484E-015 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9860362490774294E-029 0.70710678118654913 -4.9377002621645236E-015 -4.9377002621645417E-015 -3.4479776644296568E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0851379681525908E-043 -4.9377002621645236E-015 0.70710678118654913 3.4479776644296568E-029 4.9377002621645417E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.9860362490774294E-029 1.7239888322148345E-029 4.9377002621645236E-015 2.4688501310822709E-015 -0.70710678118654657
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 8.5523477266151200E-015 -4.9377002621645236E-015 -1.7239888322148345E-029 -0.70710678118654657 2.4688501310822709E-015
+ -3.4914813388431334E-015 -1.4744151969902386E-043 -0.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.4744151969902390E-043 -3.4914813388431349E-015 -1.3965925355372538E-014 2.4380883878979687E-029 -9.7523535515918749E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -5.8976607879609558E-043 -1.3965925355372538E-014 -3.4914813388431349E-015 9.7523535515918749E-029 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -4.2228929611829786E-029 2.4380883878979687E-029 4.8761767757959375E-029 3.4914813388431349E-015 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.4457859223659572E-029 -4.8761767757959375E-029 -2.4380883878979687E-029 -6.9829626776862691E-015 3.4914813388431349E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 -1.4744151969902386E-043 0.0000000000000000 -4.2228929611829775E-029 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4744151969902390E-043 -3.4914813388431349E-015 1.3965925355372538E-014 2.4380883878979687E-029 9.7523535515918749E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.8976607879609558E-043 1.3965925355372538E-014 -3.4914813388431349E-015 -9.7523535515918749E-029 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 2.4380883878979687E-029 -4.8761767757959375E-029 3.4914813388431349E-015 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.4457859223659572E-029 4.8761767757959375E-029 -2.4380883878979687E-029 6.9829626776862691E-015 3.4914813388431349E-015
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 -4.8761767757959375E-029 -6.9829626776862691E-015 -3.4050160435183584E-043 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0591572583992568E-057 -4.8761767757959375E-029 1.0000000000000004 3.4050160435183584E-043 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.2094846145109831E-014 -6.9829626776862691E-015 1.7025080217591792E-043 -1.0000000000000004 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9488303939804779E-043 -1.7025080217591792E-043 6.9829626776862691E-015 -2.4380883878979687E-029 -1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 -1.2094846145109828E-014 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 -1.0000000000000004 -4.8761767757959375E-029 6.9829626776862691E-015 -3.4050160435183584E-043
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0591572583992568E-057 -4.8761767757959375E-029 -1.0000000000000004 3.4050160435183584E-043 -6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 1.7025080217591792E-043 1.0000000000000004 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9488303939804779E-043 -1.7025080217591792E-043 -6.9829626776862691E-015 -2.4380883878979687E-029 1.0000000000000004
+ -3.4914813388431334E-015 -1.4744151969902386E-043 -0.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -1.4744151969902390E-043 -3.4914813388431349E-015 -1.3965925355372538E-014 2.4380883878979687E-029 -9.7523535515918749E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -5.8976607879609558E-043 -1.3965925355372538E-014 -3.4914813388431349E-015 9.7523535515918749E-029 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -4.2228929611829786E-029 2.4380883878979687E-029 4.8761767757959375E-029 3.4914813388431349E-015 -6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 8.4457859223659572E-029 -4.8761767757959375E-029 -2.4380883878979687E-029 -6.9829626776862691E-015 3.4914813388431349E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -3.4914813388431334E-015 -1.4744151969902386E-043 0.0000000000000000 -4.2228929611829775E-029 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.4744151969902390E-043 -3.4914813388431349E-015 1.3965925355372538E-014 2.4380883878979687E-029 9.7523535515918749E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.8976607879609558E-043 1.3965925355372538E-014 -3.4914813388431349E-015 -9.7523535515918749E-029 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 2.4380883878979687E-029 -4.8761767757959375E-029 3.4914813388431349E-015 6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -8.4457859223659572E-029 4.8761767757959375E-029 -2.4380883878979687E-029 6.9829626776862691E-015 3.4914813388431349E-015
+ 1.0000000000000000 4.2228929611829775E-029 0.0000000000000000 1.2094846145109828E-014 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 4.2228929611829786E-029 1.0000000000000004 -4.8761767757959375E-029 -6.9829626776862691E-015 -3.4050160435183584E-043 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ -2.0591572583992568E-057 -4.8761767757959375E-029 1.0000000000000004 3.4050160435183584E-043 6.9829626776862691E-015 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 1.2094846145109831E-014 -6.9829626776862691E-015 1.7025080217591792E-043 -1.0000000000000004 -2.4380883878979687E-029 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 2.9488303939804779E-043 -1.7025080217591792E-043 6.9829626776862691E-015 -2.4380883878979687E-029 -1.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.0000000000000000 -4.2228929611829775E-029 -0.0000000000000000 -1.2094846145109828E-014 -0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -4.2228929611829786E-029 -1.0000000000000004 -4.8761767757959375E-029 6.9829626776862691E-015 -3.4050160435183584E-043
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -2.0591572583992568E-057 -4.8761767757959375E-029 -1.0000000000000004 3.4050160435183584E-043 -6.9829626776862691E-015
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 -1.2094846145109831E-014 6.9829626776862691E-015 1.7025080217591792E-043 1.0000000000000004 -2.4380883878979687E-029
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 2.9488303939804779E-043 -1.7025080217591792E-043 -6.9829626776862691E-015 -2.4380883878979687E-029 1.0000000000000004
diff --git a/test/python/wien2k/CaOs2_band.almblmdn.gz b/test/python/wien2k/CaOs2_band.almblmdn.gz
new file mode 100644
index 0000000..0329e74
Binary files /dev/null and b/test/python/wien2k/CaOs2_band.almblmdn.gz differ
diff --git a/test/python/wien2k/CaOs2_band.almblmup.gz b/test/python/wien2k/CaOs2_band.almblmup.gz
new file mode 100644
index 0000000..3eccf62
Binary files /dev/null and b/test/python/wien2k/CaOs2_band.almblmup.gz differ
diff --git a/test/python/wien2k/CaOs2_band.indmftpr b/test/python/wien2k/CaOs2_band.indmftpr
new file mode 100644
index 0000000..6aa6f67
--- /dev/null
+++ b/test/python/wien2k/CaOs2_band.indmftpr
@@ -0,0 +1,13 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+fromfile
+jbasis_d.dat
+0 0 2 0
+0 0 0 0
+1
+-2.0 3.0
+0.6529001225
diff --git a/test/python/wien2k/CaOs2_band.klist_band b/test/python/wien2k/CaOs2_band.klist_band
new file mode 100644
index 0000000..14790bc
--- /dev/null
+++ b/test/python/wien2k/CaOs2_band.klist_band
@@ -0,0 +1,5 @@
+GAMMA 0 0 0 8 2.0
+ 1 0 0 8 2.0
+ 2 0 0 8 2.0
+X 4 0 0 8 2.0
+END
diff --git a/test/python/wien2k/CaOs2_band.outband.gz b/test/python/wien2k/CaOs2_band.outband.gz
new file mode 100644
index 0000000..606fec3
Binary files /dev/null and b/test/python/wien2k/CaOs2_band.outband.gz differ
diff --git a/test/python/wien2k/CaOs2_full.ctqmcout.gz b/test/python/wien2k/CaOs2_full.ctqmcout.gz
new file mode 100644
index 0000000..3cca2cc
Binary files /dev/null and b/test/python/wien2k/CaOs2_full.ctqmcout.gz differ
diff --git a/test/python/wien2k/CaOs2_full.indmftpr b/test/python/wien2k/CaOs2_full.indmftpr
new file mode 100644
index 0000000..227d144
--- /dev/null
+++ b/test/python/wien2k/CaOs2_full.indmftpr
@@ -0,0 +1,11 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+cubic
+0 0 2 0
+0 0 0 0
+1
+-2.0 3.0
diff --git a/test/python/wien2k/CaOs2_jbasis.indmftpr b/test/python/wien2k/CaOs2_jbasis.indmftpr
new file mode 100644
index 0000000..5589430
--- /dev/null
+++ b/test/python/wien2k/CaOs2_jbasis.indmftpr
@@ -0,0 +1,12 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+fromfile
+jbasis_d.dat
+0 0 2 0
+0 0 0 0
+1
+-0.15 0.30
diff --git a/test/python/wien2k/CaOs2_jbasis_full.ctqmcout.gz b/test/python/wien2k/CaOs2_jbasis_full.ctqmcout.gz
new file mode 100644
index 0000000..c3c7a7c
Binary files /dev/null and b/test/python/wien2k/CaOs2_jbasis_full.ctqmcout.gz differ
diff --git a/test/python/wien2k/CaOs2_jbasis_full.indmftpr b/test/python/wien2k/CaOs2_jbasis_full.indmftpr
new file mode 100644
index 0000000..dab1b92
--- /dev/null
+++ b/test/python/wien2k/CaOs2_jbasis_full.indmftpr
@@ -0,0 +1,12 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+fromfile
+jbasis_d.dat
+0 0 2 0
+0 0 0 0
+1
+-2.0 3.0
diff --git a/test/python/wien2k/CaOs2_jbasis_full.parproj.gz b/test/python/wien2k/CaOs2_jbasis_full.parproj.gz
new file mode 100644
index 0000000..9a60325
Binary files /dev/null and b/test/python/wien2k/CaOs2_jbasis_full.parproj.gz differ
diff --git a/test/python/wien2k/CaOs2_jbasis_full.sympar.gz b/test/python/wien2k/CaOs2_jbasis_full.sympar.gz
new file mode 100644
index 0000000..a9abae8
Binary files /dev/null and b/test/python/wien2k/CaOs2_jbasis_full.sympar.gz differ
diff --git a/test/python/wien2k/CaOs2_l0.indmftpr b/test/python/wien2k/CaOs2_l0.indmftpr
new file mode 100644
index 0000000..15ca9ef
--- /dev/null
+++ b/test/python/wien2k/CaOs2_l0.indmftpr
@@ -0,0 +1,11 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+complex
+2 0 0 0
+0 0 0 0
+1
+-0.15 0.30
diff --git a/test/python/wien2k/CaOs2_mode1.indmftpr b/test/python/wien2k/CaOs2_mode1.indmftpr
new file mode 100644
index 0000000..1cabe50
--- /dev/null
+++ b/test/python/wien2k/CaOs2_mode1.indmftpr
@@ -0,0 +1,11 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+cubic
+0 0 2 0
+0 0 0 0
+1
+-0.15 0.30 1
diff --git a/test/python/wien2k/CaOs2_mode1.oubwindn b/test/python/wien2k/CaOs2_mode1.oubwindn
new file mode 100644
index 0000000..778773d
--- /dev/null
+++ b/test/python/wien2k/CaOs2_mode1.oubwindn
@@ -0,0 +1,5 @@
+ 1
+ 1
+ 1
+ 60 76
+ 1.0000000000000000
diff --git a/test/python/wien2k/CaOs2_mode1.oubwinup b/test/python/wien2k/CaOs2_mode1.oubwinup
new file mode 100644
index 0000000..778773d
--- /dev/null
+++ b/test/python/wien2k/CaOs2_mode1.oubwinup
@@ -0,0 +1,5 @@
+ 1
+ 1
+ 1
+ 60 76
+ 1.0000000000000000
diff --git a/test/python/wien2k/CaOs2_mode1_full.ctqmcout.gz b/test/python/wien2k/CaOs2_mode1_full.ctqmcout.gz
new file mode 100644
index 0000000..38b1ece
Binary files /dev/null and b/test/python/wien2k/CaOs2_mode1_full.ctqmcout.gz differ
diff --git a/test/python/wien2k/CaOs2_mode1_full.indmftpr b/test/python/wien2k/CaOs2_mode1_full.indmftpr
new file mode 100644
index 0000000..13e6507
--- /dev/null
+++ b/test/python/wien2k/CaOs2_mode1_full.indmftpr
@@ -0,0 +1,11 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+cubic
+0 0 2 0
+0 0 0 0
+1
+-2.0 3.0 1
diff --git a/test/python/wien2k/CaOs2_mode2_full.ctqmcout.gz b/test/python/wien2k/CaOs2_mode2_full.ctqmcout.gz
new file mode 100644
index 0000000..38b1ece
Binary files /dev/null and b/test/python/wien2k/CaOs2_mode2_full.ctqmcout.gz differ
diff --git a/test/python/wien2k/CaOs2_mode2_full.indmftpr b/test/python/wien2k/CaOs2_mode2_full.indmftpr
new file mode 100644
index 0000000..7732eb7
--- /dev/null
+++ b/test/python/wien2k/CaOs2_mode2_full.indmftpr
@@ -0,0 +1,11 @@
+2
+1 2
+3
+complex
+0 0 0 0
+0 0 0 0
+cubic
+0 0 2 0
+0 0 0 0
+1
+43 92 2
diff --git a/test/python/wien2k/CaOs2_partial.indmftpr b/test/python/wien2k/CaOs2_partial.indmftpr
new file mode 100644
index 0000000..afcca02
--- /dev/null
+++ b/test/python/wien2k/CaOs2_partial.indmftpr
@@ -0,0 +1,11 @@
+2
+1 2
+3
+complex
+0 0 1 0
+0 0 0 0
+cubic
+0 0 2 0
+0 0 0 0
+1
+-0.15 0.30
diff --git a/test/python/wien2k/CaOs2_partial.parproj.gz b/test/python/wien2k/CaOs2_partial.parproj.gz
new file mode 100644
index 0000000..6507818
Binary files /dev/null and b/test/python/wien2k/CaOs2_partial.parproj.gz differ
diff --git a/test/python/wien2k/CaOs2_partial.sympar.gz b/test/python/wien2k/CaOs2_partial.sympar.gz
new file mode 100644
index 0000000..e4e2f53
Binary files /dev/null and b/test/python/wien2k/CaOs2_partial.sympar.gz differ
diff --git a/test/python/wien2k/jbasis_d.dat b/test/python/wien2k/jbasis_d.dat
new file mode 100644
index 0000000..95c4843
--- /dev/null
+++ b/test/python/wien2k/jbasis_d.dat
@@ -0,0 +1,10 @@
+ -0.89442719 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.44721360 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+ 0.00000000 0.00000000 -0.77459667 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.63245553 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+ 0.00000000 0.00000000 0.00000000 0.00000000 -0.63245553 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.77459667 0.00000000 0.00000000 0.00000000
+*0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 -0.44721360 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.89442719 0.00000000
+ 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+ 0.44721360 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.89442719 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+ 0.00000000 0.00000000 0.63245553 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.77459667 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+ 0.00000000 0.00000000 0.00000000 0.00000000 0.77459667 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.63245553 0.00000000 0.00000000 0.00000000
+ 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.89442719 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.44721360 0.00000000
+*0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
diff --git a/test/python/wien2k/wien2k_ctqmcout_python.py b/test/python/wien2k/wien2k_ctqmcout_python.py
new file mode 100644
index 0000000..e870cca
--- /dev/null
+++ b/test/python/wien2k/wien2k_ctqmcout_python.py
@@ -0,0 +1,85 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Verify the pure-Python case.ctqmcout generator (triqs_dftkit.wien2k.ctqmcout)
+# reproduces the dmftproj Fortran correlated-shell projectors to machine
+# precision: regenerate case.ctqmcout from the almblm/struct/dmftsym + a wide
+# energy window and compare to the precision-fixed dmftproj reference.
+#
+# The window (-2.0, 3.0) keeps 50 bands, more than the 20 correlated spin-orbitals
+# of the two SOC Os d shells, so the Loewdin overlap O is full rank. (The physical
+# narrow-window CaOs2 of the SOC converter test makes O rank-deficient: O^{-1/2}
+# then amplifies the last-ULP libm difference between gfortran and numpy, which is
+# a numerical property of that degenerate case, not of the port.) Reference built
+# with the precision-fixed dmftproj (PR #14) and full-precision templates.
+#
+# CaOs2_jbasis_full exercises the spin-mixing fromfile (|j, m_j>) path: the Os d
+# shell is a 2(2l+1)=10 spinor basis (jbasis_d.dat), so the projector, Rloc
+# rotrep and complex-harmonics transform blocks are the full mixing matrices the
+# dft_tools #148 path singles out. Same wide window for the full-rank Loewdin.
+#
+# CaOs2_mode1_full and CaOs2_mode2_full exercise the band-index projection modes
+# (set_projections.f:70-88). Mode 1 ("-2.0 3.0 1") scans all spins/k for the
+# global band-index window; mode 2 ("43 92 2") takes the indices straight from
+# the window line. Both resolve to bands 43..92 (50 bands > 20 correlated
+# spin-orbitals), so the Loewdin overlap stays full rank and the projectors
+# match the precision-fixed dmftproj to machine precision.
+
+import gzip
+import os
+import shutil
+import tempfile
+
+from triqs_dftkit.wien2k import ctqmcout
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+
+def _gunzip(src, dst):
+ with gzip.open(src, 'rb') as fi, open(dst, 'wb') as fo:
+ shutil.copyfileobj(fi, fo)
+
+
+def _compare(got_path, ref_lines):
+ got = open(got_path).read().split()
+ ref = ''.join(ref_lines).split()
+ assert len(got) == len(ref), (len(got), len(ref))
+ max_int, max_float = 0, 0.0
+ for a, b in zip(got, ref):
+ if a.lstrip('-').isdigit() and b.lstrip('-').isdigit():
+ max_int = max(max_int, abs(int(a) - int(b)))
+ else:
+ max_float = max(max_float, abs(float(a) - float(b)))
+ assert max_int == 0, f'integer field differs (max {max_int})'
+ assert max_float < 1e-11, f'float field differs (max {max_float:.2e})'
+
+
+def _check(case):
+ tmp = tempfile.mkdtemp()
+ try:
+ shutil.copy(os.path.join(HERE, f'{case}.indmftpr'),
+ os.path.join(tmp, f'{case}.indmftpr'))
+ if os.path.exists(os.path.join(HERE, 'jbasis_d.dat')):
+ shutil.copy(os.path.join(HERE, 'jbasis_d.dat'),
+ os.path.join(tmp, 'jbasis_d.dat'))
+ for ext in ('struct', 'dmftsym'):
+ shutil.copy(os.path.join(HERE, f'CaOs2.{ext}'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ for ext in ('almblmup', 'almblmdn'):
+ _gunzip(os.path.join(HERE, f'CaOs2.{ext}.gz'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ ctqmcout.write_ctqmcout(os.path.join(tmp, case))
+ with gzip.open(os.path.join(HERE, f'{case}.ctqmcout.gz'), 'rt') as fh:
+ _compare(os.path.join(tmp, f'{case}.ctqmcout'), fh.readlines())
+ finally:
+ shutil.rmtree(tmp)
+
+
+_check('CaOs2_full')
+_check('CaOs2_jbasis_full')
+_check('CaOs2_mode1_full') # proj_mode 1: band-index window 43..92
+_check('CaOs2_mode2_full') # proj_mode 2: explicit band indices 43 92
+
+print('wien2k_ctqmcout_python: ok')
diff --git a/test/python/wien2k/wien2k_dmftproj_common_python.py b/test/python/wien2k/wien2k_dmftproj_common_python.py
new file mode 100644
index 0000000..3e46cab
--- /dev/null
+++ b/test/python/wien2k/wien2k_dmftproj_common_python.py
@@ -0,0 +1,112 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Unit tests for the shared dmftproj machinery (triqs_dftkit.wien2k._dmftproj),
+# the module the five case.* generators are built on. The generators' golden
+# tests cover the assembled output; these exercise the isolated primitives
+# directly so a regression in a shared unit is caught at its source.
+
+import os
+import tempfile
+
+import numpy as np
+
+from triqs_dftkit.wien2k import _dmftproj as dp
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+
+# --- list-directed numeric parsing -------------------------------------------
+
+assert dp.to_float('1.0D-3') == 1.0e-3
+assert dp.to_float('4.57E-002') == 4.57e-2
+assert dp.to_float('-2.5d0') == -2.5
+
+assert dp.to_complex('(1.0,-2.0)') == complex(1.0, -2.0)
+
+
+def _reader(text):
+ fh = tempfile.NamedTemporaryFile('w', suffix='.tmp', delete=False)
+ fh.write(text)
+ fh.close()
+ return dp.Reader(fh.name)
+
+
+r = _reader('(1.0,2.0)\n(3.0,-4.0) (5.0,6.0)\n')
+assert dp.read_complex(r) == complex(1.0, 2.0)
+a, b = dp.read_two_complex(r)
+assert a == complex(3.0, -4.0) and b == complex(5.0, 6.0)
+
+
+# --- angular basis: cubic transform, with and without the float32 cast -------
+
+exact = dp.reptrans('cubic', 2, cast=False)
+cast = dp.reptrans('cubic', 2, cast=True)
+assert exact.shape == (5, 5)
+# unitary
+assert np.max(np.abs(exact @ np.conj(exact.T) - np.eye(5))) < 1e-12
+# the cast truncates 1/sqrt2 to single precision (the dmftproj #148 noise)
+assert abs(abs(exact[1, 0]) - 2 ** -0.5) < 1e-15
+assert 0 < abs(abs(cast[1, 0]) - 2 ** -0.5) < 1e-6
+assert dp.reptrans('complex', 2).shape == (5, 5)
+assert np.allclose(dp.reptrans('complex', 2), np.eye(5))
+
+
+# --- Wigner D and orbital time reversal --------------------------------------
+
+for l in (1, 2):
+ D0 = dp.dmat(l, 0.0, 0.0, 0.0, 1.0)
+ assert np.max(np.abs(D0 - np.eye(2 * l + 1))) < 1e-12 # zero rotation
+ D = dp.dmat(l, 0.3, 0.7, 1.1, 1.0)
+ assert np.max(np.abs(D @ np.conj(D.T) - np.eye(2 * l + 1))) < 1e-12 # unitary
+ T = dp.tmat(l)
+ for m in range(-l, l + 1):
+ assert T[-m + l, m + l] == (-1) ** m
+
+
+# --- select_window: contiguous band range in (e1, e2] ------------------------
+
+eband = np.array([-1.0, -0.1, 0.05, 0.2, 0.5]) # bands 10..14, window (-0.15, 0.30]
+incl, lo, hi = dp.select_window(10, 14, eband, -0.15, 0.30)
+assert incl and lo == 11 and hi == 13
+
+
+# --- band-index window (proj_mode 1/2) ---------------------------------------
+
+# set_projections.f:70-88: every k included, indices clamped to nbmin/nbmax.
+incl, lo, hi = dp.select_band_window(1, 92, 60, 76)
+assert incl and lo == 60 and hi == 76
+incl, lo, hi = dp.select_band_window(50, 80, 43, 92) # clamp both ends
+assert incl and lo == 50 and hi == 80
+
+# proj_mode 2 takes b_bot/b_top straight from the (rounded) window line.
+m2 = {'proj_mode': 2, 'e_bot': 43.0, 'e_top': 92.0}
+assert dp.band_index_window(m2, []) == (43, 92)
+
+# proj_mode 1 scans the (e_bot, e_top] energies for the global band-index range.
+m1 = {'proj_mode': 1, 'e_bot': -0.15, 'e_top': 0.30}
+spins = [{'kp': [{'nbmin': 1, 'nbmax': 5,
+ 'eband': np.array([-1.0, -0.1, 0.05, 0.2, 0.5])}]}]
+assert dp.band_index_window(m1, spins) == (2, 4)
+
+
+# --- case.indmftpr / case.dmftsym structured parse ---------------------------
+
+info = dp.read_indmftpr(os.path.join(HERE, 'CaOs2.indmftpr'))
+assert info['nsort'] == 2 and info['mult'] == [1, 2] and info['lmax'] == 3
+assert info['so'] == 1
+assert info['sorts'][1]['correlated_ls'] == [2] # Os d correlated
+assert info['sorts'][0]['correlated_ls'] == [] # Ca nothing
+
+part = dp.read_indmftpr(os.path.join(HERE, 'CaOs2_partial.indmftpr'))
+assert part['sorts'][0]['included_ls'] == [2] # Ca d now an included shell
+assert part['sorts'][0]['correlated_ls'] == []
+assert part['sorts'][1]['correlated_ls'] == [2]
+
+nsym, ops = dp.read_dmftsym(os.path.join(HERE, 'CaOs2.dmftsym'))
+assert nsym == 16 and len(ops) == 16
+assert all(o['krotm'].shape == (3, 3) and len(o['perm']) == 3 for o in ops)
+
+print('wien2k_dmftproj_common: ok')
diff --git a/test/python/wien2k/wien2k_oubwin_python.py b/test/python/wien2k/wien2k_oubwin_python.py
new file mode 100644
index 0000000..3665ca3
--- /dev/null
+++ b/test/python/wien2k/wien2k_oubwin_python.py
@@ -0,0 +1,60 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Verify the pure-Python case.oubwin generator (triqs_dftkit.wien2k.oubwin)
+# reproduces the dmftproj Fortran output: regenerate case.oubwinup / case.oubwindn
+# from case.almblm{up,dn} + case.indmftpr and compare byte for byte to the
+# committed dmftproj references (the same files the SOC converter test consumes).
+#
+# CaOs2 is spin-orbit + spin-polarized. The almblm fixtures are gzipped to keep
+# the tree small (they are shared with the ctqmcout test, which needs the full
+# projector payload).
+#
+# CaOs2_mode1 repeats the same physical band selection through the band-index
+# projection path (proj_mode 1): the window line "-0.15 0.30 1" is scanned over
+# all spins/k for the global min/max band index (bands 60..76), the same range
+# the energy window picks, so the reference is identical and the mode-1 code in
+# set_projections.f:70-88 is exercised against the dmftproj Fortran output.
+
+import gzip
+import os
+import shutil
+import tempfile
+
+from triqs_dftkit.wien2k import oubwin
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+
+def _gunzip(src, dst):
+ with gzip.open(src, 'rb') as fi, open(dst, 'wb') as fo:
+ shutil.copyfileobj(fi, fo)
+
+
+def _check(case, almblm='CaOs2'):
+ """Regenerate .oubwin{up,dn} from the almblm fixtures and
+ compare byte for byte. `almblm` selects which gzipped almblm payload to feed
+ (the band-index fixtures reuse the CaOs2 coefficients with a different
+ indmftpr window line)."""
+ tmp = tempfile.mkdtemp()
+ try:
+ shutil.copy(os.path.join(HERE, f'{case}.indmftpr'),
+ os.path.join(tmp, f'{case}.indmftpr'))
+ for ext in ('almblmup', 'almblmdn'):
+ _gunzip(os.path.join(HERE, f'{almblm}.{ext}.gz'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ oubwin.write_oubwin(os.path.join(tmp, case))
+ for ext in ('oubwinup', 'oubwindn'):
+ got = open(os.path.join(tmp, f'{case}.{ext}')).read()
+ ref = open(os.path.join(HERE, f'{case}.{ext}')).read()
+ assert got == ref, f'{case}.{ext} differs from dmftproj reference'
+ finally:
+ shutil.rmtree(tmp)
+
+
+_check('CaOs2')
+_check('CaOs2_mode1') # proj_mode 1: band-index window 60..76
+
+print('wien2k_oubwin_python: ok')
diff --git a/test/python/wien2k/wien2k_outband_python.py b/test/python/wien2k/wien2k_outband_python.py
new file mode 100644
index 0000000..216e2d2
--- /dev/null
+++ b/test/python/wien2k/wien2k_outband_python.py
@@ -0,0 +1,88 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Verify the pure-Python case.outband generator (triqs_dftkit.wien2k.outband)
+# reproduces the dmftproj Fortran band-structure projectors to machine
+# precision: regenerate case.outband from the band-mode almblm/struct/dmftsym,
+# the k-path (klist_band) and the band indmftpr, and compare to the
+# precision-fixed dmftproj -band reference.
+#
+# case.outband feeds convert_bands_input. It is the band analog of
+# case.ctqmcout: the same correlated-shell projector construction (raw Alm/Clm
+# projector -> rot_projectmat -> fromfile/cubic transmat -> Loewdin
+# orthonormalization) plus the raw Theta projectors of the parproj path, written
+# in the outband layout. The CaOs2_band fixture is SP+SO with the spin-mixing
+# fromfile (|j, m_j>) Os d shell (jbasis_d.dat); the wide window (-2.0, 3.0)
+# keeps 50 bands > 20 correlated spin-orbitals, so the Loewdin overlap is full
+# rank and the projectors match to machine precision.
+#
+# Band-mode specifics (dmftproj.f:557-581): nkband, the number of k-points along
+# the plotted path, is read from CaOs2_band.klist_band; the Fermi energy is the
+# last line of CaOs2_band.indmftpr (the band almblm keeps a placeholder eferm
+# record that the reader skips).
+
+import gzip
+import os
+import shutil
+import tempfile
+
+from triqs_dftkit.wien2k import outband
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+
+def _gunzip(src, dst):
+ with gzip.open(src, 'rb') as fi, open(dst, 'wb') as fo:
+ shutil.copyfileobj(fi, fo)
+
+
+def _compare(got_path, ref_lines):
+ got = open(got_path).read().split()
+ ref = ''.join(ref_lines).split()
+ assert len(got) == len(ref), (len(got), len(ref))
+ max_int, max_float = 0, 0.0
+ for a, b in zip(got, ref):
+ if a.lstrip('-').isdigit() and b.lstrip('-').isdigit():
+ max_int = max(max_int, abs(int(a) - int(b)))
+ elif _isfloat(a) and _isfloat(b):
+ max_float = max(max_float, abs(float(a) - float(b)))
+ else:
+ assert a == b, (a, b) # k-label tokens
+ assert max_int == 0, f'integer field differs (max {max_int})'
+ assert max_float < 1e-11, f'float field differs (max {max_float:.2e})'
+
+
+def _isfloat(tok):
+ try:
+ float(tok)
+ return True
+ except ValueError:
+ return False
+
+
+def _check(case):
+ tmp = tempfile.mkdtemp()
+ try:
+ for ext in ('indmftpr', 'klist_band'):
+ shutil.copy(os.path.join(HERE, f'{case}.{ext}'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ shutil.copy(os.path.join(HERE, 'jbasis_d.dat'),
+ os.path.join(tmp, 'jbasis_d.dat'))
+ for ext in ('struct', 'dmftsym'):
+ shutil.copy(os.path.join(HERE, f'CaOs2.{ext}'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ for ext in ('almblmup', 'almblmdn'):
+ _gunzip(os.path.join(HERE, f'{case}.{ext}.gz'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ outband.write_outband(os.path.join(tmp, case))
+ with gzip.open(os.path.join(HERE, f'{case}.outband.gz'), 'rt') as fh:
+ _compare(os.path.join(tmp, f'{case}.outband'), fh.readlines())
+ finally:
+ shutil.rmtree(tmp)
+
+
+_check('CaOs2_band')
+
+print('wien2k_outband_python: ok')
diff --git a/test/python/wien2k/wien2k_parproj_python.py b/test/python/wien2k/wien2k_parproj_python.py
new file mode 100644
index 0000000..4eac18e
--- /dev/null
+++ b/test/python/wien2k/wien2k_parproj_python.py
@@ -0,0 +1,69 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Verify the pure-Python case.parproj generator (triqs_dftkit.wien2k.parproj)
+# reproduces the dmftproj Fortran output. parproj holds the partial projectors
+# and density matrices for the INCLUDED orbitals; the CaOs2_partial fixture adds
+# an uncorrelated Ca d-shell. Inputs are the shared CaOs2 almblm/struct/dmftsym
+# renamed to the CaOs2_partial case.
+#
+# Floats compared at 1e-6 (dmftproj single-precision basis-transform floor).
+
+import gzip
+import os
+import shutil
+import tempfile
+
+from triqs_dftkit.wien2k import parproj
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+
+def _gunzip(src, dst):
+ with gzip.open(src, 'rb') as fi, open(dst, 'wb') as fo:
+ shutil.copyfileobj(fi, fo)
+
+
+def _compare(got_path, ref_lines):
+ got = open(got_path).read().split()
+ ref = ''.join(ref_lines).split()
+ assert len(got) == len(ref), (len(got), len(ref))
+ max_int, max_float = 0, 0.0
+ for a, b in zip(got, ref):
+ if a.lstrip('-').isdigit() and b.lstrip('-').isdigit():
+ max_int = max(max_int, abs(int(a) - int(b)))
+ else:
+ max_float = max(max_float, abs(float(a) - float(b)))
+ assert max_int == 0, f'integer field differs (max {max_int})'
+ assert max_float < 1e-11, f'float field differs (max {max_float:.2e})'
+
+
+def _check(case):
+ tmp = tempfile.mkdtemp()
+ try:
+ shutil.copy(os.path.join(HERE, f'{case}.indmftpr'),
+ os.path.join(tmp, f'{case}.indmftpr'))
+ if os.path.exists(os.path.join(HERE, 'jbasis_d.dat')):
+ shutil.copy(os.path.join(HERE, 'jbasis_d.dat'),
+ os.path.join(tmp, 'jbasis_d.dat'))
+ for ext in ('struct', 'dmftsym'):
+ shutil.copy(os.path.join(HERE, f'CaOs2.{ext}'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ for ext in ('almblmup', 'almblmdn'):
+ _gunzip(os.path.join(HERE, f'CaOs2.{ext}.gz'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ parproj.write_parproj(os.path.join(tmp, case))
+ with gzip.open(os.path.join(HERE, f'{case}.parproj.gz'), 'rt') as fh:
+ _compare(os.path.join(tmp, f'{case}.parproj'), fh.readlines())
+ finally:
+ shutil.rmtree(tmp)
+
+
+_check('CaOs2_partial')
+# Spin-mixing fromfile (|j, m_j>) included shell: the full 2(2l+1) Theta
+# projector, density matrix and Rloc rotrep on the single is=1 block.
+_check('CaOs2_jbasis_full')
+
+print('wien2k_parproj_python: ok')
diff --git a/test/python/wien2k/wien2k_soc_convert.py b/test/python/wien2k/wien2k_soc_convert.py
new file mode 100644
index 0000000..dc2a426
--- /dev/null
+++ b/test/python/wien2k/wien2k_soc_convert.py
@@ -0,0 +1,39 @@
+################################################################################
+#
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+#
+# Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola
+#
+# TRIQS is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# TRIQS. If not, see .
+#
+################################################################################
+
+# Spin-orbit + spin-polarized Wien2k converter test.
+#
+# CaOs2 is a cubic fluorite-type cell with two symmetry-equivalent correlated Os
+# atoms; its magnetic point group has 16 operations, 8 of them time-reversal.
+# This exercises the SOC path of dmftproj and the converter (combined-spin 'ud'
+# block, time-reversal symmetry operations) that the non-SOC SrVO3 test does not.
+
+from h5 import *
+from triqs.utility.h5diff import h5diff
+import triqs.utility.mpi as mpi
+from triqs_dftkit.wien2k import Converter
+
+Converter = Converter(filename='CaOs2')
+Converter.hdf_file = 'wien2k_soc_convert.out.h5'
+Converter.convert_dft_input()
+
+if mpi.is_master_node():
+ h5diff('wien2k_soc_convert.out.h5', 'wien2k_soc_convert.ref.h5')
diff --git a/test/python/wien2k/wien2k_soc_convert.ref.h5 b/test/python/wien2k/wien2k_soc_convert.ref.h5
new file mode 100644
index 0000000..68dfa81
Binary files /dev/null and b/test/python/wien2k/wien2k_soc_convert.ref.h5 differ
diff --git a/test/python/wien2k/wien2k_sympar_python.py b/test/python/wien2k/wien2k_sympar_python.py
new file mode 100644
index 0000000..d4a8f7b
--- /dev/null
+++ b/test/python/wien2k/wien2k_sympar_python.py
@@ -0,0 +1,70 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Verify the pure-Python case.sympar generator (triqs_dftkit.wien2k.sympar)
+# reproduces the dmftproj Fortran output. sympar holds the symmetry matrices for
+# all INCLUDED orbitals (correlated + partial), so the CaOs2_partial fixture adds
+# an uncorrelated Ca d-shell to the correlated Os d-shells. Inputs are the shared
+# CaOs2 almblm/struct/dmftsym renamed to the CaOs2_partial case.
+#
+# Floats compared at 1e-6: dmftproj stores the cubic basis transform through a
+# single-precision CMPLX cast, so its matrices carry ~1e-7 noise the double-
+# precision generator reproduces to the same floor.
+
+import gzip
+import os
+import shutil
+import tempfile
+
+from triqs_dftkit.wien2k import sympar
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+
+def _gunzip(src, dst):
+ with gzip.open(src, 'rb') as fi, open(dst, 'wb') as fo:
+ shutil.copyfileobj(fi, fo)
+
+
+def _compare(got_path, ref_lines):
+ got = open(got_path).read().split()
+ ref = ''.join(ref_lines).split()
+ assert len(got) == len(ref), (len(got), len(ref))
+ max_int, max_float = 0, 0.0
+ for a, b in zip(got, ref):
+ if a.lstrip('-').isdigit() and b.lstrip('-').isdigit():
+ max_int = max(max_int, abs(int(a) - int(b)))
+ else:
+ max_float = max(max_float, abs(float(a) - float(b)))
+ assert max_int == 0, f'integer field differs (max {max_int})'
+ assert max_float < 1e-11, f'float field differs (max {max_float:.2e})'
+
+
+def _check(case):
+ tmp = tempfile.mkdtemp()
+ try:
+ shutil.copy(os.path.join(HERE, f'{case}.indmftpr'),
+ os.path.join(tmp, f'{case}.indmftpr'))
+ if os.path.exists(os.path.join(HERE, 'jbasis_d.dat')):
+ shutil.copy(os.path.join(HERE, 'jbasis_d.dat'),
+ os.path.join(tmp, 'jbasis_d.dat'))
+ for ext in ('struct', 'dmftsym'):
+ shutil.copy(os.path.join(HERE, f'CaOs2.{ext}'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ for ext in ('almblmup', 'almblmdn'):
+ _gunzip(os.path.join(HERE, f'CaOs2.{ext}.gz'),
+ os.path.join(tmp, f'{case}.{ext}'))
+ sympar.write_sympar(os.path.join(tmp, case))
+ with gzip.open(os.path.join(HERE, f'{case}.sympar.gz'), 'rt') as fh:
+ _compare(os.path.join(tmp, f'{case}.sympar'), fh.readlines())
+ finally:
+ shutil.rmtree(tmp)
+
+
+_check('CaOs2_partial')
+# Spin-mixing fromfile (|j, m_j>) included shell: the full 2(2l+1) srot%rotrep.
+_check('CaOs2_jbasis_full')
+
+print('wien2k_sympar_python: ok')
diff --git a/test/python/wien2k/wien2k_symqmc_jbasis.ref.npy b/test/python/wien2k/wien2k_symqmc_jbasis.ref.npy
new file mode 100644
index 0000000..4cce82c
Binary files /dev/null and b/test/python/wien2k/wien2k_symqmc_jbasis.ref.npy differ
diff --git a/test/python/wien2k/wien2k_symqmc_l0.ref.npy b/test/python/wien2k/wien2k_symqmc_l0.ref.npy
new file mode 100644
index 0000000..ae517ee
Binary files /dev/null and b/test/python/wien2k/wien2k_symqmc_l0.ref.npy differ
diff --git a/test/python/wien2k/wien2k_symqmc_mixing.py b/test/python/wien2k/wien2k_symqmc_mixing.py
new file mode 100644
index 0000000..da6850e
--- /dev/null
+++ b/test/python/wien2k/wien2k_symqmc_mixing.py
@@ -0,0 +1,88 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Verify the pure-Python case.symqmc generator on the two paths the spin-diagonal
+# cubic test (wien2k_symqmc_python) does not exercise:
+#
+# - a spin-mixing fromfile basis (the |j, m_j> basis), which uses the full
+# 2(2l+1) spinor representation and the spinor time-reversal operator;
+# - an l = 0 (s) correlated shell, the 2x2 spin phase block.
+#
+# Both reuse the CaOs2 symmetry input (16 operations, 8 of them time-reversal).
+# The reference is the dmftproj Fortran case.symqmc for the same input, stored as
+# the matrix data in single precision: dmftproj reads the fromfile basis with a
+# single-precision CMPLX cast (set_ang_trans.f), so its output there carries a
+# ~1e-7 error. The generator is full double precision, so we compare at 1e-6 and
+# separately assert each Python spinor matrix is unitary.
+
+import os
+import shutil
+import tempfile
+import numpy as np
+
+from triqs_dftkit.wien2k import symqmc
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+
+def _matrix_data(symqmc_path, nsym, natom):
+ """Flat array of the matrix blocks, skipping header/perm/timeflag lines."""
+ toks = iter(open(symqmc_path).read().split())
+ assert int(next(toks)) == nsym and int(next(toks)) == natom
+ for _ in range(nsym * natom + nsym): # perm rows + the time-reversal flags
+ next(toks)
+ return np.array([float(x) for x in toks])
+
+
+def _run(indmftpr, extra=()):
+ """Generate case.symqmc in a scratch dir from the shared CaOs2 symmetry
+ input and the given indmftpr, returning (matrix data, shells, ops, so)."""
+ tmp = tempfile.mkdtemp()
+ try:
+ for src, dst in (('CaOs2.dmftsym', 'case.dmftsym'),
+ ('CaOs2.struct', 'case.struct'),
+ (indmftpr, 'case.indmftpr')) + extra:
+ shutil.copy(os.path.join(HERE, src), os.path.join(tmp, dst))
+ case = os.path.join(tmp, 'case')
+ symqmc.write_symqmc(case)
+ nsym, ops = symqmc._read_dmftsym(case + '.dmftsym')
+ shells, so = symqmc._read_correlated_shells(
+ case + '.indmftpr', case + '.struct')
+ natom = len(ops[0]['perm'])
+ return _matrix_data(case + '.symqmc', nsym, natom), shells, ops, so
+ finally:
+ shutil.rmtree(tmp)
+
+
+def _timeinv(op, so):
+ k = op['krotm']
+ return 1 if (so and k[0, 0] * k[1, 1] - k[0, 1] * k[1, 0] < 0.0) else 0
+
+
+def _check(indmftpr, ref_npy, extra=(), unit_tol=1e-7):
+ data, shells, ops, so = _run(indmftpr, extra)
+ ref = np.load(os.path.join(HERE, ref_npy))
+ assert data.shape == ref.shape, (data.shape, ref.shape)
+ assert np.max(np.abs(data - ref)) < 1e-11, np.max(np.abs(data - ref))
+ for op in ops:
+ for sh in shells:
+ mat = symqmc._shell_matrix(op, sh, _timeinv(op, so))
+ dev = np.max(np.abs(mat @ np.conj(mat.T) - np.eye(mat.shape[0])))
+ assert dev < unit_tol, ('not unitary', dev)
+
+
+# spin-mixing |j, m_j> basis: the path dft_tools #148 singles out
+data, shells, _, _ = _run('CaOs2_jbasis.indmftpr',
+ (('jbasis_d.dat', 'jbasis_d.dat'),))
+assert shells[0]['mixing'] and shells[0]['P'].shape == (10, 10)
+_check('CaOs2_jbasis.indmftpr', 'wien2k_symqmc_jbasis.ref.npy',
+ (('jbasis_d.dat', 'jbasis_d.dat'),))
+
+# l = 0 (s) correlated shell
+_, shells, _, _ = _run('CaOs2_l0.indmftpr')
+assert shells[0]['l'] == 0
+_check('CaOs2_l0.indmftpr', 'wien2k_symqmc_l0.ref.npy', unit_tol=1e-12)
+
+print('wien2k_symqmc_mixing: ok')
diff --git a/test/python/wien2k/wien2k_symqmc_python.py b/test/python/wien2k/wien2k_symqmc_python.py
new file mode 100644
index 0000000..c60b24a
--- /dev/null
+++ b/test/python/wien2k/wien2k_symqmc_python.py
@@ -0,0 +1,23 @@
+################################################################################
+# TRIQS: a Toolbox for Research in Interacting Quantum Systems
+# (GPL-3.0-or-later)
+################################################################################
+
+# Verify the pure-Python case.symqmc generator (triqs_dftkit.wien2k.symqmc)
+# reproduces the dmftproj Fortran output: regenerate case.symqmc in Python from
+# case.dmftsym + case.indmftpr + case.struct, convert, and compare the resulting
+# HDF5 to the reference produced from the Fortran dmftproj symqmc.
+
+from triqs_dftkit.wien2k.symqmc import write_symqmc
+from triqs_dftkit.wien2k import Converter
+from triqs.utility.h5diff import h5diff
+import triqs.utility.mpi as mpi
+
+write_symqmc('CaOs2')
+
+Converter = Converter(filename='CaOs2')
+Converter.hdf_file = 'wien2k_symqmc_python.out.h5'
+Converter.convert_dft_input()
+
+if mpi.is_master_node():
+ h5diff('wien2k_symqmc_python.out.h5', 'wien2k_soc_convert.ref.h5')