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')