diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1244e637..a49a81eb 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,4 +1,4 @@
-name: Run all tests
+name: Run tests with triqs
on: [push, pull_request]
jobs:
all-tests:
diff --git a/.github/workflows/ci_dcorelib.yml b/.github/workflows/ci_dcorelib.yml
index b39a21c4..aacf5fc7 100644
--- a/.github/workflows/ci_dcorelib.yml
+++ b/.github/workflows/ci_dcorelib.yml
@@ -1,4 +1,4 @@
-name: Build/test suite
+name: Run tests with dcorelib
on: [push, pull_request]
jobs:
build:
@@ -19,6 +19,11 @@ jobs:
steps:
- uses: actions/checkout@v2
+ - name: apt
+ if: ${{ runner.os == 'Linux' }}
+ run: |
+ sudo apt update
+ sudo apt install liblapack-dev openmpi-bin libopenmpi-dev libscalapack-openmpi-dev
- uses: mpi4py/setup-mpi@v1
- name: Set up python ${{ matrix.python }}
@@ -35,8 +40,27 @@ jobs:
run: |
pip install .[dev]
+ - name: make workspace [HPhi]
+ run: |
+ pwd
+ cmake -E make_directory ${{runner.workspace}}/HPhi/build
+
+ - name: download [HPhi]
+ working-directory: ${{runner.workspace}}/HPhi
+ run: |
+ wget https://github.com/issp-center-dev/HPhi/releases/download/v3.5.0/HPhi-3.5.0.tar.gz
+ tar zxvf HPhi-3.5.0.tar.gz
+
+ - name: cmake [HPhi]
+ working-directory: ${{runner.workspace}}/HPhi/build
+ shell: bash
+ run: |
+ cmake -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE ../HPhi-3.5.0 -DCMAKE_INSTALL_PREFIX=${{runner.workspace}}/HPhi
+ make install
+
- name: Test with pytest
run: |
export DCORE_TRIQS_COMPAT=1
+ export PATH=${{runner.workspace}}/HPhi/bin:$PATH
pytest tests/non-mpi/*/*.py
- mpirun -np 2 pytest tests/mpi/*/*.py
\ No newline at end of file
+ mpirun -np 2 pytest tests/mpi/*/*.py
diff --git a/setup.py b/setup.py
index f2347cb4..7c415243 100644
--- a/setup.py
+++ b/setup.py
@@ -47,7 +47,7 @@
# Import h5py imports mpi4py automatically.
'h5py!=2.10.0',
'toml>=0.10',
- 'dcorelib>=0.7.1',
+ 'dcorelib>=0.9.1',
'sympy',
],
diff --git a/src/dcore/dcore_bse.py b/src/dcore/dcore_bse.py
index 4e43ea9a..a9467aa9 100644
--- a/src/dcore/dcore_bse.py
+++ b/src/dcore/dcore_bse.py
@@ -482,7 +482,7 @@ def calc_num_flavors(_ish):
print(" skip")
return
- Gloc_iw_sh, _ = self.calc_Gloc()
+ Gloc_iw_sh, _, _ = self.calc_Gloc()
solver_name = self._params['impurity_solver']['name']
# generate sampling points of Matsubara frequencies
diff --git a/src/dcore/dcore_post.py b/src/dcore/dcore_post.py
index 220b6e11..23ef2fb9 100644
--- a/src/dcore/dcore_post.py
+++ b/src/dcore/dcore_post.py
@@ -134,7 +134,7 @@ def calc_Sigma_w(self, mesh):
solver_name = self._params['impurity_solver']['name']
Solver = impurity_solvers.solver_classes[solver_name]
if Solver.is_gf_realomega_available():
- Gloc_iw_sh, _ = self.calc_Gloc()
+ Gloc_iw_sh, _, _ = self.calc_Gloc()
_, _, sigma_w = self.solve_impurity_models(Gloc_iw_sh, -1, mesh)
return sigma_w
else:
diff --git a/src/dcore/dmft_core.py b/src/dcore/dmft_core.py
index a663b74a..65478438 100644
--- a/src/dcore/dmft_core.py
+++ b/src/dcore/dmft_core.py
@@ -615,7 +615,7 @@ def calc_Gloc(self):
diff = make_hermite_conjugate(g)
if diff > 1e-8:
print('Warning Gloc_iw at ish {} is not hermite conjugate: {}'.format(ish, diff))
- return r['Gloc_iw_sh'], r['dm_sh']
+ return r['Gloc_iw_sh'], r['dm_sh'], r['total_charge']
def print_density_matrix(self, dm_sh, smoment_sh):
@@ -821,7 +821,10 @@ def print_time(comment):
sys.stdout.flush()
# Compute Gloc_iw where the chemical potential is adjusted if needed
- Gloc_iw_sh, dm_sh = self.calc_Gloc()
+ Gloc_iw_sh, dm_sh, total_charge = self.calc_Gloc()
+ print("\n Total charge : %.6f" % total_charge)
+ self._quant_to_save_history['total_charge'] = total_charge
+
smoment_sh = spin_moments_sh(dm_sh)
self.print_density_matrix(dm_sh, smoment_sh)
self._quant_to_save_history['density_matrix'] = dm_sh
diff --git a/src/dcore/impurity_solvers/__init__.py b/src/dcore/impurity_solvers/__init__.py
index cee20c1e..7368182d 100644
--- a/src/dcore/impurity_solvers/__init__.py
+++ b/src/dcore/impurity_solvers/__init__.py
@@ -5,6 +5,8 @@
from .null_solver import NullSolver
from .alps_cthyb_seg import ALPSCTHYBSEGSolver
from .pomerol import PomerolSolver
+from .hphi import HPhiSolver
+from .jo_cthyb_seg import JOCTHYBSEGSolver
from .base import compute_basis_rot
solver_classes = {
@@ -15,4 +17,6 @@
'null': NullSolver,
'ALPS/cthyb-seg': ALPSCTHYBSEGSolver,
'pomerol': PomerolSolver,
+ 'HPhi': HPhiSolver,
+ 'JO/cthyb-seg': JOCTHYBSEGSolver,
}
diff --git a/src/dcore/impurity_solvers/alps_cthyb.py b/src/dcore/impurity_solvers/alps_cthyb.py
index ceab892d..e8ff821f 100644
--- a/src/dcore/impurity_solvers/alps_cthyb.py
+++ b/src/dcore/impurity_solvers/alps_cthyb.py
@@ -299,9 +299,9 @@ def conv(i):
G_l = make_block_gf(GfLegendre, self.gf_struct, self.beta, n_points=Nl)
assign_from_numpy_array_legendre(G_l, gl_data, self.block_names)
- # G_iw with 1/iwn tail
+ # G_iw
for name in self.block_names:
- self._Gimp_iw[name] << LegendreToMatsubara(G_l[name])
+ legendre_to_matsubara(G_l[name], self._Gimp_iw[name])
make_hermite_conjugate(self._Gimp_iw)
# Two-particle GF
diff --git a/src/dcore/impurity_solvers/hphi.py b/src/dcore/impurity_solvers/hphi.py
new file mode 100644
index 00000000..c8b4a81d
--- /dev/null
+++ b/src/dcore/impurity_solvers/hphi.py
@@ -0,0 +1,377 @@
+#
+# DCore -- Integrated DMFT software for correlated electrons
+# Copyright (C) 2017 The University of Tokyo
+#
+# This program 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.
+#
+# This program 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 this program. If not, see .
+#
+import numpy
+from itertools import product
+import os
+import sys
+from collections import namedtuple
+import shlex
+import math
+
+from dcore._dispatcher import *
+
+from ..tools import make_block_gf, launch_mpi_subprocesses, extract_H0, extract_bath_params, expand_path
+from .base import SolverBase
+from .hphi_spectrum import calc_one_body_green_core_parallel
+from .pomerol import assign_from_numpy_array
+
+
+namelist_def = """\
+ModPara modpara.def
+CalcMod calcmod.def
+LocSpin locspn.def
+Trans trans.def
+InterAll interall.def
+"""
+
+
+modpara_def = """\
+--------------------
+Model_Parameters 0
+--------------------
+HPhi_Cal_Parameters
+--------------------
+CDataFileHead zvo
+CParaFileHead zqp
+--------------------
+Nsite {0}
+Lanczos_max 2000
+initial_iv -1
+exct {1}
+LanczosEps 14
+LanczosTarget 2
+LargeValue 4.000000000000000e+00
+NumAve 5
+ExpecInterval 20
+NOmega {2}
+OmegaMax 0.0 {3}
+OmegaMin 0.0 {4}
+OmegaOrg 0.0 0.0
+"""
+
+
+calcmod_def = """\
+#CalcType = 0:Lanczos, 1:TPQCalc, 2:FullDiag, 3:CG, 4:Time-evolution
+#CalcModel = 0:Hubbard, 1:Spin, 2:Kondo, 3:HubbardGC, 4:SpinGC, 5:KondoGC
+#Restart = 0:None, 1:Save, 2:Restart&Save, 3:Restart
+#CalcSpec = 0:None, 1:Normal, 2:No H*Phi, 3:Save, 4:Restart, 5:Restart&Save
+CalcType 3
+CalcModel 3
+ReStart 0
+CalcSpec 0
+CalcEigenVec 0
+InitialVecType 0
+InputEigenVec 0
+OutputEigenVec 1
+InputHam 0
+OutputHam 0
+OutputExVec 0
+"""
+
+
+locspn_def = """\
+================================
+NlocalSpin 0
+================================
+========i_0LocSpn_1IteElc ======
+================================
+"""
+
+
+trans_def = """\
+========================
+NTransfer {0}
+========================
+========i_j_s_tijs======
+========================
+"""
+
+
+interall_def = """\
+======================
+NInterAll {0}
+======================
+========zInterAll=====
+======================
+"""
+
+
+class HPhiSolver(SolverBase):
+
+ def __init__(self, beta, gf_struct, u_mat, n_iw=1025):
+ """
+ Initialize the solver.
+ """
+
+ super(HPhiSolver, self).__init__(beta, gf_struct, u_mat, n_iw)
+
+ def solve(self, rot, mpirun_command, params_kw):
+ """
+ In addition to the parameters described in the docstring of SolverBase,
+ one can pass solver-dependent parameters using params_kw. For example,
+ exec_path : str, path to an executable, mandatory
+ dry_run : bool, actual computation is not performed if dry_run is True, optional
+ """
+
+ # (1) Set configuration for the impurity solver
+ # input:
+ # self.beta
+ # self.set_G0_iw
+ # self.u_mat
+ #
+ # Additionally, the following variables may be used:
+ # self.n_orb
+ # self.n_flavor
+ # self.gf_struct
+ # self.use_spin_orbit
+
+ exec_path = expand_path(params_kw['exec_path'])
+
+ # The number of process (np) must be 4^m in HPhi
+ mpirun_command_power4 = mpirun_command
+ commands = shlex.split(mpirun_command)
+ try:
+ np = int(commands[-1])
+ except ValueError:
+ np = None
+ print("A check of np is skipped.")
+ else:
+ if not math.log(np, 4).is_integer(): # check if np = 4^m
+ np_new = 4**int(math.log(np, 4))
+ print(f"Warning: np must be a power of 4 in HPhi. np is set to {np_new} in eigenenergies calculations. Note that np={np} is used for Gf calculations.", file=sys.stderr)
+ commands[-1] = str(np_new)
+ mpirun_command_power4 = " ".join(commands)
+
+ # Matsubara frequencies omega_n = (2*n+1)*pi*T
+ omega_min = numpy.pi / self.beta # n=0
+ omega_max = (2*self.n_iw + 1) * numpy.pi / self.beta # n=n_iw
+ # NOTE: omega_max is NOT included in the omega mesh.
+ # omega_n = (omega_max - omega_min) / n_iw * n
+ # for n=[0:n_iw)
+
+ # bath fitting
+ n_bath = params_kw.get('n_bath', 0) # 0 for Hubbard-I approximation
+ exct = params_kw.get('exct', 1) # number of states to be computed
+
+ fit_params = {}
+ for key in ['fit_gtol',]:
+ if key in params_kw:
+ fit_params[key] = params_kw[key]
+
+ n_site = self.n_orb + n_bath
+
+ exct_max = 4**n_site
+ if exct > exct_max:
+ print(f"Warning: exct={exct} is larger than {exct_max}. exct is set to {exct_max}", file=sys.stderr)
+ exct = exct_max
+
+ # Output namelist.def
+ with open('./namelist.def', 'w') as f:
+ print(namelist_def, end="", file=f)
+
+ # Output modpara.def
+ with open('./modpara.def', 'w') as f:
+ print(modpara_def.format(n_site, exct, self.n_iw, omega_max, omega_min), end="", file=f)
+
+ # Output calcmod.def
+ with open('./calcmod.def', 'w') as f:
+ print(calcmod_def, end="", file=f)
+
+ # Output locspn.def
+ with open('./locspn.def', 'w') as f:
+ print(locspn_def, end="", file=f)
+
+ for i in range(n_site):
+ print("{0} 0".format(i), file=f)
+
+ # -------------------------------------------------------------------------
+
+ # (1a) If H0 is necessary:
+ # Non-interacting part of the local Hamiltonian including chemical potential
+ # Make sure H0 is hermite.
+ # Ordering of index in H0 is spin1, spin1, ..., spin2, spin2, ...
+ h0_mat = extract_H0(self._G0_iw, self.block_names)
+ assert h0_mat.shape == (self.n_flavors, self.n_flavors)
+
+ # (1b) If Delta(iw) and/or Delta(tau) are necessary:
+ # Compute the hybridization function from G0:
+ # Delta(iwn_n) = iw_n - H0 - G0^{-1}(iw_n)
+ # H0 is extracted from the tail of the Green's function.
+ self._Delta_iw = delta(self._G0_iw)
+
+ bath_levels, bath_hyb = extract_bath_params(self._Delta_iw, self.beta, self.block_names, n_bath, **fit_params)
+ assert bath_levels.shape == (2*n_bath,)
+ assert bath_hyb.shape == (self.n_flavors, 2*n_bath)
+
+ # make hopping matrix
+ Transfer = namedtuple('Transfer', ('i1', 's1', 'i2', 's2', 't'))
+ transfer = []
+
+ # A. correlated sites
+ h0_isjs = h0_mat.reshape((2, self.n_orb, 2, self.n_orb))
+ for s1, s2 in product(range(2), repeat=2):
+ for i1, i2 in product(range(self.n_orb), repeat=2):
+ t = -h0_isjs[s1, i1, s2, i2]
+ # print(i1, s1, i2, s2, t.real, t.imag, file=f)
+ if t != 0:
+ transfer.append(Transfer(i1, s1, i2, s2, t))
+
+ # B. bath levels
+ bath_levels_is = bath_levels.reshape((2, n_bath))
+ for s1 in range(2):
+ for i1 in range(n_bath):
+ j1 = self.n_orb + i1
+ eps = -bath_levels_is[s1, i1]
+ # print(j1, s1, j1, s1, eps.real, eps.imag, file=f)
+ if eps != 0:
+ transfer.append(Transfer(j1, s1, j1, s1, eps))
+
+ # C. hopping between correlated sites and bath sites
+ bath_hyb_is = bath_hyb.reshape((2, self.n_orb, 2, n_bath))
+ for s1 in range(2):
+ for i1 in range(self.n_orb):
+ for s2 in range(2):
+ for i2 in range(n_bath):
+ j1 = i1
+ j2 = self.n_orb + i2
+ v = -bath_hyb_is[s1, i1, s2, i2]
+ # print(j1, s1, j2, s2, v.real, v.imag, file=f)
+ # print(j2, s2, j1, s1, v.real, -v.imag, file=f)
+ if v != 0:
+ transfer.append(Transfer(j1, s1, j2, s2, v))
+ transfer.append(Transfer(j2, s2, j1, s1, numpy.conj(v)))
+
+ # Output trans.def
+ with open('./trans.def', 'w') as f:
+ print(trans_def.format(len(transfer)), end="", file=f)
+
+ for t in transfer:
+ print(t.i1, t.s1, t.i2, t.s2, t.t.real, t.t.imag, file=f)
+
+ # -------------------------------------------------------------------------
+
+ # (1c) Set U_{ijkl} for the solver
+ # for i, j, k, l in product(range(self.n_flavors), repeat=4):
+ # self.u_mat[i, j, k, l]
+
+ # make U matrix
+ InterAll = namedtuple('InterAll', ('i1', 's1', 'i2', 's2', 'i3', 's3', 'i4', 's4', 'U'))
+ interall = []
+
+ # (1/2) U_{1234} c_1^+ c_2^+ c_4 c_3 # Dcore
+ # = I_{1324} c_1^+ c_3 c_2^+ c_4 # Hphi
+ u_1234 = self.u_mat.reshape((2, self.n_orb, 2, self.n_orb, 2, self.n_orb, 2, self.n_orb))
+ for s1, s2, s3, s4 in product(range(2), repeat=4):
+ for o1, o2, o3, o4 in product(range(self.n_orb), repeat=4):
+ u = u_1234[s1, o1, s2, o2, s3, o3, s4, o4] / 2.
+ if s1==s2==s3==s4 and o1==o2==o3==o4:
+ continue
+ # u = 0.0
+ # print(o1, s1, o3, s3, o2, s2, o4, s4, u.real, u.imag, file=f)
+ if numpy.abs(u) > 1e-10:
+ interall.append(InterAll(o1, s1, o3, s3, o2, s2, o4, s4, u))
+
+ # Output interall.def
+ with open('./interall.def', 'w') as f:
+ print(interall_def.format(len(interall)), end="", file=f)
+
+ for u in interall:
+ print(u.i1, u.s1, u.i2, u.s2, u.i3, u.s3, u.i4, u.s4, u.U.real, u.U.imag, file=f)
+
+ # (2) Run a working horse
+ print("\nComputing eigeneneries ...")
+ with open('./stdout.log', 'w') as output_f:
+ launch_mpi_subprocesses(mpirun_command_power4, [exec_path, '-e', 'namelist.def'], output_f)
+
+ print("\nComputing Gf ...")
+ header = "zvo"
+ T_list = [1./self.beta]
+ eta = 1e-4
+ output_dir = "./output"
+ p_common = (self.n_orb, T_list, exct, eta, exec_path, header, output_dir, exct)
+ one_body_g = calc_one_body_green_core_parallel(p_common, max_workers=np)
+
+ # calcspectrum = CalcSpectrum(T_list, exct=exct, eta=eta, path_to_HPhi=exec_path, header=header)
+ # energy_list = calcspectrum.get_energies()
+ # one_body_g = calcspectrum.get_one_body_green(n_site=self.n_orb, exct_cut=exct)
+
+ print("\nFinish Gf calc.")
+
+ # print(one_body_g.shape)
+ assert isinstance(one_body_g, numpy.ndarray)
+ assert one_body_g.shape == (self.n_orb, 2, self.n_orb, 2, 1, self.n_iw)
+
+ gf = one_body_g[..., 0, :]
+ assert gf.shape == (self.n_orb, 2, self.n_orb, 2, self.n_iw)
+
+ # (3) Copy results into
+ # self._Sigma_iw
+ # self._Gimp_iw
+
+ # Change data structure of gf from [o1, s1, o2, s2, iw] to ...
+ if self.use_spin_orbit:
+ # [1, (s1,o1), (s2,o2), iw]
+ gf = gf.transpose((1, 0, 3, 2, 4)).reshape((1, 2*self.n_orb, 2*self.n_orb, self.n_iw))
+ assert gf.shape == (1, 2*self.n_orb, 2*self.n_orb, self.n_iw)
+ else:
+ # [s, o1, o2, iw]
+ gf = numpy.einsum("isjsw->sijw", gf)
+ assert gf.shape == (2, self.n_orb, self.n_orb, self.n_iw)
+
+ assign_from_numpy_array(self._Gimp_iw, gf, self.block_names)
+
+ # if triqs_major_version == 1:
+ # set_tail(self._Gimp_iw)
+
+ if self.use_spin_orbit:
+ print("Sigma is not implemented for SOC")
+ raise NotImplementedError
+
+ # Make H0 matrix
+ h0_full = numpy.zeros((2, n_site, 2, n_site), dtype=complex)
+ for t in transfer:
+ h0_full[t.s1, t.i1, t.s2, t.i2] = -t.t
+ h0_full = h0_full.reshape((2*n_site, 2*n_site))
+
+ # TODO: move into a function -- begin
+ # Cut H0 into block structure
+ n_block = len(self.gf_struct)
+ n_inner = h0_full.shape[0] // n_block
+ h0_block = [h0_full[s*n_inner:(s+1)*n_inner, s*n_inner:(s+1)*n_inner] for s in range(n_block)]
+
+ # Construct G0 including bath sites
+ bath_names = ["bath" + str(i_bath) for i_bath in range(n_bath)]
+ bath_names = ["bath" + str(i_bath) for i_bath in range(n_bath)]
+ gf_struct_full = {block: list(inner_names) + bath_names for block, inner_names in self.gf_struct.items()}
+ g0_full = make_block_gf(GfImFreq, gf_struct_full, self.beta, self.n_iw)
+ g0_full << iOmega_n
+ for i, block in enumerate(self.block_names):
+ g0_full[block] -= h0_block[i]
+ g0_full.invert()
+
+ # Project G0 onto impurity site
+ g0_imp = make_block_gf(GfImFreq, self.gf_struct, self.beta, self.n_iw)
+ for block in self.block_names:
+ for o1, o2 in product(self.gf_struct[block], repeat=2):
+ g0_imp[block].data[:, o1, o2] = g0_full[block].data[:, o1, o2]
+ # TODO: move into a function -- end
+
+ self._Sigma_iw << inverse(g0_imp) - inverse(self._Gimp_iw)
+
+ def name(self):
+ return "HPhi"
diff --git a/src/dcore/impurity_solvers/hphi_spectrum.py b/src/dcore/impurity_solvers/hphi_spectrum.py
new file mode 100644
index 00000000..2f587857
--- /dev/null
+++ b/src/dcore/impurity_solvers/hphi_spectrum.py
@@ -0,0 +1,357 @@
+import subprocess
+import itertools
+import numpy as np
+import os
+import sys
+
+# T_list, n_iw, exct, eta, path_to_HPhi="./HPhi", header="zvo", output_dir="./output"
+
+def calc_one_body_green_core_parallel(p_common, max_workers=None):
+ """
+ Return:
+ np.ndarray(n_site, n_sigma, n_site, n_sigma, n_T, n_omega)
+ """
+
+ n_sigma = 2
+ n_flg = 2
+ n_excitation = 2
+ n_site, T_list, exct, eta, path_to_HPhi, header, output_dir, exct_cut = p_common
+
+ check_eta(p_common)
+
+ def gen_p():
+ for sitei, sigmai in itertools.product(range(n_site), range(n_sigma)):
+ for sitej, sigmaj in itertools.product(range(n_site), range(n_sigma)):
+ for idx, flg in enumerate([True, False]):
+ for ex_state in range(n_excitation):
+ yield sitei, sigmai, sitej, sigmaj, idx, ex_state, p_common
+
+ from concurrent.futures import ProcessPoolExecutor
+ with ProcessPoolExecutor(max_workers=max_workers) as executor:
+ one_body_g_tmp = np.array(list(executor.map(calc_one_body_green_core, gen_p())))
+ n_omega = one_body_g_tmp.shape[2]
+ one_body_green_core = one_body_g_tmp.reshape((n_site, n_sigma, n_site, n_sigma, n_flg, n_excitation, len(T_list), n_omega))
+ one_body_green = calc_one_body_green(one_body_green_core)
+
+ import shutil
+ for sitei, sigmai in itertools.product(range(n_site), range(n_sigma)):
+ for sitej, sigmaj in itertools.product(range(n_site), range(n_sigma)):
+ for idx in range(n_flg):
+ for ex_state in range(n_excitation):
+ dir_path = "{}_{}_{}_{}_{}_{}".format(sitei, sigmai, sitej, sigmaj, ex_state, idx)
+ shutil.rmtree(dir_path)
+
+ return one_body_green
+
+def calc_one_body_green_core(p):
+ #unpack parameters
+ sitei, sigmai, sitej, sigmaj, i_flg, ex_state, p_common = p
+ n_site, T_list, exct, eta, path_to_HPhi, header, output_dir, exct_cut = p_common
+ calc_spectrum_core = CalcSpectrumCore(T_list, exct, eta, path_to_HPhi=path_to_HPhi, header=header,
+ output_dir=output_dir)
+
+ calc_spectrum_core.set_energies()
+ flg = True if i_flg == 0 else False
+ return calc_spectrum_core.get_one_body_green_core(sitei, sigmai, sitej, sigmaj, ex_state, flg, exct_cut)
+
+def check_eta(p_common):
+ _, T_list, exct, eta, path_to_HPhi, header, output_dir, _ = p_common
+ calc_spectrum_core = CalcSpectrumCore(T_list, exct, eta, path_to_HPhi=path_to_HPhi, header=header,
+ output_dir=output_dir)
+ calc_spectrum_core.set_energies(check_eta=True)
+
+def calc_one_body_green(one_body_green_core):
+ n_site, n_sigma, n_site, n_sigma, n_excitation, n_flg, n_T, n_omega = one_body_green_core.shape
+ n_excitation = 2
+ n_flg = 2
+ n_sigma = 2
+ one_body_green = np.zeros((n_site, n_sigma, n_site, n_sigma, n_T, n_omega), dtype=np.complex128)
+ # Diagonal
+ for sitei, sigmai, ex_state in itertools.product(range(n_site), range(n_sigma), range(n_excitation)):
+ one_body_green[sitei][sigmai][sitei][sigmai] += one_body_green_core[sitei][sigmai][sitei][sigmai][0][ex_state]
+
+ # Off diagonal
+ for sitei, sigmai, sitej, sigmaj in itertools.product(range(n_site), range(n_sigma), range(n_site), range(n_sigma)):
+ one_body_green_tmp = np.zeros((n_flg, n_T, n_omega), dtype=np.complex128)
+ for idx in range(n_flg):
+ for ex_state in range(n_excitation):
+ one_body_green_tmp[idx] += one_body_green_core[sitei][sigmai][sitej][sigmaj][idx][ex_state]
+ one_body_green_tmp[1] -= one_body_green[sitei][sigmai][sitei][sigmai] + \
+ one_body_green[sitej][sigmaj][sitej][sigmaj]
+ one_body_green[sitei][sigmai][sitej][sigmaj] = (one_body_green_tmp[0] + 1J * one_body_green_tmp[
+ 1]) / 2.0
+ one_body_green[sitei][sigmai][sitej][sigmaj] = (one_body_green_tmp[0] - 1J * one_body_green_tmp[
+ 1]) / 2.0
+ return one_body_green
+
+
+class CalcSpectrum:
+ def __init__(self, T_list, n_iw, exct, eta, path_to_HPhi="./HPhi", header="zvo", output_dir="./output"):
+ self.T_list = T_list
+ self.exct = exct
+ self.eta = eta
+ self.header = header
+ self.output_dir = output_dir
+ self.path_to_HPhi = os.path.abspath(path_to_HPhi)
+ self.calc_spectrum_core = CalcSpectrumCore(T_list, exct, eta, path_to_HPhi="./HPhi", header="zvo", output_dir="./output")
+ self.nomega = n_iw
+
+ def get_one_body_green_core(self, n_site, exct_cut):
+ self.calc_spectrum_core.set_energies()
+ n_excitation = 2 # type of excitation operator
+ n_flg = 2
+ n_sigma = 2
+ one_body_green = np.zeros((n_site, n_sigma, n_site, n_sigma, len(self.T_list), self.nomega), dtype=np.complex128)
+ one_body_green_core = np.zeros((n_site, n_sigma, n_site, n_sigma, n_flg, n_excitation, len(self.T_list), self.nomega), dtype=np.complex128)
+
+ for sitei, sigmai, sitej, sigmaj in itertools.product(range(n_site), range(n_sigma), range(n_site), range(n_sigma)):
+ for idx, flg in enumerate([True, False]):
+ for ex_state in range(n_excitation):
+ one_body_green_core[sitei][sigmai][sitej][sigmaj][idx][ex_state] = self.calc_spectrum_core.get_one_body_green_core(sitei, sigmai, sitej, sigmaj, ex_state, flg, exct_cut)
+
+ #Diagonal
+ for sitei, sigmai, ex_state in itertools.product(range(n_site), range(n_sigma), range(n_excitation)):
+ one_body_green[sitei][sigmai][sitei][sigmai] += one_body_green_core[sitei][sigmai][sitei][sigmai][0][ex_state]
+
+ # Off diagonal
+ for sitei, sigmai, sitej, sigmaj in itertools.product(range(n_site), range(n_sigma),range(n_site), range(n_sigma)):
+ one_body_green_tmp = np.zeros((n_flg, len(self.T_list), self.nomega), dtype=np.complex128)
+ for idx in range(n_flg):
+ for ex_state in range(n_excitation):
+ one_body_green_tmp[idx] += one_body_green_core[sitei][sigmai][sitej][sigmaj][idx][ex_state]
+ one_body_green_tmp[1] -= one_body_green[sitei][sigmai][sitei][sigmai] + one_body_green[sitej][sigmaj][sitej][sigmaj]
+ one_body_green[sitei][sigmai][sitej][sigmaj] = (one_body_green_tmp[0] + 1J * one_body_green_tmp[1]) / 2.0
+ one_body_green[sitei][sigmai][sitej][sigmaj] = (one_body_green_tmp[0] - 1J * one_body_green_tmp[1]) / 2.0
+ return one_body_green
+
+class CalcSpectrumCore:
+ def __init__(self, T_list, exct, eta, path_to_HPhi="./HPhi", header="zvo", output_dir="./output"):
+ self.T_list = T_list
+ self.exct = exct
+ self.eta = eta
+ self.header = header
+ self.output_dir = output_dir
+ self.nomega = 0
+ self.parent_dir = os.getcwd()
+ # self.path_to_HPhi = os.path.join(self.parent_dir, path_to_HPhi)
+ self.path_to_HPhi = os.path.abspath(path_to_HPhi) # converted to full path in DCore
+
+ def Make_Spectrum_Input(self, calc_dir="./", spectrum_type="single"):
+
+ rel_path_org = os.path.relpath(self.parent_dir, calc_dir)
+ for idx in range(self.exct):
+ with open(os.path.join(self.parent_dir, "calcmod.def")) as f:
+ lines = f.readlines()
+ with open(os.path.join(calc_dir, "calcmod_ex.def"), "w") as fex:
+ for line in lines:
+ words = line.split()
+ if words[0] == "CalcSpec" or words[0] == "OutputExVec" or words[0] == "OutputEigenVec":
+ continue
+ fex.write(line)
+ fex.write("CalcSpec 1\n")
+ with open(os.path.join(self.parent_dir, "namelist.def")) as f:
+ lines = f.readlines()
+ with open(os.path.join(calc_dir, "namelist_ex_{}.def".format(idx)), "w") as fex:
+ for line in lines:
+ words = line.split()
+ if len(words) == 0:
+ continue
+ if words[0] in ["CalcMod", "SpectrumVec", "ModPara"]:
+ continue
+ if words[0] == "SingleExcitation":
+ continue
+ if words[0] == "PairExcitation":
+ continue
+ fex.write("{} {}\n".format(words[0], os.path.join(rel_path_org, words[1])))
+ fex.write("ModPara modpara_ex.def\n")
+ fex.write("CalcMod calcmod_ex.def\n")
+ rel_path = os.path.relpath(os.path.join(self.parent_dir, "output"), calc_dir)
+ fex.write("SpectrumVec {}_eigenvec_{}\n".format(os.path.join("../", rel_path, self.header), idx))
+ if spectrum_type == "single":
+ fex.write("SingleExcitation single_ex.def\n")
+ elif spectrum_type == "pair":
+ fex.write("PairExcitation pair_ex.def\n")
+
+ with open(os.path.join(self.parent_dir,"modpara.def"), "r") as fr:
+ lines = fr.readlines()
+ for line in lines:
+ words = line.split()
+ if words[0] == "NOmega":
+ self.nomega = int(words[1])
+
+ if self.nomega == 0:
+ print("Error: Please set NOmega in modpara file")
+ sys.exit(1)
+
+ def _read_spectrum(self, calc_dir="./"):
+ spectrum_dict={}
+ frequencies =[]
+ for idx in range(self.exct):
+ path_to_spectrum_dir = os.path.join(calc_dir, self.output_dir)
+ path_to_DG = os.path.join(path_to_spectrum_dir, "{}_DynamicalGreen_{}.dat".format(self.header,idx))
+ spectrum = np.loadtxt(path_to_DG)
+ spectrum_dict[idx] = spectrum[:,2] + 1J*spectrum[:,3]
+ if idx == 0 :
+ frequencies = spectrum[:, 0] + 1J*spectrum[:, 1]
+ frequencies = frequencies
+ return frequencies, spectrum_dict
+
+ def set_energies(self, check_eta=False):
+ energy_list = []
+ with open(os.path.join(self.output_dir, "{}_energy.dat".format(self.header))) as f:
+ lines = f.readlines()
+ for line in lines:
+ words = line.split()
+ if len(words) != 0 and words[0] == "Energy":
+ energy_list.append(float(words[1]))
+ self.energy_list = energy_list
+ self.ene_min = energy_list[0]
+ self.ene_max = energy_list[len(energy_list)-1]
+
+ if check_eta:
+ print(f"\n Check eta:=exp[-beta(ene_max-ene_mix)] < {self.eta:.1e}")
+ for T in self.T_list:
+ eta_ene = np.exp(-(self.ene_max-self.ene_min)/T)
+ print(f" T = {T}: eta = {eta_ene:.2e}")
+ if eta_ene > self.eta:
+ print(f"Warning: At T = {T}, exp[-beta(ene_max-ene_mix)]={eta_ene:.2e} is larger than eta={self.eta}.", file=sys.stderr)
+
+ def _calc_Z(self, T):
+ Z = 0
+ for ene in self.energy_list:
+ ene_diff = ene-self.ene_min
+ Z += np.exp(-ene_diff/T)
+ return Z
+
+ def get_finite_T_spectrum(self, calc_dir="./"):
+ frequencies, self.spectrums_dict = self._read_spectrum(calc_dir)
+ finite_T_spectrum_dict ={}
+ for T in self.T_list:
+ Z = self._calc_Z(T)
+ spectrum = np.zeros_like(self.spectrums_dict[0])
+ for idx in range(self.exct):
+ spectrum += np.exp(-(self.energy_list[idx]-self.ene_min)/T)*self.spectrums_dict[idx]
+ spectrum /= Z
+ finite_T_spectrum_dict[T]=spectrum
+ self.finite_T_spectrum_dict = finite_T_spectrum_dict
+ return frequencies, finite_T_spectrum_dict
+
+ def print_finite_T_spectrum(self, file_name = "Dynamical_Green"):
+ for key, spectrum in self.finite_T_spectrum_dict.items():
+ file_name_T = self.header + "_" + file_name + "_T_{}.dat".format(key)
+ with open(os.path.join(self.output_dir, file_name_T), "w") as fw:
+ for idx, value in enumerate(spectrum):
+ fw.write("{} {} {} {}\n".format(self.frequencies[idx].real, self.frequencies[idx].imag, value.real, value.imag))
+
+ def _update_modpara(self, exct, ex_state=0, calc_dir="./"):
+ dict_mod={}
+ header = []
+ with open(os.path.join(self.parent_dir, "modpara.def"), "r") as fr:
+ lines = fr.readlines()
+ header = lines[:8]
+ for line in lines[8:]:
+ words = line.split()
+ dict_mod[words[0]] = words[1:]
+ dict_mod["OmegaOrg"] = [self.energy_list[exct], 0]
+ if ex_state == 0:
+ omega_max = dict_mod["OmegaMax"]
+ dict_mod["OmegaMax"] = [-1.0*float(omega_max[0]), -1.0*float(omega_max[1])]
+ omega_min = dict_mod["OmegaMin"]
+ dict_mod["OmegaMin"] = [-1.0*float(omega_min[0]), -1.0*float(omega_min[1])]
+ with open(os.path.join(calc_dir, "modpara_ex.def"), "w") as fw:
+ for line in header:
+ fw.write(line)
+ for key, value in dict_mod.items():
+ if len(value) == 1:
+ fw.write("{} {}\n".format(key, value[0]))
+ else:
+ fw.write("{} {} {}\n".format(key, value[0], value[1]))
+
+ def _make_single_excitation(self, site_i, sigma_i, site_j, sigma_j, file_name = "single_ex.def", ex_state=0, flg_complex = True, calc_dir="./"):
+ # c_{i sigma_i} or c_{i sigma_i} + i c_{j sigma_j}
+ nsingle = 2
+ if (2 * site_i + sigma_i) == ( 2 * site_j + sigma_j):
+ nsingle = 1
+ with open(os.path.join(calc_dir, file_name), "w") as fw:
+ fw.write("===============================\n")
+ fw.write("NSingle {}\n".format(nsingle))
+ fw.write("===============================\n")
+ fw.write("===============================\n")
+ fw.write("===============================\n")
+ if nsingle == 1:
+ fw.write("{} {} {} 1.0 0.0\n".format(site_i, sigma_i, ex_state))
+ else:
+ if flg_complex is True:
+ fw.write("{} {} {} 1.0 0.0\n".format(site_i, sigma_i, ex_state))
+ fw.write("{} {} {} 0.0 1.0\n".format(site_j, sigma_j, ex_state))
+ else:
+ fw.write("{} {} {} 1.0 0.0\n".format(site_i, sigma_i, ex_state))
+ fw.write("{} {} {} 1.0 0.0\n".format(site_j, sigma_j, ex_state))
+
+ def _run_HPhi(self, exct_cut, ex_state=0, calc_dir="./"):
+ os.chdir(calc_dir)
+ for idx in range(exct_cut):
+ self._update_modpara(idx, ex_state, calc_dir)
+ input_path = os.path.join(calc_dir, "namelist_ex_{}.def".format(idx))
+ exec_path = self.path_to_HPhi
+ cmd = "{} -e {} > std_{}.log".format(exec_path, input_path, idx)
+ subprocess.call(cmd, shell=True)
+ cmd = "mv ./output/{0}_DynamicalGreen.dat ./output/{0}_DynamicalGreen_{1}.dat".format(self.header, idx)
+ subprocess.call(cmd, shell=True)
+ os.chdir(self.parent_dir)
+
+ def get_one_body_green_core(self, sitei, sigmai, sitej, sigmaj, ex_state, flg, exct_cut):
+ calc_dir = os.path.join(self.parent_dir, "{}_{}_{}_{}_{}_{}".format(sitei,sigmai,sitej,sigmaj, ex_state, 0 if flg is True else 1))
+ os.makedirs(calc_dir, exist_ok=True)
+ self.Make_Spectrum_Input(calc_dir)
+ one_body_green = np.zeros((len(self.T_list), self.nomega), dtype=np.complex)
+ # print("Calculate G[{},{}][{},{}]".format(sitei, "u" if sigmai == 0 else "d", sitej, "u" if sigmaj == 0 else "d"))
+ self._make_single_excitation(sitei, sigmai, sitej, sigmaj, ex_state=ex_state, flg_complex=flg, calc_dir=calc_dir)
+ # Run HPhi
+ self._run_HPhi(exct_cut, ex_state, calc_dir)
+ # Get Finite-T Green
+ frequencies, finite_spectrum_list = self.get_finite_T_spectrum(calc_dir)
+ if ex_state == 1:
+ self.frequencies = frequencies
+ sign = 1.0 if ex_state == 1 else -1.0
+ for idx, T in enumerate(self.T_list):
+ one_body_green[idx] = sign * finite_spectrum_list[T]
+ return one_body_green
+
+
+def test_main():
+ args = sys.argv
+ if len(args) != 2:
+ print("Error: Wrong argument.")
+ print("Usage: python hphi_spectrum.py filename")
+ exit(1)
+
+ file_name = sys.argv[1]
+ import toml
+ dict_toml = toml.load(open(file_name))
+ NOmega = 200
+ T_list = dict_toml.get("T_list", [1.0])
+ exct = dict_toml.get("exct", 10)
+ eta = dict_toml.get("eta", 1e-4)
+ path_to_HPhi = dict_toml.get("path_to_HPhi", "./HPhi")
+ header = dict_toml.get("header", "zvo")
+ output_dir = dict_toml.get("output_dir", "./output")
+ n_site = dict_toml.get("n_site", 2)
+ max_workers=4
+
+ #Calculate one body Green's functions directly
+ # calcg = CalcSpectrum(T_list, NOmega, exct, eta, path_to_HPhi, header, output_dir)
+ # one_body_g_direct = calcg.get_one_body_green(n_site, exct)
+ # print(one_body_g_direct)
+ # exit(0)
+
+ #Calculate one body Green's functions using parallel
+ n_sigma = 2
+ n_flg = 2
+ n_excitation = 2
+ p_common = (n_site, T_list, exct, eta, path_to_HPhi, header, output_dir, exct)
+ one_body_green = calc_one_body_green_core_parallel(p_common)
+ np.save("test_g", one_body_green)
+
+if __name__ == "__main__":
+ test_main()
diff --git a/src/dcore/impurity_solvers/jo_cthyb_seg.py b/src/dcore/impurity_solvers/jo_cthyb_seg.py
new file mode 100644
index 00000000..8e0c9a2a
--- /dev/null
+++ b/src/dcore/impurity_solvers/jo_cthyb_seg.py
@@ -0,0 +1,458 @@
+#
+# DCore -- Integrated DMFT software for correlated electrons
+# Copyright (C) 2017 The University of Tokyo
+#
+# This program 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.
+#
+# This program 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 this program. If not, see .
+#
+import numpy
+import os
+import shutil
+import sys
+from itertools import product
+from collections import OrderedDict
+from dcore._dispatcher import *
+from ..tools import make_block_gf, launch_mpi_subprocesses, extract_H0, umat2dd, get_block_size, expand_path
+from .base import SolverBase, rotate_basis
+
+
+def to_numpy_array(g, names):
+ """
+ Convert BlockGf object to numpy.
+ Rearrange spins and orbitals so that up and down spins appear alternatively.
+ If there is a single block, we assume that spin and down spins appear alternatively.
+ If there are two blocks, we assume that they are spin1 and spin2 sectors.
+ """
+
+ if g.n_blocks > 2:
+ raise RuntimeError("n_blocks={} must be 1 or 2.".format(g.n_blocks))
+
+ n_spin_orbital = numpy.sum([get_block_size(block) for _, block in g])
+
+ # FIXME: Bit ugly
+ n_data = g[names[0]].data.shape[0]
+
+ data = numpy.zeros((n_data, n_spin_orbital, n_spin_orbital), dtype=complex)
+ offset = 0
+ for name in names:
+ block = g[name]
+ block_dim = get_block_size(block)
+ data[:, offset:offset + block_dim, offset:offset + block_dim] = block.data
+ offset += block_dim
+
+ # from (spin, orb) : (up,orb1), (up,orb2), ..., (down,orb1), (down,orb2), ...
+ # to (orb, spin) : (up,orb1), (down,orb1), (up,orb2), (down,orb2), ...
+ norb = n_spin_orbital//2
+ index = numpy.zeros(n_spin_orbital, dtype=int)
+ index[0::2] = numpy.arange(norb)
+ index[1::2] = numpy.arange(norb) + norb
+ # Swap cols and rows
+ return (data[:, :, index])[:, index, :]
+
+
+def assign_from_numpy_array(g, data, names):
+ """
+ Does inversion of to_numpy_array
+
+ assign from
+ data[iw, i] (i=(orb,spin))
+ to
+ g[spin].data[iw,orb1,orb2] (w/o SO) (spin='up', 'down')
+ g['ud'].data[iw,i1,i2] (w/ SO)
+
+ """
+
+ if g.n_blocks > 2:
+ raise RuntimeError("n_blocks={} must be 1 or 2.".format(g.n_blocks))
+
+ # (n_sp, n_inner) = (2, n_orb) w/o SO
+ # (1, 2*n_orb) w/ SO
+ n_sp = g.n_blocks
+ n_inner = data.shape[1] // n_sp
+ niw = data.shape[0]
+
+ # array which data are assigned from
+ # (iw, orb, spin) -> (iw, spin, orb) -> (iw, spin, orb) w/o SO
+ # (iw, 1, inner) w/ SO
+ data_from = data.reshape((niw, -1, 2)).transpose((0, 2, 1)).reshape(niw, n_sp, n_inner)
+
+ # assign data_from to g
+ for sp, name in enumerate(names):
+ # array which data are assigned to
+ data_to = g[name].data
+ assert data_to.shape == (2*niw, n_inner, n_inner)
+ for i in range(n_inner):
+ # positive frequency
+ data_to[niw:, i, i] = data_from[:, sp, i]
+ # negative frequency
+ data_to[:niw, i, i] = numpy.conj(data_from[::-1, sp, i])
+
+
+def dcore2alpscore(dcore_U):
+
+ dcore_U_len = len(dcore_U)
+ alps_U = numpy.zeros((dcore_U_len, dcore_U_len), dtype=float)
+ alps_Uprime = numpy.zeros((dcore_U_len, dcore_U_len), dtype=float)
+ alps_J = numpy.zeros((dcore_U_len, dcore_U_len), dtype=float)
+
+ # m_range = range(size)
+ for i, j in product(range(dcore_U_len), range(dcore_U_len)):
+ alps_U[i, j] = dcore_U[i, j, i, j].real - dcore_U[i, j, j, i].real
+ alps_Uprime[i, j] = dcore_U[i, j, i, j].real
+ alps_J[i, j] = dcore_U[i, j, j, i].real
+ return alps_U, alps_Uprime, alps_J
+
+def convert_Umatrix(U, Uprime, J, norb):
+ Uout = numpy.zeros((norb, 2, norb, 2))
+
+ # from (up,orb1), (up,orb2), ..., (down,orb1), (down,orb2), ...
+ # to (up,orb1), (down,orb1), (up,orb2), (down,orb2), ...
+ def func(u):
+ uout = u.reshape((2, norb, 2, norb)).transpose(1, 0, 3, 2)
+ return uout
+
+ U_four = func(U)
+ Uprime_four = func(Uprime)
+ J_four = func(J)
+
+ for a1, a2 in product(range(norb), repeat=2):
+ for s1, s2 in product(range(2), repeat=2): # spin-1/2
+ if a1 == a2:
+ Uout[a1, s1, a2, s2] = U_four[a1, s1, a2, s2]
+ else:
+ Uout[a1, s1, a2, s2] = Uprime_four[a1, s1, a2, s2] - J_four[a1, s1, a2, s2]
+
+ return Uout.reshape((2*norb, 2*norb))
+
+
+def eval_tail(g_iw, beta, n_ave=10):
+ """Evaluate the coeeficients of 1/iw
+
+ Args:
+ g_iw (ndarray(n_iw, n_flavors)): Matsubara Green's function G(iw) for w>0.
+ beta (float): Inverse temperature
+ n_ave (int, optional): The number of frequency points to average. Defaults to 10.
+
+ Returns:
+ ndarray(n_flavors,): The coefficients of 1/iw
+ """
+ assert g_iw.ndim == 2
+
+ n_iw, n_flavors = g_iw.shape
+ wn = (2*numpy.arange(n_iw) + 1) * numpy.pi / beta
+
+ # average of Re[ G(iw) * iw ]
+ tails = numpy.mean(-g_iw[-n_ave:, :].imag * wn[-n_ave:, None], axis=0)
+ assert tails.shape == (n_flavors,)
+
+ return tails
+
+
+class JOCTHYBSEGSolver(SolverBase):
+
+ def __init__(self, beta, gf_struct, u_mat, n_iw=1025):
+ """
+ Initialize the solver.
+ """
+
+ super().__init__(beta, gf_struct, u_mat, n_iw)
+
+ # self.n_tau = max(10001, 5 * n_iw)
+
+ def solve(self, rot, mpirun_command, params_kw):
+ """
+ In addition to the parameters described in the docstring of SolverBase,
+ one can pass solver-dependent parameters using params_kw. For example,
+ exec_path : str, path to an executable, mandatory
+ dry_run : bool, actual computation is not performed if dry_run is True, optional
+ """
+ internal_params = {
+ 'exec_path' : '',
+ 'dry_run' : False,
+ 'neglect_offdiagonal' : True,
+ }
+
+ def _read(key):
+ if key in params_kw:
+ return params_kw[key]
+ else:
+ return internal_params[key]
+ # print (params_kw)
+
+ umat_check = umat2dd(self.u_mat)
+ assert numpy.allclose(umat_check, self.u_mat), "Please set density_density = True when you run ALPS/cthyb-seg!"
+
+ if self.n_iw % 2 != 0:
+ sys.exit(f"Invalid value n_iw={self.n_iw}: Only even number is allowed for n_iw in JO/cthyb-seg solver")
+
+ # (0) Rotate H0 and Delta_tau if rot is given
+ g0_iw_rotated = self._G0_iw.copy()
+ if rot is None:
+ u_mat_rotated = self.u_mat
+ else:
+ assert isinstance(rot, dict)
+ u_mat_rotated = rotate_basis(rot, self.use_spin_orbit, self.u_mat, [g0_iw_rotated,], direction='forward')
+
+ # (1) Set configuration for the impurity solver
+ # input:
+ # self.beta
+ # self.set_G0_iw
+ # self.u_mat
+ #
+ # Additionally, the following variables may used:
+ # self.n_orb
+ # self.n_flavors
+ # self.gf_struct
+
+ # (1a) If H0 is necessary:
+ # Non-interacting part of the local Hamiltonian including chemical potential
+ # Make sure H0 is hermite.
+ # Ordering of index in H0 is spin1, spin1, ..., spin2, spin2, ...
+ H0 = extract_H0(g0_iw_rotated, self.block_names)
+
+ # from (up,orb1), (up,orb2), ..., (down,orb1), (down,orb2), ...
+ # to (up,orb1), (down,orb1), (up,orb2), (down,orb2), ...
+ index = numpy.zeros((2*self.n_orb), dtype=int)
+ index[0::2] = numpy.arange(self.n_orb)
+ index[1::2] = numpy.arange(self.n_orb) + self.n_orb
+ # Swap cols and rows
+ H0 = H0[numpy.ix_(index, index)]
+
+ # check if H0 is diagonal
+ H0_offdiag = H0.copy()
+ for i in range(H0_offdiag.shape[0]):
+ H0_offdiag[i, i] = 0
+ if numpy.linalg.norm(H0_offdiag) > 1e-6:
+ print("\nWARNING: The local Hamiltonian is not diagonal", file=sys.stderr)
+ print("H0_loc =\n{}".format(H0), file=sys.stderr)
+ if _read('neglect_offdiagonal'):
+ print("--> continue. To stop calculation, set neglect_offdiagonal{bool}=False", file=sys.stderr)
+ else:
+ print("--> exit. To neglect this warning, set neglect_offdiagonal{bool}=True", file=sys.stderr)
+ sys.exit(1)
+
+ with open('./ef.in', 'w') as f:
+ for i in range(2*self.n_orb):
+ print('{:.15e}'.format(H0[i, i].real), file=f)
+
+
+ # (1b) If Delta(iw) and/or Delta(tau) are necessary:
+ # Compute the hybridization function from G0:
+ # Delta(iwn_n) = iw_n - H0 - G0^{-1}(iw_n)
+
+ # H0 is extracted from the tail of the Green's function.
+ self._Delta_iw = delta(g0_iw_rotated)
+ delta_iw = to_numpy_array(self._Delta_iw, self.block_names)
+ assert delta_iw.shape == (self.n_iw * 2, self.n_orb * 2, self.n_orb * 2)
+ delta_iw = delta_iw[self.n_iw:, :, :] # only positive frequency
+ assert delta_iw.shape == (self.n_iw, self.n_orb * 2, self.n_orb * 2)
+
+ # TODO: check delta_iw
+ # Delta_{ab}(iw) must be diagonal
+
+ delta_iw_diagonal = numpy.einsum("wii->wi", delta_iw)
+ assert delta_iw_diagonal.shape == (self.n_iw, self.n_orb * 2)
+
+ with open('./delta_w.in', 'w') as f:
+ for iw in range(self.n_iw):
+ for f1 in range(self.n_flavors):
+ val = delta_iw_diagonal[iw, f1]
+ print(' {:.15e} {:.15e}'.format(val.real, val.imag), file=f, end="")
+ print("", file=f)
+
+ # tail of Delta(iw)
+ vsq = eval_tail(delta_iw_diagonal, self.beta)
+ with open('./vsq.in', 'w') as f:
+ for i in range(self.n_flavors):
+ print('{:.15e}'.format(vsq[i]), file=f)
+
+ # (1c) Set U_{ijkl} for the solver
+ # Set up input parameters and files for ALPS/CTHYB-SEG
+
+ U, Uprime, J = dcore2alpscore(u_mat_rotated)
+ Udd = convert_Umatrix(U, Uprime, J, self.n_orb)
+ assert Udd.shape == (self.n_flavors, self.n_flavors)
+
+ with open('./u.in', 'w') as f:
+ for i in range(self.n_flavors):
+ for j in range(self.n_flavors):
+ print(' {:.15e}'.format(Udd[i, j].real), file=f, end="")
+ print("", file=f)
+
+ # (1d) Set parameters for the solver
+
+ params_solver = OrderedDict()
+ params_solver['model'] = {
+ 'n_s' : self.n_orb*2,
+ 'file_Delta_iw' : 'delta_w.in',
+ 'file_Vsq' : 'vsq.in',
+ 'file_U' : 'u.in',
+ 'file_ef' : 'ef.in',
+ 'beta' : self.beta,
+ }
+ params_solver['control'] = {
+ 'n_tau' : self.n_iw * 2,
+ }
+ params_solver['MC'] = {}
+
+ # Set parameters specified by the user
+ for prefix in ['control', 'MC']:
+ for k, v in params_kw.items():
+ # Convert, e.g., MC.n_msr -> n_msr
+ if k.startswith(prefix + '.'):
+ key = k[len(prefix)+1:]
+ if key in params_solver[prefix]:
+ sys.exit(f"ERROR: Cannot override parameter '{key}'")
+ params_solver[prefix][key] = v
+
+ with open('./input.ini', 'w') as f:
+ for prefix, params in params_solver.items():
+ print(f"\n[{prefix}]", file=f)
+ for k, v in params.items():
+ print(f"{k} = {v}", file=f)
+
+ if _read('dry_run'):
+ return
+
+ # (2) Run a working horse
+ exec_path = expand_path(_read('exec_path'))
+ with open('./output', 'w') as output_f:
+ launch_mpi_subprocesses(mpirun_command, [exec_path, './input.ini'], output_f)
+
+ with open('./output', 'r') as output_f:
+ for line in output_f:
+ print(line, end='')
+
+ # (3) Copy results into
+ # self._Sigma_iw
+ # self._Gimp_iw
+
+ data = numpy.loadtxt("self_w.dat")
+ sigma_data = data[:, 1::2] + 1j * data[:, 2::2]
+ assert sigma_data.shape == (self.n_iw, self.n_flavors)
+ assign_from_numpy_array(self._Sigma_iw, sigma_data, self.block_names)
+
+ data = numpy.loadtxt("Gf_w.dat")
+ gf_data = data[:, 1::2] + 1j * data[:, 2::2]
+ assert gf_data.shape == (self.n_iw, self.n_flavors)
+ assign_from_numpy_array(self._Gimp_iw, gf_data, self.block_names)
+
+ # Rotate Sigma and Gimp back to the original basis
+ if rot is not None:
+ rotate_basis(rot, self.use_spin_orbit, None, [self._Sigma_iw, self._Gimp_iw], direction='backward')
+ # rotate_basis(rot, self.use_spin_orbit, None, self._Gimp_iw, direction='backward')
+
+ # self.quant_to_save['nn_equal_time']
+ # nn_equal_time =
+ # [(s1,o1), (s2,o2), 0]
+ # self.quant_to_save['nn_equal_time'] = nn_equal_time[:, :, 0] # copy
+
+ def calc_Xloc_ph(self, rot, mpirun_command, num_wf, num_wb, params_kw):
+ """
+ compute local G2 in p-h channel
+ X_loc = < c_{i1}^+ ; c_{i2} ; c_{i4}^+ ; c_{i3} >
+
+ Parameters
+ ----------
+ rot
+ mpirun_command
+ num_wf
+ num_wb
+ params_kw
+
+ Returns
+ -------
+ G2_loc : dict
+ key = (i1, i2, i3, i4)
+ val = numpy.ndarray(n_w2b, 2*n_w2f, 2*n_w2f)
+
+ chi_loc : dict (None if not computed)
+ key = (i1, i2, i3, i4)
+ val = numpy.ndarray(n_w2b)
+ """
+ raise NotImplementedError
+
+ if rot is not None:
+ # TODO
+ raise NotImplementedError
+
+ use_chi_loc = False
+
+ params_kw['cthyb.MEASURE_g2w'] = 1
+ params_kw['cthyb.N_w2'] = num_wf
+ params_kw['cthyb.N_W'] = num_wb
+ if use_chi_loc:
+ params_kw['cthyb.MEASURE_nnw'] = 1
+
+ self.solve(rot, mpirun_command, params_kw)
+
+ # Save G2(wb, wf, wf')
+ # [(s1,o1), (s2,o2), (wb,wf,wf')]
+ g2_re = self._get_results("g2w_re", 4*num_wf*num_wf*num_wb, orbital_symmetrize=False)
+ g2_im = self._get_results("g2w_im", 4*num_wf*num_wf*num_wb, orbital_symmetrize=False)
+ g2_loc = (g2_re + g2_im * 1.0J) / self.beta
+ g2_loc = g2_loc.reshape((2*self.n_orb, 2*self.n_orb) + (num_wb, 2*num_wf, 2*num_wf))
+ # assign to dict
+ g2_dict = {}
+ for i1, i2 in product(range(2*self.n_orb), repeat=2):
+ g2_dict[(i1, i1, i2, i2)] = g2_loc[i1, i2]
+
+ # return g2_loc for arbitrary wb including wb<0
+ def get_g2(_i, _j, _wb, _wf1, _wf2):
+ try:
+ if _wb >= 0:
+ return g2_loc[_i, _j, _wb, _wf1, _wf2]
+ else:
+ # G2_iijj(wb, wf, wf') = G2_jjii(-wb, -wf', -wf)^*
+ return numpy.conj(g2_loc[_j, _i, -_wb, -(1+_wf2), -(1+_wf1)])
+ except IndexError:
+ return 0
+
+ # Convert G2_iijj -> G2_ijij
+ g2_loc_tr = numpy.zeros(g2_loc.shape, dtype=complex)
+ for i1, i2 in product(range(2*self.n_orb), repeat=2):
+ for wb in range(num_wb):
+ for wf1, wf2 in product(range(2 * num_wf), repeat=2):
+ # G2_ijij(wb, wf, wf') = -G2_iijj(wf-wf', wf'+wb, wf')^*
+ g2_loc_tr[i1, i2, wb, wf1, wf2] = -get_g2(i1, i2, wf1-wf2, wf2+wb, wf2)
+ # assign to dict
+ for i1, i2 in product(range(2*self.n_orb), repeat=2):
+ # exclude i1=i2, which was already assigned by g2_loc
+ if i1 != i2:
+ g2_dict[(i1, i2, i1, i2)] = g2_loc_tr[i1, i2]
+
+ # Occupation number
+ # [(s1,o1)]
+ occup = self._get_occupation()
+
+ # Save chi(wb)
+ # [(s1,o1), (s2,o2), wb]
+ chi_dict = None
+ if use_chi_loc:
+ chi_re = self._get_results("nnw_re", num_wb, orbital_symmetrize=True)
+ chi_im = self._get_results("nnw_im", num_wb, orbital_symmetrize=True)
+ chi_loc = chi_re + chi_im * 1.0J
+ # subtract
+ chi_loc[:, :, 0] -= occup[:, None] * occup[None, :] * self.beta
+ # assign to dict
+ chi_dict = {}
+ for i1, i2 in product(range(2*self.n_orb), repeat=2):
+ chi_dict[(i1, i1, i2, i2)] = chi_loc[i1, i2]
+
+ return g2_dict, chi_dict
+
+ def calc_G2loc_ph_sparse(self, rot, mpirun_command, freqs_ph, num_wb, params_kw):
+ raise Exception("This solver does not support the sparse sampling.")
+
+ def name(self):
+ return "JO/cthyb-seg"
diff --git a/src/dcore/sumkdft_opt.py b/src/dcore/sumkdft_opt.py
index 48d0d509..7f9e2805 100644
--- a/src/dcore/sumkdft_opt.py
+++ b/src/dcore/sumkdft_opt.py
@@ -216,7 +216,10 @@ def print_time(txt):
for ibl in range(self.n_spin_blocks[self.SO]):
ind = ntoi[spn[ibl]]
n_orb = self.n_orbitals[ik, ind]
- M[ibl] = self.hopping[ik, ind, 0:n_orb, 0:n_orb] - \
+ # M[ibl] = self.hopping[ik, ind, 0:n_orb, 0:n_orb] - \
+ # (idmat[ibl] * mu) - (idmat[ibl] * self.h_field * (1 - 2 * ibl))
+ # +++REPLACED
+ M[ibl] = self.hopping_part[ik][ind, 0:n_orb, 0:n_orb] - \
(idmat[ibl] * mu) - (idmat[ibl] * self.h_field * (1 - 2 * ibl))
G_latt -= M
print_time("G_latt -= M")
@@ -529,6 +532,100 @@ def total_density_matsubara(self, mu=None, iw_or_w="iw", with_Sigma=True, with_d
mpi.report("Warning: Imaginary part in density will be ignored ({})".format(str(abs(dens.imag))))
return dens.real
+ def density_matrix(self, method='using_gf', beta=40.0):
+ """Calculate density matrices in one of two ways.
+
+ Parameters
+ ----------
+ method : string, optional
+
+ - if 'using_gf': First get lattice gf (g_loc is not set up), then density matrix.
+ It is useful for Hubbard I, and very quick.
+ No assumption on the hopping structure is made (ie diagonal or not).
+ - if 'using_point_integration': Only works for diagonal hopping matrix (true in wien2k).
+
+ beta : float, optional
+ Inverse temperature.
+
+ Returns
+ -------
+ dens_mat : list of dicts
+ Density matrix for each spin in each correlated shell.
+ """
+ dens_mat = [{} for icrsh in range(self.n_corr_shells)]
+ for icrsh in range(self.n_corr_shells):
+ for sp in self.spin_block_names[self.corr_shells[icrsh]['SO']]:
+ dens_mat[icrsh][sp] = numpy.zeros(
+ [self.corr_shells[icrsh]['dim'], self.corr_shells[icrsh]['dim']], numpy.complex_)
+
+ ikarray = numpy.array(list(range(self.n_k)))
+ for ik in mpi.slice_array(ikarray):
+
+ if method == "using_gf":
+
+ G_latt_iw = self.lattice_gf(
+ ik=ik, mu=self.chemical_potential, iw_or_w="iw", beta=beta)
+ G_latt_iw *= self.bz_weights[ik]
+ dm = G_latt_iw.density()
+ MMat = [dm[sp] for sp in self.spin_block_names[self.SO]]
+
+ elif method == "using_point_integration":
+
+ ntoi = self.spin_names_to_ind[self.SO]
+ spn = self.spin_block_names[self.SO]
+ dims = {sp:self.n_orbitals[ik, ntoi[sp]] for sp in spn}
+ MMat = [numpy.zeros([dims[sp], dims[sp]], numpy.complex_) for sp in spn]
+
+ for isp, sp in enumerate(spn):
+ ind = ntoi[sp]
+ for inu in range(self.n_orbitals[ik, ind]):
+ # only works for diagonal hopping matrix (true in
+ # wien2k)
+ # if (self.hopping[ik, ind, inu, inu] - self.h_field * (1 - 2 * isp)) < 0.0:
+ # +++REPLACED
+ if (self.hopping_part[ik][ind, inu, inu] - self.h_field * (1 - 2 * isp)) < 0.0:
+ MMat[isp][inu, inu] = 1.0
+ else:
+ MMat[isp][inu, inu] = 0.0
+
+ else:
+ raise ValueError("density_matrix: the method '%s' is not supported." % method)
+
+ for icrsh in range(self.n_corr_shells):
+ for isp, sp in enumerate(self.spin_block_names[self.corr_shells[icrsh]['SO']]):
+ ind = self.spin_names_to_ind[
+ self.corr_shells[icrsh]['SO']][sp]
+ dim = self.corr_shells[icrsh]['dim']
+ n_orb = self.n_orbitals[ik, ind]
+ projmat = self.proj_mat[ik, ind, icrsh, 0:dim, 0:n_orb]
+ if method == "using_gf":
+ dens_mat[icrsh][sp] += numpy.dot(numpy.dot(projmat, MMat[isp]),
+ projmat.transpose().conjugate())
+ elif method == "using_point_integration":
+ dens_mat[icrsh][sp] += self.bz_weights[ik] * numpy.dot(numpy.dot(projmat, MMat[isp]),
+ projmat.transpose().conjugate())
+
+ # get data from nodes:
+ for icrsh in range(self.n_corr_shells):
+ for sp in dens_mat[icrsh]:
+ dens_mat[icrsh][sp] = mpi.all_reduce(
+ mpi.world, dens_mat[icrsh][sp], lambda x, y: x + y)
+ mpi.barrier()
+
+ if self.symm_op != 0:
+ dens_mat = self.symmcorr.symmetrize(dens_mat)
+
+ # Rotate to local coordinate system:
+ if self.use_rotations:
+ for icrsh in range(self.n_corr_shells):
+ for sp in dens_mat[icrsh]:
+ if self.rot_mat_time_inv[icrsh] == 1:
+ dens_mat[icrsh][sp] = dens_mat[icrsh][sp].conjugate()
+ dens_mat[icrsh][sp] = numpy.dot(numpy.dot(self.rot_mat[icrsh].conjugate().transpose(), dens_mat[icrsh][sp]),
+ self.rot_mat[icrsh])
+
+ return dens_mat
+
def density_matrix_matsubara(self, method='using_gf', beta=40.0):
"""Calculate density matrices in one of two ways.
@@ -578,7 +675,9 @@ def density_matrix_matsubara(self, method='using_gf', beta=40.0):
for inu in range(self.n_orbitals[ik, ind]):
# only works for diagonal hopping matrix (true in
# wien2k)
- if (self.hopping[ik, ind, inu, inu] - self.h_field * (1 - 2 * isp)) < 0.0:
+ # if (self.hopping[ik, ind, inu, inu] - self.h_field * (1 - 2 * isp)) < 0.0:
+ # +++REPLACED
+ if (self.hopping_part[ik][ind, inu, inu] - self.h_field * (1 - 2 * isp)) < 0.0:
MMat[isp][inu, inu] = 1.0
else:
MMat[isp][inu, inu] = 0.0
@@ -621,12 +720,22 @@ def density_matrix_matsubara(self, method='using_gf', beta=40.0):
return dens_mat
+ ###############################################################
+ # hopping is a large array ([n_k, n_spin, n_bands, n_bands]),
+ # so broadcasting it to all nodes could cause out of memory.
+ # To avoid this, each process stores a part of hopping array
+ # that is actually used in k-loop.
+ ###############################################################
###############################################################
- # OVERRIDE FUNCTIONS
# mpi.bcast is replaced with the split transfer version
# to avoid OverFlowError when object size exceeds ~2GB
+ ###############################################################
+
+ ###############################################################
+ # OVERRIDE FUNCTIONS
# Replaced parts are indicated by "+++REPLACED"
+ # Added parts are indicated by "+++ADDED"
###############################################################
def read_input_from_hdf(self, subgrp, things_to_read):
@@ -675,10 +784,94 @@ def read_input_from_hdf(self, subgrp, things_to_read):
# now do the broadcasting:
for it in things_to_read:
+ # +++ADDED
+ # do not broadcast hopping
+ if it == 'hopping':
+ continue
# setattr(self, it, mpi.bcast(getattr(self, it)))
# +++REPLACED
setattr(self, it, dcore_mpi.bcast(getattr(self, it))) # split transfer version
subgroup_present = mpi.bcast(subgroup_present)
values_not_read = mpi.bcast(values_not_read)
+ # +++ADDED
+ # distribute slice of hopping
+ if 'hopping' in things_to_read:
+ self.slice_hopping()
+
return subgroup_present, values_not_read
+
+ ###############################################################
+ # ADDED FUNCTIONS
+ ###############################################################
+
+ def slice_hopping(self):
+ """hopping array is sliced and distributed as hopping_part. Each process (rank) stores only a part of hopping array.
+
+ hopping : (numpy.ndarray) [ik, sp, orb1, orb2]
+ hopping_part : (dict(numpy.ndarray)) [ik][sp, orb1, orb2]
+ """
+
+ mpi.report("hopping array is sliced and distributed as hopping_part.")
+
+ ikarray = numpy.array(list(range(self.n_k)))
+ ikarray_part = numpy.array(mpi.slice_array(ikarray))
+
+ rank_assigned = np.zeros(self.n_k, dtype=int)
+ rank_assigned[ikarray_part] = mpi.rank
+ rank_assigned = mpi.all_reduce(mpi.world, rank_assigned, lambda x, y: x + y)
+
+ self.hopping_part = {}
+ for ik in ikarray:
+ dest = rank_assigned[ik]
+ if dest == 0:
+ if mpi.rank == 0:
+ self.hopping_part[ik] = self.hopping[ik, ...]
+ else:
+ # Send hopping[ik] from rank=0 to rank=dest
+ if mpi.rank == 0:
+ # mpi.Send(self.hopping[ik, ...], dest=dest, tag=ik)
+ mpi.send(self.hopping[ik, ...], dest=dest)
+ elif mpi.rank == dest:
+ # self.hopping_part[ik] = mpi.Recv(source=0, tag=ik)
+ self.hopping_part[ik] = mpi.recv(source=0)
+
+ # Check if hopping_part is properly set
+ assert len(self.hopping_part) == ikarray_part.size
+ assert set(self.hopping_part.keys()) == set(ikarray_part)
+
+ ###############################################################
+ # OVERRIDE FUNCTIONS
+ # Replaced parts are indicated by "+++REPLACED"
+ ###############################################################
+
+ # This method uses hopping but is not parallelized.
+ # Wrap the original method so that only the master node calculates.
+ def eff_atomic_levels(self):
+ if mpi.is_master_node():
+ eff_atlevels = super().eff_atomic_levels()
+ else:
+ eff_atlevels = None
+ return mpi.bcast(eff_atlevels)
+
+ def calculate_min_max_band_energies(self):
+ # hop = self.hopping
+ # diag_hop = numpy.zeros(hop.shape[:-1])
+ # hop_slice = mpi.slice_array(hop)
+ # +++REPLACED
+ hop_slice = numpy.array([hop_ik for hop_ik in self.hopping_part.values()]) # dict(ndarray) to ndarray
+ diag_hop = numpy.zeros((self.n_k,) + hop_slice.shape[1:3])
+
+ diag_hop_slice = mpi.slice_array(diag_hop)
+ diag_hop_slice[:] = numpy.linalg.eigvalsh(hop_slice)
+ diag_hop = mpi.all_reduce(mpi.world, diag_hop, lambda x, y: x + y)
+ min_band_energy = diag_hop.min().real
+ max_band_energy = diag_hop.max().real
+ self.min_band_energy = min_band_energy
+ self.max_band_energy = max_band_energy
+ return min_band_energy, max_band_energy
+
+ # This method is not used for the moment.
+ # Actually, replacement is simple.
+ def calc_density_correction(self, filename=None, dm_type='wien2k'):
+ raise Exception("hopping must be replaced with hopping_part")
diff --git a/src/dcore/sumkdft_workers/gloc_worker.py b/src/dcore/sumkdft_workers/gloc_worker.py
index a77cd6ff..f551bf6c 100644
--- a/src/dcore/sumkdft_workers/gloc_worker.py
+++ b/src/dcore/sumkdft_workers/gloc_worker.py
@@ -26,9 +26,13 @@ def run(self):
sk.calc_mu(self.params['prec_mu'])
# calc_mu returns None when it failed in adjusting chemical potential
if sk.chemical_potential is None:
+ # TODO: sys.exit is not MPI safe. replace with MPI.COMM_WORLD.Abort(1)?
sys.exit("ERROR: Failed in adjusting chemical potential")
if mpi.is_master_node():
results['mu'] = float(sk.chemical_potential)
+ results['total_charge'] = sk.density_required
+ else:
+ results['total_charge'] = sk.total_density() + sk.charge_below
# Local Green's function and Density matrix
Gloc = sk.extract_G_loc(with_dc=with_dc)
diff --git a/src/dcore/tools.py b/src/dcore/tools.py
index 3cf7b674..5ad75c9e 100644
--- a/src/dcore/tools.py
+++ b/src/dcore/tools.py
@@ -908,7 +908,7 @@ def expand_path(exec_path):
full_path = os.path.expandvars(exec_path) # expand environment variables
full_path = shutil.which(full_path) # return full path
if full_path is None:
- print(f"ERROR: {exec_path} does not exist. Set exec_path properly!", file=sys.stderr)
+ print(f"ERROR: '{exec_path}' does not exist. Set exec_path properly!", file=sys.stderr)
sys.exit(1)
return full_path
diff --git a/tests/non-mpi/hphi/hphi.ini b/tests/non-mpi/hphi/hphi.ini
new file mode 100644
index 00000000..9532de0d
--- /dev/null
+++ b/tests/non-mpi/hphi/hphi.ini
@@ -0,0 +1,37 @@
+[model]
+seedname = square
+lattice = square
+norb = 1
+nelec = 1.0
+t = -1.0
+kanamori = [(4.0, 0.0, 0.0)]
+nk0 = 8
+nk1 = 8
+nk2 = 1
+
+[system]
+T = 0.1
+n_iw = 1000
+mu = 2.0
+fix_mu = True
+
+[impurity_solver]
+name = HPhi
+exec_path{str} = HPhi
+exct{int} = 10
+n_bath{int} = 03
+fit_gtol{float} = 1e-6
+
+[control]
+max_step = 1
+sigma_mix = 1.0
+# time_reversal = True
+converge_tol = 1e-5
+
+# [tool]
+# broadening = 0.4
+# knode = [(G,0.0,0.0,0.0),(X,0.5,0.0,0.0),(M,0.5,0.5,0.0),(G,0.0,0.0,0.0)]
+# nk_line = 100
+# omega_max =6.0
+# omega_min =-5.0
+# Nomega = 400
diff --git a/tests/non-mpi/hphi/sigma.dat.ref b/tests/non-mpi/hphi/sigma.dat.ref
new file mode 100644
index 00000000..04870da3
--- /dev/null
+++ b/tests/non-mpi/hphi/sigma.dat.ref
@@ -0,0 +1,2007 @@
+# Local self energy at imaginary frequency
+# [Column] Data
+# [1] Frequency
+# [2] Re(Sigma_{shell=0, spin=up, 0, 0})
+# [3] Im(Sigma_{shell=0, spin=up, 0, 0})
+# [4] Re(Sigma_{shell=0, spin=down, 0, 0})
+# [5] Im(Sigma_{shell=0, spin=down, 0, 0})
+-628.004371 1.869452 0.006341 1.869432 0.006341
+-627.376053 1.869458 0.006356 1.869438 0.006356
+-626.747734 1.869474 0.006370 1.869454 0.006354
+-626.119416 1.869450 0.006371 1.869430 0.006363
+-625.491097 1.869452 0.006363 1.869432 0.006401
+-624.862779 1.869453 0.006395 1.869433 0.006365
+-624.234460 1.869456 0.006381 1.869436 0.006381
+-623.606142 1.869445 0.006399 1.869425 0.006375
+-622.977823 1.869456 0.006399 1.869436 0.006392
+-622.349505 1.869454 0.006394 1.869434 0.006402
+-621.721186 1.869467 0.006411 1.869440 0.006403
+-621.092868 1.869467 0.006414 1.869447 0.006414
+-620.464549 1.869458 0.006400 1.869438 0.006423
+-619.836231 1.869460 0.006426 1.869440 0.006426
+-619.207912 1.869438 0.006420 1.869418 0.006457
+-618.579593 1.869448 0.006453 1.869428 0.006431
+-617.951275 1.869451 0.006447 1.869431 0.006463
+-617.322956 1.869469 0.006436 1.869449 0.006467
+-616.694638 1.869459 0.006476 1.869439 0.006453
+-616.066319 1.869473 0.006488 1.869453 0.006458
+-615.438001 1.869456 0.006461 1.869436 0.006477
+-614.809682 1.869463 0.006482 1.869443 0.006475
+-614.181364 1.869463 0.006472 1.869443 0.006480
+-613.553045 1.869450 0.006502 1.869430 0.006494
+-612.924727 1.869444 0.006501 1.869424 0.006494
+-612.296408 1.869462 0.006504 1.869442 0.006481
+-611.668090 1.869467 0.006498 1.869447 0.006521
+-611.039771 1.869441 0.006512 1.869421 0.006534
+-610.411453 1.869454 0.006503 1.869434 0.006525
+-609.783134 1.869460 0.006550 1.869440 0.006520
+-609.154816 1.869452 0.006554 1.869432 0.006531
+-608.526497 1.869446 0.006562 1.869426 0.006533
+-607.898178 1.869440 0.006543 1.869420 0.006542
+-607.269860 1.869472 0.006557 1.869451 0.006557
+-606.641541 1.869452 0.006580 1.869432 0.006552
+-606.013223 1.869449 0.006560 1.869429 0.006582
+-605.384904 1.869446 0.006593 1.869426 0.006570
+-604.756586 1.869452 0.006580 1.869432 0.006594
+-604.128267 1.869474 0.006594 1.869454 0.006594
+-603.499949 1.869458 0.006601 1.869438 0.006592
+-602.871630 1.869459 0.006597 1.869439 0.006596
+-602.243312 1.869461 0.006614 1.869441 0.006615
+-601.614993 1.869464 0.006610 1.869444 0.006632
+-600.986675 1.869446 0.006615 1.869426 0.006636
+-600.358356 1.869442 0.006640 1.869422 0.006625
+-599.730038 1.869442 0.006639 1.869422 0.006646
+-599.101719 1.869461 0.006646 1.869441 0.006631
+-598.473401 1.869469 0.006656 1.869448 0.006656
+-597.845082 1.869448 0.006674 1.869428 0.006653
+-597.216763 1.869463 0.006683 1.869443 0.006670
+-596.588445 1.869452 0.006675 1.869432 0.006681
+-595.960126 1.869448 0.006686 1.869428 0.006686
+-595.331808 1.869459 0.006700 1.869439 0.006700
+-594.703489 1.869450 0.006694 1.869430 0.006694
+-594.075171 1.869442 0.006707 1.869422 0.006686
+-593.446852 1.869456 0.006708 1.869436 0.006714
+-592.818534 1.869449 0.006707 1.869429 0.006729
+-592.190215 1.869444 0.006724 1.869424 0.006745
+-591.561897 1.869461 0.006742 1.869441 0.006742
+-590.933578 1.869470 0.006743 1.869450 0.006743
+-590.305260 1.869440 0.006747 1.869420 0.006747
+-589.676941 1.869460 0.006736 1.869440 0.006763
+-589.048623 1.869451 0.006763 1.869431 0.006763
+-588.420304 1.869437 0.006777 1.869417 0.006757
+-587.791985 1.869459 0.006775 1.869439 0.006762
+-587.163667 1.869468 0.006770 1.869448 0.006777
+-586.535348 1.869444 0.006784 1.869423 0.006805
+-585.907030 1.869454 0.006790 1.869433 0.006797
+-585.278711 1.869452 0.006805 1.869432 0.006811
+-584.650393 1.869457 0.006817 1.869437 0.006811
+-584.022074 1.869443 0.006821 1.869423 0.006821
+-583.393756 1.869450 0.006832 1.869430 0.006832
+-582.765437 1.869437 0.006828 1.869417 0.006834
+-582.137119 1.869454 0.006854 1.869434 0.006854
+-581.508800 1.869451 0.006847 1.869431 0.006847
+-580.880482 1.869447 0.006852 1.869427 0.006872
+-580.252163 1.869453 0.006859 1.869433 0.006854
+-579.623845 1.869465 0.006874 1.869445 0.006868
+-578.995526 1.869439 0.006880 1.869419 0.006854
+-578.367208 1.869447 0.006881 1.869427 0.006901
+-577.738889 1.869443 0.006897 1.869423 0.006897
+-577.110570 1.869445 0.006917 1.869425 0.006890
+-576.482252 1.869456 0.006912 1.869436 0.006906
+-575.853933 1.869454 0.006922 1.869434 0.006915
+-575.225615 1.869447 0.006916 1.869427 0.006935
+-574.597296 1.869448 0.006932 1.869428 0.006932
+-573.968978 1.869448 0.006922 1.869428 0.006942
+-573.340659 1.869470 0.006944 1.869450 0.006944
+-572.712341 1.869473 0.006950 1.869453 0.006969
+-572.084022 1.869451 0.006962 1.869431 0.006974
+-571.455704 1.869456 0.006979 1.869436 0.006973
+-570.827385 1.869462 0.006962 1.869442 0.006987
+-570.199067 1.869462 0.006991 1.869442 0.006984
+-569.570748 1.869470 0.007000 1.869450 0.007006
+-568.942430 1.869453 0.006993 1.869433 0.007000
+-568.314111 1.869443 0.007009 1.869423 0.007015
+-567.685793 1.869448 0.007012 1.869428 0.007018
+-567.057474 1.869459 0.007026 1.869439 0.007026
+-566.429155 1.869452 0.007042 1.869432 0.007031
+-565.800837 1.869434 0.007017 1.869414 0.007042
+-565.172518 1.869449 0.007035 1.869429 0.007053
+-564.544200 1.869464 0.007044 1.869444 0.007063
+-563.915881 1.869449 0.007056 1.869429 0.007069
+-563.287563 1.869447 0.007074 1.869427 0.007075
+-562.659244 1.869465 0.007086 1.869445 0.007067
+-562.030926 1.869440 0.007083 1.869420 0.007083
+-561.402607 1.869454 0.007087 1.869434 0.007093
+-560.774289 1.869456 0.007106 1.869436 0.007093
+-560.145970 1.869459 0.007097 1.869439 0.007098
+-559.517652 1.869452 0.007137 1.869432 0.007112
+-558.889333 1.869451 0.007128 1.869431 0.007110
+-558.261015 1.869451 0.007127 1.869431 0.007128
+-557.632696 1.869457 0.007150 1.869437 0.007150
+-557.004377 1.869454 0.007165 1.869434 0.007152
+-556.376059 1.869457 0.007156 1.869437 0.007156
+-555.747740 1.869473 0.007162 1.869453 0.007162
+-555.119422 1.869454 0.007186 1.869434 0.007167
+-554.491103 1.869459 0.007178 1.869439 0.007178
+-553.862785 1.869443 0.007197 1.869423 0.007179
+-553.234466 1.869444 0.007200 1.869424 0.007200
+-552.606148 1.869447 0.007198 1.869427 0.007216
+-551.977829 1.869440 0.007232 1.869420 0.007207
+-551.349511 1.869450 0.007239 1.869430 0.007221
+-550.721192 1.869444 0.007237 1.869424 0.007232
+-550.092874 1.869445 0.007256 1.869425 0.007238
+-549.464555 1.869459 0.007258 1.869439 0.007245
+-548.836237 1.869457 0.007264 1.869436 0.007258
+-548.207918 1.869454 0.007259 1.869434 0.007252
+-547.579600 1.869454 0.007268 1.869434 0.007273
+-546.951281 1.869472 0.007285 1.869452 0.007267
+-546.322962 1.869467 0.007286 1.869447 0.007280
+-545.694644 1.869470 0.007294 1.869450 0.007294
+-545.066325 1.869455 0.007307 1.869435 0.007307
+-544.438007 1.869454 0.007301 1.869434 0.007330
+-543.809688 1.869460 0.007321 1.869440 0.007333
+-543.181370 1.869472 0.007333 1.869452 0.007333
+-542.553051 1.869456 0.007330 1.869436 0.007340
+-541.924733 1.869459 0.007344 1.869439 0.007355
+-541.296414 1.869463 0.007346 1.869443 0.007358
+-540.668096 1.869450 0.007360 1.869430 0.007360
+-540.039777 1.869450 0.007372 1.869430 0.007372
+-539.411459 1.869463 0.007377 1.869443 0.007383
+-538.783140 1.869454 0.007396 1.869434 0.007378
+-538.154822 1.869451 0.007400 1.869431 0.007393
+-537.526503 1.869468 0.007416 1.869448 0.007410
+-536.898184 1.869462 0.007416 1.869442 0.007416
+-536.269866 1.869457 0.007422 1.869437 0.007434
+-535.641547 1.869458 0.007428 1.869438 0.007446
+-535.013229 1.869456 0.007445 1.869436 0.007445
+-534.384910 1.869460 0.007449 1.869440 0.007449
+-533.756592 1.869459 0.007462 1.869439 0.007462
+-533.128273 1.869454 0.007467 1.869434 0.007484
+-532.499955 1.869450 0.007463 1.869430 0.007486
+-531.871636 1.869448 0.007491 1.869428 0.007485
+-531.243318 1.869463 0.007491 1.869443 0.007503
+-530.614999 1.869462 0.007511 1.869442 0.007511
+-529.986681 1.869452 0.007515 1.869432 0.007520
+-529.358362 1.869465 0.007519 1.869439 0.007525
+-528.730044 1.869445 0.007535 1.869425 0.007530
+-528.101725 1.869449 0.007552 1.869429 0.007535
+-527.473407 1.869438 0.007541 1.869418 0.007541
+-526.845088 1.869460 0.007557 1.869440 0.007546
+-526.216769 1.869440 0.007573 1.869420 0.007556
+-525.588451 1.869454 0.007588 1.869434 0.007567
+-524.960132 1.869457 0.007597 1.869437 0.007581
+-524.331814 1.869452 0.007589 1.869432 0.007590
+-523.703495 1.869453 0.007596 1.869433 0.007596
+-523.075177 1.869454 0.007614 1.869434 0.007619
+-522.446858 1.869452 0.007624 1.869432 0.007619
+-521.818540 1.869445 0.007639 1.869425 0.007618
+-521.190221 1.869445 0.007642 1.869425 0.007642
+-520.561903 1.869452 0.007649 1.869432 0.007655
+-519.933584 1.869465 0.007661 1.869445 0.007661
+-519.305266 1.869452 0.007662 1.869432 0.007683
+-518.676947 1.869446 0.007671 1.869426 0.007677
+-518.048629 1.869462 0.007691 1.869442 0.007692
+-517.420310 1.869453 0.007690 1.869433 0.007690
+-516.791992 1.869450 0.007709 1.869430 0.007709
+-516.163673 1.869460 0.007707 1.869440 0.007712
+-515.535354 1.869459 0.007716 1.869439 0.007742
+-514.907036 1.869439 0.007725 1.869419 0.007741
+-514.278717 1.869457 0.007745 1.869437 0.007735
+-513.650399 1.869455 0.007757 1.869435 0.007757
+-513.022080 1.869459 0.007758 1.869439 0.007759
+-512.393762 1.869449 0.007772 1.869429 0.007772
+-511.765443 1.869456 0.007799 1.869436 0.007783
+-511.137125 1.869459 0.007802 1.869439 0.007787
+-510.508806 1.869447 0.007813 1.869427 0.007787
+-509.880488 1.869457 0.007803 1.869437 0.007828
+-509.252169 1.869469 0.007826 1.869449 0.007816
+-508.623851 1.869441 0.007829 1.869421 0.007829
+-507.995532 1.869450 0.007831 1.869430 0.007847
+-507.367214 1.869449 0.007855 1.869429 0.007850
+-506.738895 1.869460 0.007865 1.869440 0.007854
+-506.110576 1.869457 0.007876 1.869437 0.007866
+-505.482258 1.869445 0.007879 1.869425 0.007879
+-504.853939 1.869460 0.007886 1.869440 0.007895
+-504.225621 1.869440 0.007896 1.869420 0.007901
+-503.597302 1.869462 0.007911 1.869442 0.007906
+-502.968984 1.869466 0.007911 1.869446 0.007926
+-502.340665 1.869455 0.007932 1.869435 0.007927
+-501.712347 1.869450 0.007940 1.869430 0.007925
+-501.084028 1.869452 0.007936 1.869432 0.007961
+-500.455710 1.869461 0.007955 1.869441 0.007955
+-499.827391 1.869444 0.007965 1.869424 0.007965
+-499.199073 1.869450 0.007984 1.869430 0.007984
+-498.570754 1.869447 0.007975 1.869427 0.007990
+-497.942436 1.869460 0.007994 1.869440 0.007989
+-497.314117 1.869460 0.008011 1.869440 0.008010
+-496.685799 1.869450 0.008013 1.869430 0.008032
+-496.057480 1.869443 0.008025 1.869423 0.008025
+-495.429161 1.869461 0.008029 1.869441 0.008053
+-494.800843 1.869446 0.008055 1.869426 0.008055
+-494.172524 1.869447 0.008057 1.869427 0.008062
+-493.544206 1.869458 0.008073 1.869438 0.008078
+-492.915887 1.869448 0.008087 1.869428 0.008087
+-492.287569 1.869457 0.008093 1.869437 0.008078
+-491.659250 1.869449 0.008099 1.869429 0.008089
+-491.030932 1.869461 0.008105 1.869441 0.008105
+-490.402613 1.869445 0.008117 1.869425 0.008117
+-489.774295 1.869455 0.008124 1.869435 0.008129
+-489.145976 1.869452 0.008140 1.869432 0.008140
+-488.517658 1.869455 0.008147 1.869435 0.008162
+-487.889339 1.869455 0.008162 1.869435 0.008162
+-487.261021 1.869441 0.008172 1.869421 0.008181
+-486.632702 1.869444 0.008182 1.869424 0.008182
+-486.004384 1.869452 0.008195 1.869432 0.008195
+-485.376065 1.869447 0.008203 1.869427 0.008203
+-484.747746 1.869449 0.008212 1.869429 0.008212
+-484.119428 1.869456 0.008227 1.869436 0.008227
+-483.491109 1.869451 0.008232 1.869431 0.008233
+-482.862791 1.869447 0.008248 1.869427 0.008244
+-482.234472 1.869449 0.008263 1.869429 0.008249
+-481.606154 1.869448 0.008263 1.869428 0.008272
+-480.977835 1.869461 0.008283 1.869441 0.008278
+-480.349517 1.869463 0.008302 1.869443 0.008288
+-479.721198 1.869447 0.008298 1.869427 0.008303
+-479.092880 1.869456 0.008320 1.869436 0.008302
+-478.464561 1.869453 0.008328 1.869433 0.008315
+-477.836243 1.869451 0.008333 1.869430 0.008333
+-477.207924 1.869459 0.008355 1.869439 0.008351
+-476.579606 1.869455 0.008355 1.869435 0.008355
+-475.951287 1.869452 0.008355 1.869432 0.008368
+-475.322968 1.869447 0.008372 1.869426 0.008376
+-474.694650 1.869447 0.008383 1.869427 0.008387
+-474.066331 1.869457 0.008393 1.869437 0.008407
+-473.438013 1.869447 0.008406 1.869427 0.008420
+-472.809694 1.869447 0.008432 1.869427 0.008419
+-472.181376 1.869453 0.008433 1.869433 0.008438
+-471.553057 1.869460 0.008439 1.869440 0.008452
+-470.924739 1.869447 0.008455 1.869427 0.008468
+-470.296420 1.869456 0.008458 1.869436 0.008466
+-469.668102 1.869450 0.008485 1.869430 0.008476
+-469.039783 1.869449 0.008494 1.869429 0.008494
+-468.411465 1.869459 0.008509 1.869439 0.008496
+-467.783146 1.869457 0.008521 1.869437 0.008512
+-467.154828 1.869453 0.008526 1.869433 0.008526
+-466.526509 1.869458 0.008536 1.869438 0.008545
+-465.898191 1.869452 0.008554 1.869432 0.008550
+-465.269872 1.869451 0.008557 1.869431 0.008557
+-464.641553 1.869456 0.008567 1.869436 0.008588
+-464.013235 1.869451 0.008584 1.869431 0.008592
+-463.384916 1.869463 0.008596 1.869443 0.008595
+-462.756598 1.869455 0.008607 1.869435 0.008607
+-462.128279 1.869449 0.008628 1.869429 0.008611
+-461.499961 1.869449 0.008619 1.869429 0.008632
+-460.871642 1.869454 0.008646 1.869434 0.008646
+-460.243324 1.869449 0.008649 1.869429 0.008649
+-459.615005 1.869457 0.008668 1.869437 0.008672
+-458.986687 1.869446 0.008668 1.869426 0.008681
+-458.358368 1.869449 0.008686 1.869429 0.008699
+-457.730050 1.869457 0.008704 1.869437 0.008704
+-457.101731 1.869442 0.008724 1.869422 0.008711
+-456.473413 1.869454 0.008719 1.869434 0.008715
+-455.845094 1.869454 0.008736 1.869434 0.008744
+-455.216776 1.869460 0.008743 1.869428 0.008743
+-454.588457 1.869463 0.008760 1.869443 0.008760
+-453.960138 1.869453 0.008774 1.869433 0.008769
+-453.331820 1.869451 0.008783 1.869431 0.008791
+-452.703501 1.869443 0.008795 1.869423 0.008799
+-452.075183 1.869456 0.008820 1.869436 0.008813
+-451.446864 1.869451 0.008818 1.869431 0.008831
+-450.818546 1.869459 0.008829 1.869439 0.008837
+-450.190227 1.869449 0.008859 1.869429 0.008851
+-449.561909 1.869453 0.008862 1.869433 0.008858
+-448.933590 1.869450 0.008880 1.869430 0.008880
+-448.305272 1.869445 0.008890 1.869425 0.008874
+-447.676953 1.869444 0.008893 1.869424 0.008889
+-447.048635 1.869450 0.008919 1.869430 0.008907
+-446.420316 1.869461 0.008913 1.869441 0.008921
+-445.791998 1.869443 0.008933 1.869423 0.008933
+-445.163679 1.869449 0.008948 1.869429 0.008955
+-444.535360 1.869449 0.008963 1.869429 0.008967
+-443.907042 1.869451 0.008976 1.869431 0.008976
+-443.278723 1.869446 0.008986 1.869426 0.008986
+-442.650405 1.869443 0.008997 1.869423 0.008997
+-442.022086 1.869457 0.009007 1.869437 0.009004
+-441.393768 1.869461 0.009018 1.869441 0.009034
+-440.765449 1.869459 0.009029 1.869439 0.009041
+-440.137131 1.869459 0.009044 1.869439 0.009044
+-439.508812 1.869448 0.009069 1.869428 0.009065
+-438.880494 1.869455 0.009072 1.869435 0.009075
+-438.252175 1.869452 0.009089 1.869432 0.009089
+-437.623857 1.869443 0.009098 1.869423 0.009098
+-436.995538 1.869443 0.009111 1.869423 0.009114
+-436.367220 1.869452 0.009120 1.869432 0.009119
+-435.738901 1.869459 0.009140 1.869439 0.009140
+-435.110583 1.869457 0.009153 1.869437 0.009153
+-434.482264 1.869444 0.009166 1.869424 0.009163
+-433.853945 1.869453 0.009177 1.869433 0.009177
+-433.225627 1.869455 0.009189 1.869435 0.009189
+-432.597308 1.869444 0.009198 1.869424 0.009209
+-431.968990 1.869450 0.009229 1.869430 0.009214
+-431.340671 1.869454 0.009232 1.869434 0.009232
+-430.712353 1.869452 0.009245 1.869432 0.009238
+-430.084034 1.869459 0.009258 1.869439 0.009258
+-429.455716 1.869446 0.009276 1.869426 0.009283
+-428.827397 1.869449 0.009283 1.869429 0.009283
+-428.199079 1.869450 0.009304 1.869430 0.009300
+-427.570760 1.869441 0.009316 1.869421 0.009316
+-426.942442 1.869449 0.009328 1.869429 0.009328
+-426.314123 1.869456 0.009344 1.869436 0.009348
+-425.685805 1.869449 0.009347 1.869429 0.009347
+-425.057486 1.869445 0.009360 1.869425 0.009371
+-424.429167 1.869449 0.009380 1.869429 0.009387
+-423.800849 1.869455 0.009397 1.869435 0.009397
+-423.172530 1.869455 0.009415 1.869435 0.009412
+-422.544212 1.869461 0.009419 1.869441 0.009423
+-421.915893 1.869451 0.009445 1.869431 0.009442
+-421.287575 1.869449 0.009452 1.869429 0.009452
+-420.659256 1.869449 0.009465 1.869429 0.009465
+-420.030938 1.869445 0.009486 1.869425 0.009486
+-419.402619 1.869452 0.009491 1.869432 0.009495
+-418.774301 1.869454 0.009511 1.869434 0.009500
+-418.145982 1.869451 0.009521 1.869431 0.009525
+-417.517664 1.869443 0.009538 1.869423 0.009531
+-416.889345 1.869454 0.009556 1.869434 0.009549
+-416.261027 1.869453 0.009566 1.869433 0.009566
+-415.632708 1.869444 0.009590 1.869424 0.009584
+-415.004390 1.869450 0.009597 1.869430 0.009597
+-414.376071 1.869451 0.009611 1.869431 0.009611
+-413.747752 1.869454 0.009624 1.869434 0.009624
+-413.119434 1.869451 0.009641 1.869431 0.009645
+-412.491115 1.869454 0.009651 1.869434 0.009648
+-411.862797 1.869449 0.009669 1.869429 0.009675
+-411.234478 1.869442 0.009683 1.869422 0.009686
+-410.606160 1.869447 0.009702 1.869427 0.009702
+-409.977841 1.869451 0.009715 1.869431 0.009718
+-409.349523 1.869450 0.009733 1.869430 0.009733
+-408.721204 1.869454 0.009737 1.869434 0.009737
+-408.092886 1.869446 0.009757 1.869426 0.009767
+-407.464567 1.869448 0.009770 1.869428 0.009766
+-406.836249 1.869444 0.009787 1.869424 0.009787
+-406.207930 1.869449 0.009808 1.869429 0.009808
+-405.579612 1.869456 0.009821 1.869436 0.009815
+-404.951293 1.869452 0.009841 1.869432 0.009834
+-404.322975 1.869452 0.009851 1.869432 0.009851
+-403.694656 1.869445 0.009862 1.869425 0.009862
+-403.066337 1.869447 0.009876 1.869427 0.009876
+-402.438019 1.869453 0.009898 1.869433 0.009892
+-401.809700 1.869452 0.009907 1.869432 0.009910
+-401.181382 1.869450 0.009926 1.869430 0.009926
+-400.553063 1.869452 0.009939 1.869432 0.009946
+-399.924745 1.869453 0.009957 1.869433 0.009954
+-399.296426 1.869447 0.009980 1.869427 0.009967
+-398.668108 1.869456 0.009991 1.869436 0.009991
+-398.039789 1.869454 0.010008 1.869434 0.009998
+-397.411471 1.869441 0.010018 1.869421 0.010030
+-396.783152 1.869455 0.010036 1.869435 0.010036
+-396.154834 1.869456 0.010058 1.869436 0.010058
+-395.526515 1.869452 0.010069 1.869432 0.010069
+-394.898197 1.869448 0.010086 1.869428 0.010086
+-394.269878 1.869448 0.010106 1.869428 0.010106
+-393.641559 1.869453 0.010120 1.869433 0.010123
+-393.013241 1.869443 0.010130 1.869423 0.010139
+-392.384922 1.869449 0.010141 1.869429 0.010141
+-391.756604 1.869445 0.010160 1.869425 0.010160
+-391.128285 1.869455 0.010179 1.869435 0.010179
+-390.499967 1.869447 0.010200 1.869427 0.010197
+-389.871648 1.869449 0.010206 1.869429 0.010215
+-389.243330 1.869451 0.010232 1.869431 0.010232
+-388.615011 1.869448 0.010248 1.869428 0.010248
+-387.986693 1.869448 0.010267 1.869428 0.010267
+-387.358374 1.869446 0.010280 1.869426 0.010280
+-386.730056 1.869450 0.010290 1.869430 0.010290
+-386.101737 1.869447 0.010313 1.869427 0.010316
+-385.473419 1.869454 0.010330 1.869434 0.010333
+-384.845100 1.869450 0.010349 1.869430 0.010346
+-384.216782 1.869450 0.010367 1.869430 0.010367
+-383.588463 1.869455 0.010387 1.869435 0.010387
+-382.960144 1.869451 0.010396 1.869431 0.010396
+-382.331826 1.869449 0.010415 1.869429 0.010419
+-381.703507 1.869452 0.010430 1.869432 0.010428
+-381.075189 1.869442 0.010444 1.869422 0.010447
+-380.446870 1.869449 0.010467 1.869429 0.010469
+-379.818552 1.869444 0.010486 1.869424 0.010486
+-379.190233 1.869453 0.010503 1.869433 0.010503
+-378.561915 1.869444 0.010517 1.869424 0.010520
+-377.933596 1.869446 0.010535 1.869425 0.010538
+-377.305278 1.869441 0.010551 1.869421 0.010553
+-376.676959 1.869449 0.010571 1.869429 0.010571
+-376.048641 1.869452 0.010590 1.869432 0.010590
+-375.420322 1.869453 0.010604 1.869433 0.010604
+-374.792004 1.869457 0.010623 1.869437 0.010629
+-374.163685 1.869444 0.010644 1.869424 0.010644
+-373.535367 1.869445 0.010664 1.869425 0.010653
+-372.907048 1.869444 0.010678 1.869424 0.010678
+-372.278729 1.869441 0.010695 1.869421 0.010695
+-371.650411 1.869447 0.010721 1.869427 0.010713
+-371.022092 1.869454 0.010732 1.869434 0.010738
+-370.393774 1.869454 0.010757 1.869434 0.010759
+-369.765455 1.869448 0.010774 1.869428 0.010771
+-369.137137 1.869445 0.010788 1.869425 0.010788
+-368.508818 1.869453 0.010804 1.869433 0.010804
+-367.880500 1.869449 0.010824 1.869429 0.010827
+-367.252181 1.869450 0.010841 1.869430 0.010841
+-366.623863 1.869448 0.010862 1.869428 0.010862
+-365.995544 1.869451 0.010875 1.869431 0.010875
+-365.367226 1.869448 0.010897 1.869428 0.010904
+-364.738907 1.869448 0.010918 1.869428 0.010918
+-364.110589 1.869447 0.010935 1.869427 0.010937
+-363.482270 1.869449 0.010959 1.869429 0.010959
+-362.853951 1.869450 0.010974 1.869430 0.010974
+-362.225633 1.869452 0.010992 1.869432 0.010992
+-361.597314 1.869442 0.011014 1.869422 0.011011
+-360.968996 1.869448 0.011040 1.869428 0.011038
+-360.340677 1.869444 0.011051 1.869424 0.011046
+-359.712359 1.869450 0.011071 1.869430 0.011071
+-359.084040 1.869450 0.011091 1.869430 0.011091
+-358.455722 1.869448 0.011114 1.869428 0.011112
+-357.827403 1.869450 0.011135 1.869430 0.011130
+-357.199085 1.869440 0.011153 1.869420 0.011151
+-356.570766 1.869450 0.011175 1.869430 0.011167
+-355.942448 1.869452 0.011192 1.869432 0.011189
+-355.314129 1.869445 0.011207 1.869425 0.011207
+-354.685811 1.869444 0.011222 1.869424 0.011229
+-354.057492 1.869444 0.011248 1.869424 0.011250
+-353.429174 1.869449 0.011269 1.869429 0.011274
+-352.800855 1.869446 0.011285 1.869426 0.011282
+-352.172536 1.869443 0.011301 1.869423 0.011308
+-351.544218 1.869448 0.011325 1.869428 0.011322
+-350.915899 1.869446 0.011352 1.869426 0.011345
+-350.287581 1.869443 0.011368 1.869423 0.011368
+-349.659262 1.869446 0.011392 1.869426 0.011392
+-349.030944 1.869449 0.011404 1.869429 0.011402
+-348.402625 1.869449 0.011426 1.869429 0.011429
+-347.774307 1.869450 0.011449 1.869430 0.011449
+-347.145988 1.869446 0.011467 1.869426 0.011469
+-346.517670 1.869451 0.011493 1.869424 0.011493
+-345.889351 1.869445 0.011513 1.869425 0.011516
+-345.261033 1.869442 0.011535 1.869422 0.011533
+-344.632714 1.869446 0.011552 1.869426 0.011552
+-344.004396 1.869446 0.011578 1.869426 0.011576
+-343.376077 1.869450 0.011601 1.869430 0.011603
+-342.747759 1.869446 0.011616 1.869426 0.011616
+-342.119440 1.869449 0.011632 1.869429 0.011632
+-341.491121 1.869452 0.011660 1.869432 0.011658
+-340.862803 1.869442 0.011677 1.869422 0.011684
+-340.234484 1.869448 0.011704 1.869428 0.011704
+-339.606166 1.869448 0.011726 1.869428 0.011728
+-338.977847 1.869443 0.011747 1.869423 0.011747
+-338.349529 1.869451 0.011773 1.869424 0.011774
+-337.721210 1.869447 0.011793 1.869427 0.011795
+-337.092892 1.869446 0.011808 1.869426 0.011808
+-336.464573 1.869448 0.011834 1.869428 0.011832
+-335.836255 1.869446 0.011857 1.869426 0.011857
+-335.207936 1.869445 0.011880 1.869425 0.011875
+-334.579618 1.869444 0.011909 1.869424 0.011907
+-333.951299 1.869444 0.011924 1.869424 0.011924
+-333.322981 1.869446 0.011951 1.869426 0.011949
+-332.694662 1.869447 0.011966 1.869427 0.011967
+-332.066343 1.869446 0.011990 1.869426 0.011990
+-331.438025 1.869448 0.012013 1.869428 0.012013
+-330.809706 1.869443 0.012040 1.869423 0.012040
+-330.181388 1.869442 0.012060 1.869422 0.012058
+-329.553069 1.869446 0.012080 1.869426 0.012080
+-328.924751 1.869442 0.012106 1.869422 0.012106
+-328.296432 1.869452 0.012131 1.869432 0.012131
+-327.668114 1.869448 0.012156 1.869428 0.012154
+-327.039795 1.869440 0.012174 1.869420 0.012174
+-326.411477 1.869448 0.012193 1.869428 0.012199
+-325.783158 1.869448 0.012223 1.869428 0.012224
+-325.154840 1.869445 0.012251 1.869425 0.012246
+-324.526521 1.869442 0.012265 1.869422 0.012263
+-323.898203 1.869445 0.012295 1.869425 0.012293
+-323.269884 1.869438 0.012314 1.869418 0.012314
+-322.641566 1.869445 0.012341 1.869425 0.012341
+-322.013247 1.869446 0.012362 1.869426 0.012368
+-321.384928 1.869444 0.012392 1.869424 0.012388
+-320.756610 1.869444 0.012416 1.869424 0.012418
+-320.128291 1.869448 0.012434 1.869428 0.012436
+-319.499973 1.869441 0.012463 1.869421 0.012463
+-318.871654 1.869443 0.012489 1.869423 0.012486
+-318.243336 1.869442 0.012512 1.869422 0.012514
+-317.615017 1.869449 0.012536 1.869429 0.012536
+-316.986699 1.869444 0.012561 1.869424 0.012563
+-316.358380 1.869444 0.012584 1.869424 0.012592
+-315.730062 1.869442 0.012610 1.869422 0.012610
+-315.101743 1.869443 0.012636 1.869423 0.012634
+-314.473425 1.869441 0.012662 1.869421 0.012660
+-313.845106 1.869442 0.012686 1.869422 0.012688
+-313.216788 1.869444 0.012711 1.869424 0.012711
+-312.588469 1.869444 0.012744 1.869424 0.012738
+-311.960151 1.869443 0.012765 1.869423 0.012765
+-311.331832 1.869449 0.012794 1.869429 0.012794
+-310.703513 1.869444 0.012818 1.869424 0.012818
+-310.075195 1.869446 0.012843 1.869426 0.012843
+-309.446876 1.869447 0.012868 1.869427 0.012866
+-308.818558 1.869441 0.012899 1.869421 0.012898
+-308.190239 1.869444 0.012920 1.869424 0.012918
+-307.561921 1.869445 0.012947 1.869425 0.012946
+-306.933602 1.869447 0.012974 1.869427 0.012968
+-306.305284 1.869445 0.013000 1.869425 0.012998
+-305.676965 1.869447 0.013027 1.869427 0.013027
+-305.048647 1.869439 0.013053 1.869419 0.013051
+-304.420328 1.869443 0.013078 1.869423 0.013084
+-303.792010 1.869443 0.013105 1.869423 0.013110
+-303.163691 1.869442 0.013132 1.869422 0.013131
+-302.535373 1.869445 0.013162 1.869425 0.013161
+-301.907054 1.869443 0.013192 1.869423 0.013187
+-301.278735 1.869444 0.013215 1.869424 0.013215
+-300.650417 1.869445 0.013245 1.869425 0.013244
+-300.022098 1.869441 0.013271 1.869421 0.013271
+-299.393780 1.869442 0.013299 1.869422 0.013299
+-298.765461 1.869446 0.013328 1.869426 0.013328
+-298.137143 1.869447 0.013356 1.869421 0.013356
+-297.508824 1.869439 0.013382 1.869419 0.013384
+-296.880506 1.869441 0.013413 1.869421 0.013413
+-296.252187 1.869444 0.013442 1.869424 0.013444
+-295.623869 1.869446 0.013469 1.869426 0.013469
+-294.995550 1.869440 0.013498 1.869420 0.013498
+-294.367232 1.869445 0.013527 1.869425 0.013522
+-293.738913 1.869443 0.013556 1.869423 0.013556
+-293.110595 1.869444 0.013587 1.869424 0.013582
+-292.482276 1.869446 0.013614 1.869426 0.013614
+-291.853958 1.869441 0.013643 1.869421 0.013643
+-291.225639 1.869441 0.013670 1.869421 0.013675
+-290.597320 1.869441 0.013702 1.869421 0.013704
+-289.969002 1.869447 0.013731 1.869427 0.013737
+-289.340683 1.869445 0.013766 1.869425 0.013768
+-288.712365 1.869442 0.013789 1.869422 0.013789
+-288.084046 1.869442 0.013820 1.869422 0.013819
+-287.455728 1.869444 0.013849 1.869424 0.013848
+-286.827409 1.869442 0.013885 1.869422 0.013877
+-286.199091 1.869444 0.013913 1.869418 0.013911
+-285.570772 1.869442 0.013944 1.869422 0.013943
+-284.942454 1.869439 0.013973 1.869419 0.013975
+-284.314135 1.869440 0.014004 1.869420 0.014006
+-283.685817 1.869441 0.014034 1.869421 0.014034
+-283.057498 1.869440 0.014062 1.869420 0.014063
+-282.429180 1.869441 0.014096 1.869421 0.014095
+-281.800861 1.869443 0.014126 1.869421 0.014127
+-281.172542 1.869442 0.014160 1.869422 0.014165
+-280.544224 1.869446 0.014195 1.869426 0.014195
+-279.915905 1.869442 0.014223 1.869422 0.014224
+-279.287587 1.869443 0.014261 1.869423 0.014257
+-278.659268 1.869441 0.014288 1.869421 0.014289
+-278.030950 1.869440 0.014319 1.869420 0.014324
+-277.402631 1.869442 0.014357 1.869422 0.014352
+-276.774313 1.869440 0.014383 1.869420 0.014383
+-276.145994 1.869438 0.014420 1.869418 0.014415
+-275.517676 1.869443 0.014453 1.869423 0.014448
+-274.889357 1.869440 0.014481 1.869420 0.014485
+-274.261039 1.869439 0.014517 1.869419 0.014517
+-273.632720 1.869440 0.014552 1.869420 0.014552
+-273.004402 1.869440 0.014583 1.869420 0.014587
+-272.376083 1.869442 0.014618 1.869422 0.014617
+-271.747765 1.869439 0.014650 1.869419 0.014650
+-271.119446 1.869442 0.014684 1.869421 0.014686
+-270.491127 1.869443 0.014717 1.869423 0.014720
+-269.862809 1.869439 0.014754 1.869419 0.014754
+-269.234490 1.869440 0.014789 1.869420 0.014789
+-268.606172 1.869440 0.014826 1.869420 0.014819
+-267.977853 1.869441 0.014857 1.869421 0.014859
+-267.349535 1.869439 0.014896 1.869419 0.014896
+-266.721216 1.869441 0.014929 1.869421 0.014923
+-266.092898 1.869440 0.014965 1.869420 0.014965
+-265.464579 1.869437 0.014996 1.869417 0.014996
+-264.836261 1.869435 0.015036 1.869415 0.015032
+-264.207942 1.869442 0.015070 1.869422 0.015070
+-263.579624 1.869433 0.015107 1.869413 0.015103
+-262.951305 1.869435 0.015141 1.869415 0.015141
+-262.322987 1.869442 0.015176 1.869422 0.015180
+-261.694668 1.869438 0.015219 1.869418 0.015214
+-261.066350 1.869440 0.015249 1.869420 0.015249
+-260.438031 1.869436 0.015287 1.869416 0.015287
+-259.809712 1.869441 0.015322 1.869421 0.015326
+-259.181394 1.869440 0.015359 1.869420 0.015361
+-258.553075 1.869440 0.015401 1.869420 0.015401
+-257.924757 1.869441 0.015439 1.869421 0.015436
+-257.296438 1.869439 0.015474 1.869419 0.015474
+-256.668120 1.869435 0.015515 1.869415 0.015511
+-256.039801 1.869441 0.015551 1.869421 0.015548
+-255.411483 1.869436 0.015587 1.869416 0.015587
+-254.783164 1.869438 0.015630 1.869418 0.015625
+-254.154846 1.869436 0.015667 1.869416 0.015667
+-253.526527 1.869440 0.015702 1.869420 0.015702
+-252.898209 1.869437 0.015740 1.869417 0.015744
+-252.269890 1.869436 0.015781 1.869416 0.015784
+-251.641572 1.869436 0.015820 1.869416 0.015824
+-251.013253 1.869438 0.015859 1.869418 0.015863
+-250.384934 1.869438 0.015901 1.869418 0.015902
+-249.756616 1.869439 0.015939 1.869419 0.015942
+-249.128297 1.869435 0.015982 1.869415 0.015982
+-248.499979 1.869435 0.016023 1.869415 0.016020
+-247.871660 1.869437 0.016062 1.869417 0.016065
+-247.243342 1.869438 0.016102 1.869418 0.016102
+-246.615023 1.869434 0.016144 1.869414 0.016144
+-245.986705 1.869437 0.016186 1.869417 0.016184
+-245.358386 1.869435 0.016225 1.869415 0.016226
+-244.730068 1.869436 0.016269 1.869416 0.016269
+-244.101749 1.869436 0.016307 1.869416 0.016310
+-243.473431 1.869437 0.016352 1.869413 0.016352
+-242.845112 1.869433 0.016396 1.869413 0.016394
+-242.216794 1.869436 0.016435 1.869416 0.016435
+-241.588475 1.869438 0.016477 1.869418 0.016481
+-240.960157 1.869435 0.016522 1.869415 0.016522
+-240.331838 1.869435 0.016562 1.869415 0.016566
+-239.703519 1.869435 0.016612 1.869415 0.016608
+-239.075201 1.869435 0.016651 1.869415 0.016654
+-238.446882 1.869433 0.016697 1.869413 0.016698
+-237.818564 1.869435 0.016739 1.869415 0.016740
+-237.190245 1.869434 0.016785 1.869414 0.016785
+-236.561927 1.869434 0.016828 1.869414 0.016832
+-235.933608 1.869432 0.016874 1.869412 0.016874
+-235.305290 1.869433 0.016918 1.869413 0.016918
+-234.676971 1.869432 0.016966 1.869412 0.016963
+-234.048653 1.869434 0.017011 1.869414 0.017011
+-233.420334 1.869433 0.017055 1.869413 0.017056
+-232.792016 1.869431 0.017102 1.869411 0.017099
+-232.163697 1.869434 0.017148 1.869414 0.017144
+-231.535379 1.869434 0.017192 1.869414 0.017192
+-230.907060 1.869430 0.017239 1.869410 0.017242
+-230.278742 1.869434 0.017285 1.869414 0.017288
+-229.650423 1.869432 0.017335 1.869412 0.017334
+-229.022104 1.869432 0.017386 1.869412 0.017383
+-228.393786 1.869430 0.017429 1.869410 0.017432
+-227.765467 1.869432 0.017480 1.869412 0.017477
+-227.137149 1.869429 0.017526 1.869409 0.017526
+-226.508830 1.869431 0.017577 1.869411 0.017574
+-225.880512 1.869432 0.017624 1.869412 0.017624
+-225.252193 1.869430 0.017673 1.869410 0.017674
+-224.623875 1.869433 0.017724 1.869413 0.017724
+-223.995556 1.869431 0.017774 1.869411 0.017774
+-223.367238 1.869431 0.017823 1.869411 0.017821
+-222.738919 1.869433 0.017874 1.869413 0.017871
+-222.110601 1.869432 0.017923 1.869412 0.017920
+-221.482282 1.869430 0.017973 1.869410 0.017973
+-220.853964 1.869431 0.018022 1.869411 0.018025
+-220.225645 1.869433 0.018077 1.869413 0.018073
+-219.597326 1.869430 0.018128 1.869410 0.018131
+-218.969008 1.869431 0.018180 1.869411 0.018180
+-218.340689 1.869429 0.018230 1.869409 0.018232
+-217.712371 1.869430 0.018284 1.869410 0.018284
+-217.084052 1.869428 0.018337 1.869408 0.018337
+-216.455734 1.869427 0.018392 1.869407 0.018390
+-215.827415 1.869429 0.018445 1.869409 0.018445
+-215.199097 1.869430 0.018500 1.869410 0.018496
+-214.570778 1.869431 0.018553 1.869411 0.018552
+-213.942460 1.869429 0.018607 1.869409 0.018606
+-213.314141 1.869428 0.018660 1.869408 0.018661
+-212.685823 1.869429 0.018717 1.869409 0.018717
+-212.057504 1.869428 0.018769 1.869408 0.018771
+-211.429186 1.869428 0.018829 1.869408 0.018828
+-210.800867 1.869427 0.018882 1.869407 0.018882
+-210.172549 1.869428 0.018940 1.869408 0.018941
+-209.544230 1.869428 0.018996 1.869408 0.018996
+-208.915911 1.869429 0.019054 1.869409 0.019054
+-208.287593 1.869426 0.019111 1.869406 0.019112
+-207.659274 1.869426 0.019169 1.869406 0.019170
+-207.030956 1.869427 0.019228 1.869407 0.019225
+-206.402637 1.869428 0.019286 1.869408 0.019286
+-205.774319 1.869426 0.019345 1.869406 0.019344
+-205.146000 1.869425 0.019404 1.869405 0.019402
+-204.517682 1.869427 0.019462 1.869407 0.019462
+-203.889363 1.869428 0.019524 1.869408 0.019524
+-203.261045 1.869426 0.019584 1.869406 0.019584
+-202.632726 1.869426 0.019644 1.869406 0.019645
+-202.004408 1.869427 0.019704 1.869404 0.019703
+-201.376089 1.869426 0.019768 1.869406 0.019765
+-200.747771 1.869424 0.019829 1.869404 0.019825
+-200.119452 1.869425 0.019891 1.869405 0.019889
+-199.491134 1.869427 0.019950 1.869404 0.019953
+-198.862815 1.869427 0.020016 1.869404 0.020013
+-198.234496 1.869424 0.020081 1.869404 0.020079
+-197.606178 1.869425 0.020143 1.869405 0.020142
+-196.977859 1.869423 0.020206 1.869403 0.020207
+-196.349541 1.869424 0.020271 1.869404 0.020271
+-195.721222 1.869423 0.020337 1.869403 0.020337
+-195.092904 1.869423 0.020402 1.869403 0.020402
+-194.464585 1.869423 0.020467 1.869403 0.020467
+-193.836267 1.869422 0.020536 1.869402 0.020533
+-193.207948 1.869425 0.020600 1.869405 0.020600
+-192.579630 1.869421 0.020666 1.869401 0.020666
+-191.951311 1.869423 0.020735 1.869403 0.020738
+-191.322993 1.869421 0.020803 1.869401 0.020803
+-190.694674 1.869421 0.020872 1.869401 0.020872
+-190.066356 1.869421 0.020942 1.869401 0.020942
+-189.438037 1.869421 0.021010 1.869401 0.021009
+-188.809718 1.869421 0.021079 1.869401 0.021079
+-188.181400 1.869420 0.021150 1.869400 0.021150
+-187.553081 1.869420 0.021221 1.869400 0.021219
+-186.924763 1.869420 0.021292 1.869400 0.021293
+-186.296444 1.869420 0.021364 1.869400 0.021364
+-185.668126 1.869421 0.021438 1.869401 0.021437
+-185.039807 1.869421 0.021509 1.869401 0.021508
+-184.411489 1.869419 0.021581 1.869399 0.021581
+-183.783170 1.869420 0.021654 1.869400 0.021655
+-183.154852 1.869418 0.021730 1.869398 0.021731
+-182.526533 1.869418 0.021803 1.869398 0.021802
+-181.898215 1.869418 0.021879 1.869398 0.021878
+-181.269896 1.869418 0.021955 1.869398 0.021955
+-180.641578 1.869418 0.022032 1.869398 0.022031
+-180.013259 1.869417 0.022107 1.869397 0.022107
+-179.384941 1.869416 0.022186 1.869396 0.022185
+-178.756622 1.869417 0.022264 1.869397 0.022263
+-178.128303 1.869418 0.022340 1.869398 0.022341
+-177.499985 1.869417 0.022420 1.869397 0.022420
+-176.871666 1.869414 0.022500 1.869394 0.022500
+-176.243348 1.869416 0.022580 1.869396 0.022580
+-175.615029 1.869415 0.022661 1.869395 0.022660
+-174.986711 1.869415 0.022741 1.869395 0.022743
+-174.358392 1.869414 0.022823 1.869394 0.022823
+-173.730074 1.869415 0.022907 1.869395 0.022907
+-173.101755 1.869414 0.022991 1.869394 0.022988
+-172.473437 1.869414 0.023073 1.869393 0.023073
+-171.845118 1.869413 0.023157 1.869393 0.023156
+-171.216800 1.869413 0.023242 1.869393 0.023243
+-170.588481 1.869413 0.023328 1.869393 0.023328
+-169.960163 1.869413 0.023414 1.869392 0.023415
+-169.331844 1.869411 0.023499 1.869391 0.023499
+-168.703525 1.869412 0.023587 1.869390 0.023587
+-168.075207 1.869410 0.023675 1.869390 0.023676
+-167.446888 1.869411 0.023765 1.869391 0.023765
+-166.818570 1.869411 0.023853 1.869391 0.023853
+-166.190251 1.869409 0.023943 1.869389 0.023943
+-165.561933 1.869411 0.024035 1.869390 0.024034
+-164.933614 1.869409 0.024125 1.869389 0.024127
+-164.305296 1.869409 0.024218 1.869389 0.024217
+-163.676977 1.869408 0.024312 1.869388 0.024310
+-163.048659 1.869408 0.024404 1.869388 0.024405
+-162.420340 1.869407 0.024499 1.869387 0.024499
+-161.792022 1.869409 0.024593 1.869389 0.024594
+-161.163703 1.869408 0.024690 1.869388 0.024690
+-160.535385 1.869407 0.024785 1.869387 0.024785
+-159.907066 1.869405 0.024883 1.869385 0.024882
+-159.278748 1.869406 0.024980 1.869386 0.024982
+-158.650429 1.869404 0.025079 1.869384 0.025079
+-158.022110 1.869405 0.025178 1.869385 0.025178
+-157.393792 1.869405 0.025279 1.869385 0.025279
+-156.765473 1.869403 0.025380 1.869383 0.025380
+-156.137155 1.869403 0.025483 1.869383 0.025481
+-155.508836 1.869403 0.025584 1.869383 0.025584
+-154.880518 1.869402 0.025687 1.869382 0.025688
+-154.252199 1.869403 0.025793 1.869383 0.025792
+-153.623881 1.869402 0.025898 1.869381 0.025897
+-152.995562 1.869402 0.026004 1.869382 0.026005
+-152.367244 1.869401 0.026112 1.869381 0.026111
+-151.738925 1.869401 0.026219 1.869381 0.026218
+-151.110607 1.869399 0.026329 1.869379 0.026328
+-150.482288 1.869400 0.026437 1.869380 0.026438
+-149.853970 1.869400 0.026547 1.869380 0.026549
+-149.225651 1.869398 0.026660 1.869378 0.026660
+-148.597333 1.869397 0.026772 1.869377 0.026771
+-147.969014 1.869397 0.026886 1.869377 0.026884
+-147.340695 1.869397 0.027000 1.869377 0.027001
+-146.712377 1.869396 0.027115 1.869376 0.027116
+-146.084058 1.869396 0.027231 1.869376 0.027232
+-145.455740 1.869396 0.027349 1.869376 0.027349
+-144.827421 1.869394 0.027468 1.869374 0.027466
+-144.199103 1.869394 0.027587 1.869374 0.027586
+-143.570784 1.869395 0.027707 1.869375 0.027708
+-142.942466 1.869392 0.027829 1.869372 0.027828
+-142.314147 1.869392 0.027952 1.869372 0.027951
+-141.685829 1.869391 0.028075 1.869371 0.028076
+-141.057510 1.869391 0.028199 1.869371 0.028200
+-140.429192 1.869390 0.028325 1.869370 0.028325
+-139.800873 1.869390 0.028452 1.869369 0.028452
+-139.172555 1.869389 0.028581 1.869369 0.028580
+-138.544236 1.869389 0.028710 1.869369 0.028709
+-137.915917 1.869388 0.028840 1.869368 0.028840
+-137.287599 1.869388 0.028972 1.869368 0.028970
+-136.659280 1.869387 0.029105 1.869367 0.029105
+-136.030962 1.869387 0.029238 1.869367 0.029238
+-135.402643 1.869386 0.029373 1.869366 0.029373
+-134.774325 1.869385 0.029510 1.869365 0.029510
+-134.146006 1.869385 0.029648 1.869365 0.029648
+-133.517688 1.869383 0.029787 1.869363 0.029787
+-132.889369 1.869384 0.029929 1.869364 0.029927
+-132.261051 1.869382 0.030069 1.869362 0.030069
+-131.632732 1.869382 0.030213 1.869362 0.030212
+-131.004414 1.869381 0.030357 1.869361 0.030357
+-130.376095 1.869381 0.030503 1.869361 0.030503
+-129.747777 1.869379 0.030650 1.869359 0.030650
+-129.119458 1.869378 0.030799 1.869358 0.030798
+-128.491140 1.869377 0.030949 1.869357 0.030949
+-127.862821 1.869377 0.031101 1.869357 0.031101
+-127.234502 1.869376 0.031253 1.869356 0.031253
+-126.606184 1.869375 0.031409 1.869355 0.031409
+-125.977865 1.869375 0.031565 1.869355 0.031565
+-125.349547 1.869374 0.031722 1.869354 0.031722
+-124.721228 1.869373 0.031882 1.869353 0.031881
+-124.092910 1.869372 0.032042 1.869352 0.032041
+-123.464591 1.869371 0.032205 1.869351 0.032205
+-122.836273 1.869370 0.032369 1.869350 0.032369
+-122.207954 1.869369 0.032535 1.869349 0.032535
+-121.579636 1.869367 0.032703 1.869347 0.032702
+-120.951317 1.869368 0.032872 1.869348 0.032871
+-120.322999 1.869367 0.033043 1.869347 0.033043
+-119.694680 1.869365 0.033216 1.869345 0.033216
+-119.066362 1.869365 0.033390 1.869345 0.033390
+-118.438043 1.869363 0.033566 1.869343 0.033567
+-117.809725 1.869363 0.033745 1.869343 0.033745
+-117.181406 1.869361 0.033926 1.869341 0.033925
+-116.553087 1.869361 0.034107 1.869341 0.034107
+-115.924769 1.869360 0.034292 1.869340 0.034292
+-115.296450 1.869358 0.034477 1.869338 0.034477
+-114.668132 1.869357 0.034666 1.869337 0.034666
+-114.039813 1.869357 0.034856 1.869336 0.034856
+-113.411495 1.869355 0.035048 1.869335 0.035048
+-112.783176 1.869354 0.035243 1.869334 0.035242
+-112.154858 1.869352 0.035440 1.869332 0.035440
+-111.526539 1.869351 0.035638 1.869331 0.035638
+-110.898221 1.869350 0.035840 1.869330 0.035840
+-110.269902 1.869349 0.036043 1.869329 0.036043
+-109.641584 1.869348 0.036248 1.869328 0.036249
+-109.013265 1.869346 0.036457 1.869326 0.036457
+-108.384947 1.869345 0.036667 1.869325 0.036667
+-107.756628 1.869344 0.036879 1.869324 0.036879
+-107.128309 1.869343 0.037095 1.869322 0.037095
+-106.499991 1.869342 0.037313 1.869322 0.037313
+-105.871672 1.869340 0.037533 1.869320 0.037533
+-105.243354 1.869339 0.037756 1.869318 0.037756
+-104.615035 1.869337 0.037982 1.869317 0.037982
+-103.986717 1.869335 0.038210 1.869315 0.038210
+-103.358398 1.869334 0.038442 1.869314 0.038441
+-102.730080 1.869333 0.038676 1.869313 0.038675
+-102.101761 1.869331 0.038912 1.869311 0.038912
+-101.473443 1.869329 0.039152 1.869309 0.039153
+-100.845124 1.869327 0.039395 1.869307 0.039395
+-100.216806 1.869326 0.039641 1.869306 0.039641
+-99.588487 1.869324 0.039889 1.869304 0.039889
+-98.960169 1.869323 0.040141 1.869303 0.040141
+-98.331850 1.869321 0.040396 1.869301 0.040397
+-97.703532 1.869319 0.040655 1.869299 0.040655
+-97.075213 1.869317 0.040916 1.869297 0.040916
+-96.446894 1.869316 0.041181 1.869296 0.041182
+-95.818576 1.869314 0.041450 1.869294 0.041450
+-95.190257 1.869312 0.041722 1.869292 0.041722
+-94.561939 1.869310 0.041997 1.869290 0.041997
+-93.933620 1.869308 0.042277 1.869288 0.042277
+-93.305302 1.869306 0.042560 1.869286 0.042560
+-92.676983 1.869304 0.042847 1.869284 0.042846
+-92.048665 1.869302 0.043138 1.869281 0.043137
+-91.420346 1.869300 0.043432 1.869279 0.043432
+-90.792028 1.869297 0.043731 1.869277 0.043731
+-90.163709 1.869295 0.044034 1.869275 0.044033
+-89.535391 1.869293 0.044340 1.869273 0.044340
+-88.907072 1.869290 0.044652 1.869270 0.044652
+-88.278754 1.869287 0.044967 1.869267 0.044968
+-87.650435 1.869285 0.045288 1.869265 0.045288
+-87.022117 1.869283 0.045613 1.869263 0.045613
+-86.393798 1.869280 0.045942 1.869260 0.045942
+-85.765479 1.869278 0.046277 1.869258 0.046276
+-85.137161 1.869275 0.046615 1.869255 0.046615
+-84.508842 1.869272 0.046959 1.869252 0.046959
+-83.880524 1.869270 0.047308 1.869250 0.047308
+-83.252205 1.869267 0.047663 1.869247 0.047663
+-82.623887 1.869264 0.048023 1.869244 0.048022
+-81.995568 1.869261 0.048388 1.869241 0.048387
+-81.367250 1.869258 0.048759 1.869237 0.048758
+-80.738931 1.869255 0.049135 1.869234 0.049135
+-80.110613 1.869251 0.049517 1.869231 0.049517
+-79.482294 1.869248 0.049906 1.869228 0.049906
+-78.853976 1.869245 0.050300 1.869225 0.050300
+-78.225657 1.869241 0.050700 1.869221 0.050701
+-77.597339 1.869238 0.051107 1.869218 0.051107
+-76.969020 1.869234 0.051521 1.869214 0.051521
+-76.340701 1.869231 0.051941 1.869210 0.051941
+-75.712383 1.869226 0.052368 1.869206 0.052369
+-75.084064 1.869222 0.052803 1.869202 0.052802
+-74.455746 1.869219 0.053244 1.869199 0.053244
+-73.827427 1.869214 0.053693 1.869194 0.053693
+-73.199109 1.869210 0.054149 1.869190 0.054150
+-72.570790 1.869206 0.054614 1.869186 0.054614
+-71.942472 1.869201 0.055086 1.869181 0.055086
+-71.314153 1.869197 0.055566 1.869177 0.055566
+-70.685835 1.869192 0.056055 1.869172 0.056055
+-70.057516 1.869187 0.056553 1.869167 0.056553
+-69.429198 1.869182 0.057059 1.869162 0.057059
+-68.800879 1.869177 0.057574 1.869157 0.057574
+-68.172561 1.869172 0.058099 1.869152 0.058099
+-67.544242 1.869167 0.058634 1.869147 0.058634
+-66.915924 1.869161 0.059178 1.869141 0.059178
+-66.287605 1.869155 0.059732 1.869135 0.059732
+-65.659286 1.869150 0.060297 1.869129 0.060297
+-65.030968 1.869144 0.060873 1.869124 0.060872
+-64.402649 1.869137 0.061459 1.869117 0.061459
+-63.774331 1.869131 0.062057 1.869111 0.062057
+-63.146012 1.869124 0.062667 1.869104 0.062666
+-62.517694 1.869117 0.063288 1.869097 0.063288
+-61.889375 1.869110 0.063922 1.869090 0.063922
+-61.261057 1.869103 0.064569 1.869083 0.064569
+-60.632738 1.869096 0.065229 1.869076 0.065228
+-60.004420 1.869088 0.065902 1.869068 0.065902
+-59.376101 1.869080 0.066589 1.869060 0.066589
+-58.747783 1.869072 0.067291 1.869052 0.067291
+-58.119464 1.869063 0.068007 1.869043 0.068007
+-57.491146 1.869055 0.068739 1.869035 0.068739
+-56.862827 1.869046 0.069487 1.869026 0.069486
+-56.234508 1.869036 0.070250 1.869016 0.070250
+-55.606190 1.869027 0.071031 1.869006 0.071031
+-54.977871 1.869016 0.071829 1.868996 0.071829
+-54.349553 1.869006 0.072645 1.868986 0.072645
+-53.721234 1.868995 0.073480 1.868975 0.073480
+-53.092916 1.868984 0.074334 1.868964 0.074334
+-52.464597 1.868972 0.075207 1.868952 0.075207
+-51.836279 1.868961 0.076102 1.868940 0.076102
+-51.207960 1.868948 0.077018 1.868928 0.077017
+-50.579642 1.868935 0.077955 1.868915 0.077955
+-49.951323 1.868922 0.078916 1.868901 0.078916
+-49.323005 1.868908 0.079900 1.868888 0.079900
+-48.694686 1.868893 0.080909 1.868873 0.080909
+-48.066368 1.868878 0.081944 1.868858 0.081944
+-47.438049 1.868863 0.083005 1.868842 0.083004
+-46.809731 1.868846 0.084093 1.868826 0.084093
+-46.181412 1.868829 0.085210 1.868809 0.085210
+-45.553093 1.868812 0.086357 1.868791 0.086357
+-44.924775 1.868793 0.087535 1.868773 0.087534
+-44.296456 1.868774 0.088744 1.868753 0.088744
+-43.668138 1.868753 0.089987 1.868733 0.089987
+-43.039819 1.868732 0.091265 1.868712 0.091265
+-42.411501 1.868710 0.092580 1.868690 0.092580
+-41.783182 1.868687 0.093932 1.868667 0.093932
+-41.154864 1.868663 0.095324 1.868643 0.095323
+-40.526545 1.868638 0.096756 1.868617 0.096756
+-39.898227 1.868611 0.098232 1.868591 0.098232
+-39.269908 1.868583 0.099753 1.868563 0.099753
+-38.641590 1.868554 0.101321 1.868534 0.101321
+-38.013271 1.868523 0.102938 1.868503 0.102938
+-37.384953 1.868490 0.104606 1.868470 0.104606
+-36.756634 1.868456 0.106329 1.868436 0.106328
+-36.128316 1.868420 0.108107 1.868400 0.108107
+-35.499997 1.868382 0.109946 1.868362 0.109946
+-34.871678 1.868342 0.111846 1.868322 0.111846
+-34.243360 1.868300 0.113812 1.868280 0.113812
+-33.615041 1.868255 0.115847 1.868235 0.115847
+-32.986723 1.868207 0.117954 1.868187 0.117953
+-32.358404 1.868157 0.120137 1.868137 0.120136
+-31.730086 1.868103 0.122400 1.868083 0.122400
+-31.101767 1.868046 0.124748 1.868026 0.124748
+-30.473449 1.867985 0.127185 1.867965 0.127185
+-29.845130 1.867921 0.129717 1.867901 0.129716
+-29.216812 1.867852 0.132348 1.867831 0.132348
+-28.588493 1.867778 0.135085 1.867758 0.135085
+-27.960175 1.867699 0.137933 1.867678 0.137933
+-27.331856 1.867614 0.140901 1.867594 0.140900
+-26.703538 1.867523 0.143994 1.867502 0.143993
+-26.075219 1.867424 0.147220 1.867404 0.147220
+-25.446900 1.867319 0.150589 1.867298 0.150589
+-24.818582 1.867204 0.154109 1.867184 0.154109
+-24.190263 1.867080 0.157790 1.867060 0.157790
+-23.561945 1.866946 0.161643 1.866926 0.161643
+-22.933626 1.866800 0.165680 1.866780 0.165680
+-22.305308 1.866641 0.169913 1.866621 0.169912
+-21.676989 1.866468 0.174356 1.866447 0.174355
+-21.048671 1.866277 0.179023 1.866257 0.179023
+-20.420352 1.866068 0.183932 1.866048 0.183932
+-19.792034 1.865838 0.189100 1.865818 0.189100
+-19.163715 1.865584 0.194547 1.865564 0.194546
+-18.535397 1.865302 0.200292 1.865282 0.200292
+-17.907078 1.864989 0.206360 1.864968 0.206360
+-17.278760 1.864639 0.212775 1.864619 0.212775
+-16.650441 1.864247 0.219564 1.864227 0.219564
+-16.022123 1.863806 0.226757 1.863785 0.226757
+-15.393804 1.863307 0.234385 1.863287 0.234385
+-14.765485 1.862741 0.242483 1.862721 0.242483
+-14.137167 1.862096 0.251088 1.862076 0.251087
+-13.508848 1.861356 0.260237 1.861335 0.260237
+-12.880530 1.860502 0.269973 1.860482 0.269973
+-12.252211 1.859512 0.280338 1.859492 0.280337
+-11.623893 1.858357 0.291372 1.858336 0.291372
+-10.995574 1.856999 0.303117 1.856979 0.303117
+-10.367256 1.855393 0.315608 1.855372 0.315607
+-9.738937 1.853478 0.328870 1.853458 0.328869
+-9.110619 1.851179 0.342912 1.851159 0.342911
+-8.482300 1.848397 0.357715 1.848377 0.357714
+-7.853982 1.845003 0.373215 1.844983 0.373214
+-7.225663 1.840832 0.389277 1.840812 0.389276
+-6.597345 1.835671 0.405658 1.835651 0.405657
+-5.969026 1.829250 0.421942 1.829230 0.421941
+-5.340708 1.821241 0.437450 1.821221 0.437449
+-4.712389 1.811275 0.451102 1.811255 0.451100
+-4.084070 1.799004 0.461202 1.798985 0.461201
+-3.455752 1.784265 0.465134 1.784245 0.465132
+-2.827433 1.767418 0.458905 1.767399 0.458903
+-2.199115 1.749925 0.436493 1.749907 0.436491
+-1.570796 1.734848 0.388794 1.734831 0.388792
+-0.942478 1.725654 0.301619 1.725638 0.301619
+-0.314159 1.711643 0.152561 1.711629 0.152569
+0.314159 1.711643 -0.152561 1.711629 -0.152569
+0.942478 1.725654 -0.301619 1.725638 -0.301619
+1.570796 1.734848 -0.388794 1.734831 -0.388792
+2.199115 1.749925 -0.436493 1.749907 -0.436491
+2.827433 1.767418 -0.458905 1.767399 -0.458903
+3.455752 1.784265 -0.465134 1.784245 -0.465132
+4.084070 1.799004 -0.461202 1.798985 -0.461201
+4.712389 1.811275 -0.451102 1.811255 -0.451100
+5.340708 1.821241 -0.437450 1.821221 -0.437449
+5.969026 1.829250 -0.421942 1.829230 -0.421941
+6.597345 1.835671 -0.405658 1.835651 -0.405657
+7.225663 1.840832 -0.389277 1.840812 -0.389276
+7.853982 1.845003 -0.373215 1.844983 -0.373214
+8.482300 1.848397 -0.357715 1.848377 -0.357714
+9.110619 1.851179 -0.342912 1.851159 -0.342911
+9.738937 1.853478 -0.328870 1.853458 -0.328869
+10.367256 1.855393 -0.315608 1.855372 -0.315607
+10.995574 1.856999 -0.303117 1.856979 -0.303117
+11.623893 1.858357 -0.291372 1.858336 -0.291372
+12.252211 1.859512 -0.280338 1.859492 -0.280337
+12.880530 1.860502 -0.269973 1.860482 -0.269973
+13.508848 1.861356 -0.260237 1.861335 -0.260237
+14.137167 1.862096 -0.251088 1.862076 -0.251087
+14.765485 1.862741 -0.242483 1.862721 -0.242483
+15.393804 1.863307 -0.234385 1.863287 -0.234385
+16.022123 1.863806 -0.226757 1.863785 -0.226757
+16.650441 1.864247 -0.219564 1.864227 -0.219564
+17.278760 1.864639 -0.212775 1.864619 -0.212775
+17.907078 1.864989 -0.206360 1.864968 -0.206360
+18.535397 1.865302 -0.200292 1.865282 -0.200292
+19.163715 1.865584 -0.194547 1.865564 -0.194546
+19.792034 1.865838 -0.189100 1.865818 -0.189100
+20.420352 1.866068 -0.183932 1.866048 -0.183932
+21.048671 1.866277 -0.179023 1.866257 -0.179023
+21.676989 1.866468 -0.174356 1.866447 -0.174355
+22.305308 1.866641 -0.169913 1.866621 -0.169912
+22.933626 1.866800 -0.165680 1.866780 -0.165680
+23.561945 1.866946 -0.161643 1.866926 -0.161643
+24.190263 1.867080 -0.157790 1.867060 -0.157790
+24.818582 1.867204 -0.154109 1.867184 -0.154109
+25.446900 1.867319 -0.150589 1.867298 -0.150589
+26.075219 1.867424 -0.147220 1.867404 -0.147220
+26.703538 1.867523 -0.143994 1.867502 -0.143993
+27.331856 1.867614 -0.140901 1.867594 -0.140900
+27.960175 1.867699 -0.137933 1.867678 -0.137933
+28.588493 1.867778 -0.135085 1.867758 -0.135085
+29.216812 1.867852 -0.132348 1.867831 -0.132348
+29.845130 1.867921 -0.129717 1.867901 -0.129716
+30.473449 1.867985 -0.127185 1.867965 -0.127185
+31.101767 1.868046 -0.124748 1.868026 -0.124748
+31.730086 1.868103 -0.122400 1.868083 -0.122400
+32.358404 1.868157 -0.120137 1.868137 -0.120136
+32.986723 1.868207 -0.117954 1.868187 -0.117953
+33.615041 1.868255 -0.115847 1.868235 -0.115847
+34.243360 1.868300 -0.113812 1.868280 -0.113812
+34.871678 1.868342 -0.111846 1.868322 -0.111846
+35.499997 1.868382 -0.109946 1.868362 -0.109946
+36.128316 1.868420 -0.108107 1.868400 -0.108107
+36.756634 1.868456 -0.106329 1.868436 -0.106328
+37.384953 1.868490 -0.104606 1.868470 -0.104606
+38.013271 1.868523 -0.102938 1.868503 -0.102938
+38.641590 1.868554 -0.101321 1.868534 -0.101321
+39.269908 1.868583 -0.099753 1.868563 -0.099753
+39.898227 1.868611 -0.098232 1.868591 -0.098232
+40.526545 1.868638 -0.096756 1.868617 -0.096756
+41.154864 1.868663 -0.095324 1.868643 -0.095323
+41.783182 1.868687 -0.093932 1.868667 -0.093932
+42.411501 1.868710 -0.092580 1.868690 -0.092580
+43.039819 1.868732 -0.091265 1.868712 -0.091265
+43.668138 1.868753 -0.089987 1.868733 -0.089987
+44.296456 1.868774 -0.088744 1.868753 -0.088744
+44.924775 1.868793 -0.087535 1.868773 -0.087534
+45.553093 1.868812 -0.086357 1.868791 -0.086357
+46.181412 1.868829 -0.085210 1.868809 -0.085210
+46.809731 1.868846 -0.084093 1.868826 -0.084093
+47.438049 1.868863 -0.083005 1.868842 -0.083004
+48.066368 1.868878 -0.081944 1.868858 -0.081944
+48.694686 1.868893 -0.080909 1.868873 -0.080909
+49.323005 1.868908 -0.079900 1.868888 -0.079900
+49.951323 1.868922 -0.078916 1.868901 -0.078916
+50.579642 1.868935 -0.077955 1.868915 -0.077955
+51.207960 1.868948 -0.077018 1.868928 -0.077017
+51.836279 1.868961 -0.076102 1.868940 -0.076102
+52.464597 1.868972 -0.075207 1.868952 -0.075207
+53.092916 1.868984 -0.074334 1.868964 -0.074334
+53.721234 1.868995 -0.073480 1.868975 -0.073480
+54.349553 1.869006 -0.072645 1.868986 -0.072645
+54.977871 1.869016 -0.071829 1.868996 -0.071829
+55.606190 1.869027 -0.071031 1.869006 -0.071031
+56.234508 1.869036 -0.070250 1.869016 -0.070250
+56.862827 1.869046 -0.069487 1.869026 -0.069486
+57.491146 1.869055 -0.068739 1.869035 -0.068739
+58.119464 1.869063 -0.068007 1.869043 -0.068007
+58.747783 1.869072 -0.067291 1.869052 -0.067291
+59.376101 1.869080 -0.066589 1.869060 -0.066589
+60.004420 1.869088 -0.065902 1.869068 -0.065902
+60.632738 1.869096 -0.065229 1.869076 -0.065228
+61.261057 1.869103 -0.064569 1.869083 -0.064569
+61.889375 1.869110 -0.063922 1.869090 -0.063922
+62.517694 1.869117 -0.063288 1.869097 -0.063288
+63.146012 1.869124 -0.062667 1.869104 -0.062666
+63.774331 1.869131 -0.062057 1.869111 -0.062057
+64.402649 1.869137 -0.061459 1.869117 -0.061459
+65.030968 1.869144 -0.060873 1.869124 -0.060872
+65.659286 1.869150 -0.060297 1.869129 -0.060297
+66.287605 1.869155 -0.059732 1.869135 -0.059732
+66.915924 1.869161 -0.059178 1.869141 -0.059178
+67.544242 1.869167 -0.058634 1.869147 -0.058634
+68.172561 1.869172 -0.058099 1.869152 -0.058099
+68.800879 1.869177 -0.057574 1.869157 -0.057574
+69.429198 1.869182 -0.057059 1.869162 -0.057059
+70.057516 1.869187 -0.056553 1.869167 -0.056553
+70.685835 1.869192 -0.056055 1.869172 -0.056055
+71.314153 1.869197 -0.055566 1.869177 -0.055566
+71.942472 1.869201 -0.055086 1.869181 -0.055086
+72.570790 1.869206 -0.054614 1.869186 -0.054614
+73.199109 1.869210 -0.054149 1.869190 -0.054150
+73.827427 1.869214 -0.053693 1.869194 -0.053693
+74.455746 1.869219 -0.053244 1.869199 -0.053244
+75.084064 1.869222 -0.052803 1.869202 -0.052802
+75.712383 1.869226 -0.052368 1.869206 -0.052369
+76.340701 1.869231 -0.051941 1.869210 -0.051941
+76.969020 1.869234 -0.051521 1.869214 -0.051521
+77.597339 1.869238 -0.051107 1.869218 -0.051107
+78.225657 1.869241 -0.050700 1.869221 -0.050701
+78.853976 1.869245 -0.050300 1.869225 -0.050300
+79.482294 1.869248 -0.049906 1.869228 -0.049906
+80.110613 1.869251 -0.049517 1.869231 -0.049517
+80.738931 1.869255 -0.049135 1.869234 -0.049135
+81.367250 1.869258 -0.048759 1.869237 -0.048758
+81.995568 1.869261 -0.048388 1.869241 -0.048387
+82.623887 1.869264 -0.048023 1.869244 -0.048022
+83.252205 1.869267 -0.047663 1.869247 -0.047663
+83.880524 1.869270 -0.047308 1.869250 -0.047308
+84.508842 1.869272 -0.046959 1.869252 -0.046959
+85.137161 1.869275 -0.046615 1.869255 -0.046615
+85.765479 1.869278 -0.046277 1.869258 -0.046276
+86.393798 1.869280 -0.045942 1.869260 -0.045942
+87.022117 1.869283 -0.045613 1.869263 -0.045613
+87.650435 1.869285 -0.045288 1.869265 -0.045288
+88.278754 1.869287 -0.044967 1.869267 -0.044968
+88.907072 1.869290 -0.044652 1.869270 -0.044652
+89.535391 1.869293 -0.044340 1.869273 -0.044340
+90.163709 1.869295 -0.044034 1.869275 -0.044033
+90.792028 1.869297 -0.043731 1.869277 -0.043731
+91.420346 1.869300 -0.043432 1.869279 -0.043432
+92.048665 1.869302 -0.043138 1.869281 -0.043137
+92.676983 1.869304 -0.042847 1.869284 -0.042846
+93.305302 1.869306 -0.042560 1.869286 -0.042560
+93.933620 1.869308 -0.042277 1.869288 -0.042277
+94.561939 1.869310 -0.041997 1.869290 -0.041997
+95.190257 1.869312 -0.041722 1.869292 -0.041722
+95.818576 1.869314 -0.041450 1.869294 -0.041450
+96.446894 1.869316 -0.041181 1.869296 -0.041182
+97.075213 1.869317 -0.040916 1.869297 -0.040916
+97.703532 1.869319 -0.040655 1.869299 -0.040655
+98.331850 1.869321 -0.040396 1.869301 -0.040397
+98.960169 1.869323 -0.040141 1.869303 -0.040141
+99.588487 1.869324 -0.039889 1.869304 -0.039889
+100.216806 1.869326 -0.039641 1.869306 -0.039641
+100.845124 1.869327 -0.039395 1.869307 -0.039395
+101.473443 1.869329 -0.039152 1.869309 -0.039153
+102.101761 1.869331 -0.038912 1.869311 -0.038912
+102.730080 1.869333 -0.038676 1.869313 -0.038675
+103.358398 1.869334 -0.038442 1.869314 -0.038441
+103.986717 1.869335 -0.038210 1.869315 -0.038210
+104.615035 1.869337 -0.037982 1.869317 -0.037982
+105.243354 1.869339 -0.037756 1.869318 -0.037756
+105.871672 1.869340 -0.037533 1.869320 -0.037533
+106.499991 1.869342 -0.037313 1.869322 -0.037313
+107.128309 1.869343 -0.037095 1.869322 -0.037095
+107.756628 1.869344 -0.036879 1.869324 -0.036879
+108.384947 1.869345 -0.036667 1.869325 -0.036667
+109.013265 1.869346 -0.036457 1.869326 -0.036457
+109.641584 1.869348 -0.036248 1.869328 -0.036249
+110.269902 1.869349 -0.036043 1.869329 -0.036043
+110.898221 1.869350 -0.035840 1.869330 -0.035840
+111.526539 1.869351 -0.035638 1.869331 -0.035638
+112.154858 1.869352 -0.035440 1.869332 -0.035440
+112.783176 1.869354 -0.035243 1.869334 -0.035242
+113.411495 1.869355 -0.035048 1.869335 -0.035048
+114.039813 1.869357 -0.034856 1.869336 -0.034856
+114.668132 1.869357 -0.034666 1.869337 -0.034666
+115.296450 1.869358 -0.034477 1.869338 -0.034477
+115.924769 1.869360 -0.034292 1.869340 -0.034292
+116.553087 1.869361 -0.034107 1.869341 -0.034107
+117.181406 1.869361 -0.033926 1.869341 -0.033925
+117.809725 1.869363 -0.033745 1.869343 -0.033745
+118.438043 1.869363 -0.033566 1.869343 -0.033567
+119.066362 1.869365 -0.033390 1.869345 -0.033390
+119.694680 1.869365 -0.033216 1.869345 -0.033216
+120.322999 1.869367 -0.033043 1.869347 -0.033043
+120.951317 1.869368 -0.032872 1.869348 -0.032871
+121.579636 1.869367 -0.032703 1.869347 -0.032702
+122.207954 1.869369 -0.032535 1.869349 -0.032535
+122.836273 1.869370 -0.032369 1.869350 -0.032369
+123.464591 1.869371 -0.032205 1.869351 -0.032205
+124.092910 1.869372 -0.032042 1.869352 -0.032041
+124.721228 1.869373 -0.031882 1.869353 -0.031881
+125.349547 1.869374 -0.031722 1.869354 -0.031722
+125.977865 1.869375 -0.031565 1.869355 -0.031565
+126.606184 1.869375 -0.031409 1.869355 -0.031409
+127.234502 1.869376 -0.031253 1.869356 -0.031253
+127.862821 1.869377 -0.031101 1.869357 -0.031101
+128.491140 1.869377 -0.030949 1.869357 -0.030949
+129.119458 1.869378 -0.030799 1.869358 -0.030798
+129.747777 1.869379 -0.030650 1.869359 -0.030650
+130.376095 1.869381 -0.030503 1.869361 -0.030503
+131.004414 1.869381 -0.030357 1.869361 -0.030357
+131.632732 1.869382 -0.030213 1.869362 -0.030212
+132.261051 1.869382 -0.030069 1.869362 -0.030069
+132.889369 1.869384 -0.029929 1.869364 -0.029927
+133.517688 1.869383 -0.029787 1.869363 -0.029787
+134.146006 1.869385 -0.029648 1.869365 -0.029648
+134.774325 1.869385 -0.029510 1.869365 -0.029510
+135.402643 1.869386 -0.029373 1.869366 -0.029373
+136.030962 1.869387 -0.029238 1.869367 -0.029238
+136.659280 1.869387 -0.029105 1.869367 -0.029105
+137.287599 1.869388 -0.028972 1.869368 -0.028970
+137.915917 1.869388 -0.028840 1.869368 -0.028840
+138.544236 1.869389 -0.028710 1.869369 -0.028709
+139.172555 1.869389 -0.028581 1.869369 -0.028580
+139.800873 1.869390 -0.028452 1.869369 -0.028452
+140.429192 1.869390 -0.028325 1.869370 -0.028325
+141.057510 1.869391 -0.028199 1.869371 -0.028200
+141.685829 1.869391 -0.028075 1.869371 -0.028076
+142.314147 1.869392 -0.027952 1.869372 -0.027951
+142.942466 1.869392 -0.027829 1.869372 -0.027828
+143.570784 1.869395 -0.027707 1.869375 -0.027708
+144.199103 1.869394 -0.027587 1.869374 -0.027586
+144.827421 1.869394 -0.027468 1.869374 -0.027466
+145.455740 1.869396 -0.027349 1.869376 -0.027349
+146.084058 1.869396 -0.027231 1.869376 -0.027232
+146.712377 1.869396 -0.027115 1.869376 -0.027116
+147.340695 1.869397 -0.027000 1.869377 -0.027001
+147.969014 1.869397 -0.026886 1.869377 -0.026884
+148.597333 1.869397 -0.026772 1.869377 -0.026771
+149.225651 1.869398 -0.026660 1.869378 -0.026660
+149.853970 1.869400 -0.026547 1.869380 -0.026549
+150.482288 1.869400 -0.026437 1.869380 -0.026438
+151.110607 1.869399 -0.026329 1.869379 -0.026328
+151.738925 1.869401 -0.026219 1.869381 -0.026218
+152.367244 1.869401 -0.026112 1.869381 -0.026111
+152.995562 1.869402 -0.026004 1.869382 -0.026005
+153.623881 1.869402 -0.025898 1.869381 -0.025897
+154.252199 1.869403 -0.025793 1.869383 -0.025792
+154.880518 1.869402 -0.025687 1.869382 -0.025688
+155.508836 1.869403 -0.025584 1.869383 -0.025584
+156.137155 1.869403 -0.025483 1.869383 -0.025481
+156.765473 1.869403 -0.025380 1.869383 -0.025380
+157.393792 1.869405 -0.025279 1.869385 -0.025279
+158.022110 1.869405 -0.025178 1.869385 -0.025178
+158.650429 1.869404 -0.025079 1.869384 -0.025079
+159.278748 1.869406 -0.024980 1.869386 -0.024982
+159.907066 1.869405 -0.024883 1.869385 -0.024882
+160.535385 1.869407 -0.024785 1.869387 -0.024785
+161.163703 1.869408 -0.024690 1.869388 -0.024690
+161.792022 1.869409 -0.024593 1.869389 -0.024594
+162.420340 1.869407 -0.024499 1.869387 -0.024499
+163.048659 1.869408 -0.024404 1.869388 -0.024405
+163.676977 1.869408 -0.024312 1.869388 -0.024310
+164.305296 1.869409 -0.024218 1.869389 -0.024217
+164.933614 1.869409 -0.024125 1.869389 -0.024127
+165.561933 1.869411 -0.024035 1.869390 -0.024034
+166.190251 1.869409 -0.023943 1.869389 -0.023943
+166.818570 1.869411 -0.023853 1.869391 -0.023853
+167.446888 1.869411 -0.023765 1.869391 -0.023765
+168.075207 1.869410 -0.023675 1.869390 -0.023676
+168.703525 1.869412 -0.023587 1.869390 -0.023587
+169.331844 1.869411 -0.023499 1.869391 -0.023499
+169.960163 1.869413 -0.023414 1.869392 -0.023415
+170.588481 1.869413 -0.023328 1.869393 -0.023328
+171.216800 1.869413 -0.023242 1.869393 -0.023243
+171.845118 1.869413 -0.023157 1.869393 -0.023156
+172.473437 1.869414 -0.023073 1.869393 -0.023073
+173.101755 1.869414 -0.022991 1.869394 -0.022988
+173.730074 1.869415 -0.022907 1.869395 -0.022907
+174.358392 1.869414 -0.022823 1.869394 -0.022823
+174.986711 1.869415 -0.022741 1.869395 -0.022743
+175.615029 1.869415 -0.022661 1.869395 -0.022660
+176.243348 1.869416 -0.022580 1.869396 -0.022580
+176.871666 1.869414 -0.022500 1.869394 -0.022500
+177.499985 1.869417 -0.022420 1.869397 -0.022420
+178.128303 1.869418 -0.022340 1.869398 -0.022341
+178.756622 1.869417 -0.022264 1.869397 -0.022263
+179.384941 1.869416 -0.022186 1.869396 -0.022185
+180.013259 1.869417 -0.022107 1.869397 -0.022107
+180.641578 1.869418 -0.022032 1.869398 -0.022031
+181.269896 1.869418 -0.021955 1.869398 -0.021955
+181.898215 1.869418 -0.021879 1.869398 -0.021878
+182.526533 1.869418 -0.021803 1.869398 -0.021802
+183.154852 1.869418 -0.021730 1.869398 -0.021731
+183.783170 1.869420 -0.021654 1.869400 -0.021655
+184.411489 1.869419 -0.021581 1.869399 -0.021581
+185.039807 1.869421 -0.021509 1.869401 -0.021508
+185.668126 1.869421 -0.021438 1.869401 -0.021437
+186.296444 1.869420 -0.021364 1.869400 -0.021364
+186.924763 1.869420 -0.021292 1.869400 -0.021293
+187.553081 1.869420 -0.021221 1.869400 -0.021219
+188.181400 1.869420 -0.021150 1.869400 -0.021150
+188.809718 1.869421 -0.021079 1.869401 -0.021079
+189.438037 1.869421 -0.021010 1.869401 -0.021009
+190.066356 1.869421 -0.020942 1.869401 -0.020942
+190.694674 1.869421 -0.020872 1.869401 -0.020872
+191.322993 1.869421 -0.020803 1.869401 -0.020803
+191.951311 1.869423 -0.020735 1.869403 -0.020738
+192.579630 1.869421 -0.020666 1.869401 -0.020666
+193.207948 1.869425 -0.020600 1.869405 -0.020600
+193.836267 1.869422 -0.020536 1.869402 -0.020533
+194.464585 1.869423 -0.020467 1.869403 -0.020467
+195.092904 1.869423 -0.020402 1.869403 -0.020402
+195.721222 1.869423 -0.020337 1.869403 -0.020337
+196.349541 1.869424 -0.020271 1.869404 -0.020271
+196.977859 1.869423 -0.020206 1.869403 -0.020207
+197.606178 1.869425 -0.020143 1.869405 -0.020142
+198.234496 1.869424 -0.020081 1.869404 -0.020079
+198.862815 1.869427 -0.020016 1.869404 -0.020013
+199.491134 1.869427 -0.019950 1.869404 -0.019953
+200.119452 1.869425 -0.019891 1.869405 -0.019889
+200.747771 1.869424 -0.019829 1.869404 -0.019825
+201.376089 1.869426 -0.019768 1.869406 -0.019765
+202.004408 1.869427 -0.019704 1.869404 -0.019703
+202.632726 1.869426 -0.019644 1.869406 -0.019645
+203.261045 1.869426 -0.019584 1.869406 -0.019584
+203.889363 1.869428 -0.019524 1.869408 -0.019524
+204.517682 1.869427 -0.019462 1.869407 -0.019462
+205.146000 1.869425 -0.019404 1.869405 -0.019402
+205.774319 1.869426 -0.019345 1.869406 -0.019344
+206.402637 1.869428 -0.019286 1.869408 -0.019286
+207.030956 1.869427 -0.019228 1.869407 -0.019225
+207.659274 1.869426 -0.019169 1.869406 -0.019170
+208.287593 1.869426 -0.019111 1.869406 -0.019112
+208.915911 1.869429 -0.019054 1.869409 -0.019054
+209.544230 1.869428 -0.018996 1.869408 -0.018996
+210.172549 1.869428 -0.018940 1.869408 -0.018941
+210.800867 1.869427 -0.018882 1.869407 -0.018882
+211.429186 1.869428 -0.018829 1.869408 -0.018828
+212.057504 1.869428 -0.018769 1.869408 -0.018771
+212.685823 1.869429 -0.018717 1.869409 -0.018717
+213.314141 1.869428 -0.018660 1.869408 -0.018661
+213.942460 1.869429 -0.018607 1.869409 -0.018606
+214.570778 1.869431 -0.018553 1.869411 -0.018552
+215.199097 1.869430 -0.018500 1.869410 -0.018496
+215.827415 1.869429 -0.018445 1.869409 -0.018445
+216.455734 1.869427 -0.018392 1.869407 -0.018390
+217.084052 1.869428 -0.018337 1.869408 -0.018337
+217.712371 1.869430 -0.018284 1.869410 -0.018284
+218.340689 1.869429 -0.018230 1.869409 -0.018232
+218.969008 1.869431 -0.018180 1.869411 -0.018180
+219.597326 1.869430 -0.018128 1.869410 -0.018131
+220.225645 1.869433 -0.018077 1.869413 -0.018073
+220.853964 1.869431 -0.018022 1.869411 -0.018025
+221.482282 1.869430 -0.017973 1.869410 -0.017973
+222.110601 1.869432 -0.017923 1.869412 -0.017920
+222.738919 1.869433 -0.017874 1.869413 -0.017871
+223.367238 1.869431 -0.017823 1.869411 -0.017821
+223.995556 1.869431 -0.017774 1.869411 -0.017774
+224.623875 1.869433 -0.017724 1.869413 -0.017724
+225.252193 1.869430 -0.017673 1.869410 -0.017674
+225.880512 1.869432 -0.017624 1.869412 -0.017624
+226.508830 1.869431 -0.017577 1.869411 -0.017574
+227.137149 1.869429 -0.017526 1.869409 -0.017526
+227.765467 1.869432 -0.017480 1.869412 -0.017477
+228.393786 1.869430 -0.017429 1.869410 -0.017432
+229.022104 1.869432 -0.017386 1.869412 -0.017383
+229.650423 1.869432 -0.017335 1.869412 -0.017334
+230.278742 1.869434 -0.017285 1.869414 -0.017288
+230.907060 1.869430 -0.017239 1.869410 -0.017242
+231.535379 1.869434 -0.017192 1.869414 -0.017192
+232.163697 1.869434 -0.017148 1.869414 -0.017144
+232.792016 1.869431 -0.017102 1.869411 -0.017099
+233.420334 1.869433 -0.017055 1.869413 -0.017056
+234.048653 1.869434 -0.017011 1.869414 -0.017011
+234.676971 1.869432 -0.016966 1.869412 -0.016963
+235.305290 1.869433 -0.016918 1.869413 -0.016918
+235.933608 1.869432 -0.016874 1.869412 -0.016874
+236.561927 1.869434 -0.016828 1.869414 -0.016832
+237.190245 1.869434 -0.016785 1.869414 -0.016785
+237.818564 1.869435 -0.016739 1.869415 -0.016740
+238.446882 1.869433 -0.016697 1.869413 -0.016698
+239.075201 1.869435 -0.016651 1.869415 -0.016654
+239.703519 1.869435 -0.016612 1.869415 -0.016608
+240.331838 1.869435 -0.016562 1.869415 -0.016566
+240.960157 1.869435 -0.016522 1.869415 -0.016522
+241.588475 1.869438 -0.016477 1.869418 -0.016481
+242.216794 1.869436 -0.016435 1.869416 -0.016435
+242.845112 1.869433 -0.016396 1.869413 -0.016394
+243.473431 1.869437 -0.016352 1.869413 -0.016352
+244.101749 1.869436 -0.016307 1.869416 -0.016310
+244.730068 1.869436 -0.016269 1.869416 -0.016269
+245.358386 1.869435 -0.016225 1.869415 -0.016226
+245.986705 1.869437 -0.016186 1.869417 -0.016184
+246.615023 1.869434 -0.016144 1.869414 -0.016144
+247.243342 1.869438 -0.016102 1.869418 -0.016102
+247.871660 1.869437 -0.016062 1.869417 -0.016065
+248.499979 1.869435 -0.016023 1.869415 -0.016020
+249.128297 1.869435 -0.015982 1.869415 -0.015982
+249.756616 1.869439 -0.015939 1.869419 -0.015942
+250.384934 1.869438 -0.015901 1.869418 -0.015902
+251.013253 1.869438 -0.015859 1.869418 -0.015863
+251.641572 1.869436 -0.015820 1.869416 -0.015824
+252.269890 1.869436 -0.015781 1.869416 -0.015784
+252.898209 1.869437 -0.015740 1.869417 -0.015744
+253.526527 1.869440 -0.015702 1.869420 -0.015702
+254.154846 1.869436 -0.015667 1.869416 -0.015667
+254.783164 1.869438 -0.015630 1.869418 -0.015625
+255.411483 1.869436 -0.015587 1.869416 -0.015587
+256.039801 1.869441 -0.015551 1.869421 -0.015548
+256.668120 1.869435 -0.015515 1.869415 -0.015511
+257.296438 1.869439 -0.015474 1.869419 -0.015474
+257.924757 1.869441 -0.015439 1.869421 -0.015436
+258.553075 1.869440 -0.015401 1.869420 -0.015401
+259.181394 1.869440 -0.015359 1.869420 -0.015361
+259.809712 1.869441 -0.015322 1.869421 -0.015326
+260.438031 1.869436 -0.015287 1.869416 -0.015287
+261.066350 1.869440 -0.015249 1.869420 -0.015249
+261.694668 1.869438 -0.015219 1.869418 -0.015214
+262.322987 1.869442 -0.015176 1.869422 -0.015180
+262.951305 1.869435 -0.015141 1.869415 -0.015141
+263.579624 1.869433 -0.015107 1.869413 -0.015103
+264.207942 1.869442 -0.015070 1.869422 -0.015070
+264.836261 1.869435 -0.015036 1.869415 -0.015032
+265.464579 1.869437 -0.014996 1.869417 -0.014996
+266.092898 1.869440 -0.014965 1.869420 -0.014965
+266.721216 1.869441 -0.014929 1.869421 -0.014923
+267.349535 1.869439 -0.014896 1.869419 -0.014896
+267.977853 1.869441 -0.014857 1.869421 -0.014859
+268.606172 1.869440 -0.014826 1.869420 -0.014819
+269.234490 1.869440 -0.014789 1.869420 -0.014789
+269.862809 1.869439 -0.014754 1.869419 -0.014754
+270.491127 1.869443 -0.014717 1.869423 -0.014720
+271.119446 1.869442 -0.014684 1.869421 -0.014686
+271.747765 1.869439 -0.014650 1.869419 -0.014650
+272.376083 1.869442 -0.014618 1.869422 -0.014617
+273.004402 1.869440 -0.014583 1.869420 -0.014587
+273.632720 1.869440 -0.014552 1.869420 -0.014552
+274.261039 1.869439 -0.014517 1.869419 -0.014517
+274.889357 1.869440 -0.014481 1.869420 -0.014485
+275.517676 1.869443 -0.014453 1.869423 -0.014448
+276.145994 1.869438 -0.014420 1.869418 -0.014415
+276.774313 1.869440 -0.014383 1.869420 -0.014383
+277.402631 1.869442 -0.014357 1.869422 -0.014352
+278.030950 1.869440 -0.014319 1.869420 -0.014324
+278.659268 1.869441 -0.014288 1.869421 -0.014289
+279.287587 1.869443 -0.014261 1.869423 -0.014257
+279.915905 1.869442 -0.014223 1.869422 -0.014224
+280.544224 1.869446 -0.014195 1.869426 -0.014195
+281.172542 1.869442 -0.014160 1.869422 -0.014165
+281.800861 1.869443 -0.014126 1.869421 -0.014127
+282.429180 1.869441 -0.014096 1.869421 -0.014095
+283.057498 1.869440 -0.014062 1.869420 -0.014063
+283.685817 1.869441 -0.014034 1.869421 -0.014034
+284.314135 1.869440 -0.014004 1.869420 -0.014006
+284.942454 1.869439 -0.013973 1.869419 -0.013975
+285.570772 1.869442 -0.013944 1.869422 -0.013943
+286.199091 1.869444 -0.013913 1.869418 -0.013911
+286.827409 1.869442 -0.013885 1.869422 -0.013877
+287.455728 1.869444 -0.013849 1.869424 -0.013848
+288.084046 1.869442 -0.013820 1.869422 -0.013819
+288.712365 1.869442 -0.013789 1.869422 -0.013789
+289.340683 1.869445 -0.013766 1.869425 -0.013768
+289.969002 1.869447 -0.013731 1.869427 -0.013737
+290.597320 1.869441 -0.013702 1.869421 -0.013704
+291.225639 1.869441 -0.013670 1.869421 -0.013675
+291.853958 1.869441 -0.013643 1.869421 -0.013643
+292.482276 1.869446 -0.013614 1.869426 -0.013614
+293.110595 1.869444 -0.013587 1.869424 -0.013582
+293.738913 1.869443 -0.013556 1.869423 -0.013556
+294.367232 1.869445 -0.013527 1.869425 -0.013522
+294.995550 1.869440 -0.013498 1.869420 -0.013498
+295.623869 1.869446 -0.013469 1.869426 -0.013469
+296.252187 1.869444 -0.013442 1.869424 -0.013444
+296.880506 1.869441 -0.013413 1.869421 -0.013413
+297.508824 1.869439 -0.013382 1.869419 -0.013384
+298.137143 1.869447 -0.013356 1.869421 -0.013356
+298.765461 1.869446 -0.013328 1.869426 -0.013328
+299.393780 1.869442 -0.013299 1.869422 -0.013299
+300.022098 1.869441 -0.013271 1.869421 -0.013271
+300.650417 1.869445 -0.013245 1.869425 -0.013244
+301.278735 1.869444 -0.013215 1.869424 -0.013215
+301.907054 1.869443 -0.013192 1.869423 -0.013187
+302.535373 1.869445 -0.013162 1.869425 -0.013161
+303.163691 1.869442 -0.013132 1.869422 -0.013131
+303.792010 1.869443 -0.013105 1.869423 -0.013110
+304.420328 1.869443 -0.013078 1.869423 -0.013084
+305.048647 1.869439 -0.013053 1.869419 -0.013051
+305.676965 1.869447 -0.013027 1.869427 -0.013027
+306.305284 1.869445 -0.013000 1.869425 -0.012998
+306.933602 1.869447 -0.012974 1.869427 -0.012968
+307.561921 1.869445 -0.012947 1.869425 -0.012946
+308.190239 1.869444 -0.012920 1.869424 -0.012918
+308.818558 1.869441 -0.012899 1.869421 -0.012898
+309.446876 1.869447 -0.012868 1.869427 -0.012866
+310.075195 1.869446 -0.012843 1.869426 -0.012843
+310.703513 1.869444 -0.012818 1.869424 -0.012818
+311.331832 1.869449 -0.012794 1.869429 -0.012794
+311.960151 1.869443 -0.012765 1.869423 -0.012765
+312.588469 1.869444 -0.012744 1.869424 -0.012738
+313.216788 1.869444 -0.012711 1.869424 -0.012711
+313.845106 1.869442 -0.012686 1.869422 -0.012688
+314.473425 1.869441 -0.012662 1.869421 -0.012660
+315.101743 1.869443 -0.012636 1.869423 -0.012634
+315.730062 1.869442 -0.012610 1.869422 -0.012610
+316.358380 1.869444 -0.012584 1.869424 -0.012592
+316.986699 1.869444 -0.012561 1.869424 -0.012563
+317.615017 1.869449 -0.012536 1.869429 -0.012536
+318.243336 1.869442 -0.012512 1.869422 -0.012514
+318.871654 1.869443 -0.012489 1.869423 -0.012486
+319.499973 1.869441 -0.012463 1.869421 -0.012463
+320.128291 1.869448 -0.012434 1.869428 -0.012436
+320.756610 1.869444 -0.012416 1.869424 -0.012418
+321.384928 1.869444 -0.012392 1.869424 -0.012388
+322.013247 1.869446 -0.012362 1.869426 -0.012368
+322.641566 1.869445 -0.012341 1.869425 -0.012341
+323.269884 1.869438 -0.012314 1.869418 -0.012314
+323.898203 1.869445 -0.012295 1.869425 -0.012293
+324.526521 1.869442 -0.012265 1.869422 -0.012263
+325.154840 1.869445 -0.012251 1.869425 -0.012246
+325.783158 1.869448 -0.012223 1.869428 -0.012224
+326.411477 1.869448 -0.012193 1.869428 -0.012199
+327.039795 1.869440 -0.012174 1.869420 -0.012174
+327.668114 1.869448 -0.012156 1.869428 -0.012154
+328.296432 1.869452 -0.012131 1.869432 -0.012131
+328.924751 1.869442 -0.012106 1.869422 -0.012106
+329.553069 1.869446 -0.012080 1.869426 -0.012080
+330.181388 1.869442 -0.012060 1.869422 -0.012058
+330.809706 1.869443 -0.012040 1.869423 -0.012040
+331.438025 1.869448 -0.012013 1.869428 -0.012013
+332.066343 1.869446 -0.011990 1.869426 -0.011990
+332.694662 1.869447 -0.011966 1.869427 -0.011967
+333.322981 1.869446 -0.011951 1.869426 -0.011949
+333.951299 1.869444 -0.011924 1.869424 -0.011924
+334.579618 1.869444 -0.011909 1.869424 -0.011907
+335.207936 1.869445 -0.011880 1.869425 -0.011875
+335.836255 1.869446 -0.011857 1.869426 -0.011857
+336.464573 1.869448 -0.011834 1.869428 -0.011832
+337.092892 1.869446 -0.011808 1.869426 -0.011808
+337.721210 1.869447 -0.011793 1.869427 -0.011795
+338.349529 1.869451 -0.011773 1.869424 -0.011774
+338.977847 1.869443 -0.011747 1.869423 -0.011747
+339.606166 1.869448 -0.011726 1.869428 -0.011728
+340.234484 1.869448 -0.011704 1.869428 -0.011704
+340.862803 1.869442 -0.011677 1.869422 -0.011684
+341.491121 1.869452 -0.011660 1.869432 -0.011658
+342.119440 1.869449 -0.011632 1.869429 -0.011632
+342.747759 1.869446 -0.011616 1.869426 -0.011616
+343.376077 1.869450 -0.011601 1.869430 -0.011603
+344.004396 1.869446 -0.011578 1.869426 -0.011576
+344.632714 1.869446 -0.011552 1.869426 -0.011552
+345.261033 1.869442 -0.011535 1.869422 -0.011533
+345.889351 1.869445 -0.011513 1.869425 -0.011516
+346.517670 1.869451 -0.011493 1.869424 -0.011493
+347.145988 1.869446 -0.011467 1.869426 -0.011469
+347.774307 1.869450 -0.011449 1.869430 -0.011449
+348.402625 1.869449 -0.011426 1.869429 -0.011429
+349.030944 1.869449 -0.011404 1.869429 -0.011402
+349.659262 1.869446 -0.011392 1.869426 -0.011392
+350.287581 1.869443 -0.011368 1.869423 -0.011368
+350.915899 1.869446 -0.011352 1.869426 -0.011345
+351.544218 1.869448 -0.011325 1.869428 -0.011322
+352.172536 1.869443 -0.011301 1.869423 -0.011308
+352.800855 1.869446 -0.011285 1.869426 -0.011282
+353.429174 1.869449 -0.011269 1.869429 -0.011274
+354.057492 1.869444 -0.011248 1.869424 -0.011250
+354.685811 1.869444 -0.011222 1.869424 -0.011229
+355.314129 1.869445 -0.011207 1.869425 -0.011207
+355.942448 1.869452 -0.011192 1.869432 -0.011189
+356.570766 1.869450 -0.011175 1.869430 -0.011167
+357.199085 1.869440 -0.011153 1.869420 -0.011151
+357.827403 1.869450 -0.011135 1.869430 -0.011130
+358.455722 1.869448 -0.011114 1.869428 -0.011112
+359.084040 1.869450 -0.011091 1.869430 -0.011091
+359.712359 1.869450 -0.011071 1.869430 -0.011071
+360.340677 1.869444 -0.011051 1.869424 -0.011046
+360.968996 1.869448 -0.011040 1.869428 -0.011038
+361.597314 1.869442 -0.011014 1.869422 -0.011011
+362.225633 1.869452 -0.010992 1.869432 -0.010992
+362.853951 1.869450 -0.010974 1.869430 -0.010974
+363.482270 1.869449 -0.010959 1.869429 -0.010959
+364.110589 1.869447 -0.010935 1.869427 -0.010937
+364.738907 1.869448 -0.010918 1.869428 -0.010918
+365.367226 1.869448 -0.010897 1.869428 -0.010904
+365.995544 1.869451 -0.010875 1.869431 -0.010875
+366.623863 1.869448 -0.010862 1.869428 -0.010862
+367.252181 1.869450 -0.010841 1.869430 -0.010841
+367.880500 1.869449 -0.010824 1.869429 -0.010827
+368.508818 1.869453 -0.010804 1.869433 -0.010804
+369.137137 1.869445 -0.010788 1.869425 -0.010788
+369.765455 1.869448 -0.010774 1.869428 -0.010771
+370.393774 1.869454 -0.010757 1.869434 -0.010759
+371.022092 1.869454 -0.010732 1.869434 -0.010738
+371.650411 1.869447 -0.010721 1.869427 -0.010713
+372.278729 1.869441 -0.010695 1.869421 -0.010695
+372.907048 1.869444 -0.010678 1.869424 -0.010678
+373.535367 1.869445 -0.010664 1.869425 -0.010653
+374.163685 1.869444 -0.010644 1.869424 -0.010644
+374.792004 1.869457 -0.010623 1.869437 -0.010629
+375.420322 1.869453 -0.010604 1.869433 -0.010604
+376.048641 1.869452 -0.010590 1.869432 -0.010590
+376.676959 1.869449 -0.010571 1.869429 -0.010571
+377.305278 1.869441 -0.010551 1.869421 -0.010553
+377.933596 1.869446 -0.010535 1.869425 -0.010538
+378.561915 1.869444 -0.010517 1.869424 -0.010520
+379.190233 1.869453 -0.010503 1.869433 -0.010503
+379.818552 1.869444 -0.010486 1.869424 -0.010486
+380.446870 1.869449 -0.010467 1.869429 -0.010469
+381.075189 1.869442 -0.010444 1.869422 -0.010447
+381.703507 1.869452 -0.010430 1.869432 -0.010428
+382.331826 1.869449 -0.010415 1.869429 -0.010419
+382.960144 1.869451 -0.010396 1.869431 -0.010396
+383.588463 1.869455 -0.010387 1.869435 -0.010387
+384.216782 1.869450 -0.010367 1.869430 -0.010367
+384.845100 1.869450 -0.010349 1.869430 -0.010346
+385.473419 1.869454 -0.010330 1.869434 -0.010333
+386.101737 1.869447 -0.010313 1.869427 -0.010316
+386.730056 1.869450 -0.010290 1.869430 -0.010290
+387.358374 1.869446 -0.010280 1.869426 -0.010280
+387.986693 1.869448 -0.010267 1.869428 -0.010267
+388.615011 1.869448 -0.010248 1.869428 -0.010248
+389.243330 1.869451 -0.010232 1.869431 -0.010232
+389.871648 1.869449 -0.010206 1.869429 -0.010215
+390.499967 1.869447 -0.010200 1.869427 -0.010197
+391.128285 1.869455 -0.010179 1.869435 -0.010179
+391.756604 1.869445 -0.010160 1.869425 -0.010160
+392.384922 1.869449 -0.010141 1.869429 -0.010141
+393.013241 1.869443 -0.010130 1.869423 -0.010139
+393.641559 1.869453 -0.010120 1.869433 -0.010123
+394.269878 1.869448 -0.010106 1.869428 -0.010106
+394.898197 1.869448 -0.010086 1.869428 -0.010086
+395.526515 1.869452 -0.010069 1.869432 -0.010069
+396.154834 1.869456 -0.010058 1.869436 -0.010058
+396.783152 1.869455 -0.010036 1.869435 -0.010036
+397.411471 1.869441 -0.010018 1.869421 -0.010030
+398.039789 1.869454 -0.010008 1.869434 -0.009998
+398.668108 1.869456 -0.009991 1.869436 -0.009991
+399.296426 1.869447 -0.009980 1.869427 -0.009967
+399.924745 1.869453 -0.009957 1.869433 -0.009954
+400.553063 1.869452 -0.009939 1.869432 -0.009946
+401.181382 1.869450 -0.009926 1.869430 -0.009926
+401.809700 1.869452 -0.009907 1.869432 -0.009910
+402.438019 1.869453 -0.009898 1.869433 -0.009892
+403.066337 1.869447 -0.009876 1.869427 -0.009876
+403.694656 1.869445 -0.009862 1.869425 -0.009862
+404.322975 1.869452 -0.009851 1.869432 -0.009851
+404.951293 1.869452 -0.009841 1.869432 -0.009834
+405.579612 1.869456 -0.009821 1.869436 -0.009815
+406.207930 1.869449 -0.009808 1.869429 -0.009808
+406.836249 1.869444 -0.009787 1.869424 -0.009787
+407.464567 1.869448 -0.009770 1.869428 -0.009766
+408.092886 1.869446 -0.009757 1.869426 -0.009767
+408.721204 1.869454 -0.009737 1.869434 -0.009737
+409.349523 1.869450 -0.009733 1.869430 -0.009733
+409.977841 1.869451 -0.009715 1.869431 -0.009718
+410.606160 1.869447 -0.009702 1.869427 -0.009702
+411.234478 1.869442 -0.009683 1.869422 -0.009686
+411.862797 1.869449 -0.009669 1.869429 -0.009675
+412.491115 1.869454 -0.009651 1.869434 -0.009648
+413.119434 1.869451 -0.009641 1.869431 -0.009645
+413.747752 1.869454 -0.009624 1.869434 -0.009624
+414.376071 1.869451 -0.009611 1.869431 -0.009611
+415.004390 1.869450 -0.009597 1.869430 -0.009597
+415.632708 1.869444 -0.009590 1.869424 -0.009584
+416.261027 1.869453 -0.009566 1.869433 -0.009566
+416.889345 1.869454 -0.009556 1.869434 -0.009549
+417.517664 1.869443 -0.009538 1.869423 -0.009531
+418.145982 1.869451 -0.009521 1.869431 -0.009525
+418.774301 1.869454 -0.009511 1.869434 -0.009500
+419.402619 1.869452 -0.009491 1.869432 -0.009495
+420.030938 1.869445 -0.009486 1.869425 -0.009486
+420.659256 1.869449 -0.009465 1.869429 -0.009465
+421.287575 1.869449 -0.009452 1.869429 -0.009452
+421.915893 1.869451 -0.009445 1.869431 -0.009442
+422.544212 1.869461 -0.009419 1.869441 -0.009423
+423.172530 1.869455 -0.009415 1.869435 -0.009412
+423.800849 1.869455 -0.009397 1.869435 -0.009397
+424.429167 1.869449 -0.009380 1.869429 -0.009387
+425.057486 1.869445 -0.009360 1.869425 -0.009371
+425.685805 1.869449 -0.009347 1.869429 -0.009347
+426.314123 1.869456 -0.009344 1.869436 -0.009348
+426.942442 1.869449 -0.009328 1.869429 -0.009328
+427.570760 1.869441 -0.009316 1.869421 -0.009316
+428.199079 1.869450 -0.009304 1.869430 -0.009300
+428.827397 1.869449 -0.009283 1.869429 -0.009283
+429.455716 1.869446 -0.009276 1.869426 -0.009283
+430.084034 1.869459 -0.009258 1.869439 -0.009258
+430.712353 1.869452 -0.009245 1.869432 -0.009238
+431.340671 1.869454 -0.009232 1.869434 -0.009232
+431.968990 1.869450 -0.009229 1.869430 -0.009214
+432.597308 1.869444 -0.009198 1.869424 -0.009209
+433.225627 1.869455 -0.009189 1.869435 -0.009189
+433.853945 1.869453 -0.009177 1.869433 -0.009177
+434.482264 1.869444 -0.009166 1.869424 -0.009163
+435.110583 1.869457 -0.009153 1.869437 -0.009153
+435.738901 1.869459 -0.009140 1.869439 -0.009140
+436.367220 1.869452 -0.009120 1.869432 -0.009119
+436.995538 1.869443 -0.009111 1.869423 -0.009114
+437.623857 1.869443 -0.009098 1.869423 -0.009098
+438.252175 1.869452 -0.009089 1.869432 -0.009089
+438.880494 1.869455 -0.009072 1.869435 -0.009075
+439.508812 1.869448 -0.009069 1.869428 -0.009065
+440.137131 1.869459 -0.009044 1.869439 -0.009044
+440.765449 1.869459 -0.009029 1.869439 -0.009041
+441.393768 1.869461 -0.009018 1.869441 -0.009034
+442.022086 1.869457 -0.009007 1.869437 -0.009004
+442.650405 1.869443 -0.008997 1.869423 -0.008997
+443.278723 1.869446 -0.008986 1.869426 -0.008986
+443.907042 1.869451 -0.008976 1.869431 -0.008976
+444.535360 1.869449 -0.008963 1.869429 -0.008967
+445.163679 1.869449 -0.008948 1.869429 -0.008955
+445.791998 1.869443 -0.008933 1.869423 -0.008933
+446.420316 1.869461 -0.008913 1.869441 -0.008921
+447.048635 1.869450 -0.008919 1.869430 -0.008907
+447.676953 1.869444 -0.008893 1.869424 -0.008889
+448.305272 1.869445 -0.008890 1.869425 -0.008874
+448.933590 1.869450 -0.008880 1.869430 -0.008880
+449.561909 1.869453 -0.008862 1.869433 -0.008858
+450.190227 1.869449 -0.008859 1.869429 -0.008851
+450.818546 1.869459 -0.008829 1.869439 -0.008837
+451.446864 1.869451 -0.008818 1.869431 -0.008831
+452.075183 1.869456 -0.008820 1.869436 -0.008813
+452.703501 1.869443 -0.008795 1.869423 -0.008799
+453.331820 1.869451 -0.008783 1.869431 -0.008791
+453.960138 1.869453 -0.008774 1.869433 -0.008769
+454.588457 1.869463 -0.008760 1.869443 -0.008760
+455.216776 1.869460 -0.008743 1.869428 -0.008743
+455.845094 1.869454 -0.008736 1.869434 -0.008744
+456.473413 1.869454 -0.008719 1.869434 -0.008715
+457.101731 1.869442 -0.008724 1.869422 -0.008711
+457.730050 1.869457 -0.008704 1.869437 -0.008704
+458.358368 1.869449 -0.008686 1.869429 -0.008699
+458.986687 1.869446 -0.008668 1.869426 -0.008681
+459.615005 1.869457 -0.008668 1.869437 -0.008672
+460.243324 1.869449 -0.008649 1.869429 -0.008649
+460.871642 1.869454 -0.008646 1.869434 -0.008646
+461.499961 1.869449 -0.008619 1.869429 -0.008632
+462.128279 1.869449 -0.008628 1.869429 -0.008611
+462.756598 1.869455 -0.008607 1.869435 -0.008607
+463.384916 1.869463 -0.008596 1.869443 -0.008595
+464.013235 1.869451 -0.008584 1.869431 -0.008592
+464.641553 1.869456 -0.008567 1.869436 -0.008588
+465.269872 1.869451 -0.008557 1.869431 -0.008557
+465.898191 1.869452 -0.008554 1.869432 -0.008550
+466.526509 1.869458 -0.008536 1.869438 -0.008545
+467.154828 1.869453 -0.008526 1.869433 -0.008526
+467.783146 1.869457 -0.008521 1.869437 -0.008512
+468.411465 1.869459 -0.008509 1.869439 -0.008496
+469.039783 1.869449 -0.008494 1.869429 -0.008494
+469.668102 1.869450 -0.008485 1.869430 -0.008476
+470.296420 1.869456 -0.008458 1.869436 -0.008466
+470.924739 1.869447 -0.008455 1.869427 -0.008468
+471.553057 1.869460 -0.008439 1.869440 -0.008452
+472.181376 1.869453 -0.008433 1.869433 -0.008438
+472.809694 1.869447 -0.008432 1.869427 -0.008419
+473.438013 1.869447 -0.008406 1.869427 -0.008420
+474.066331 1.869457 -0.008393 1.869437 -0.008407
+474.694650 1.869447 -0.008383 1.869427 -0.008387
+475.322968 1.869447 -0.008372 1.869426 -0.008376
+475.951287 1.869452 -0.008355 1.869432 -0.008368
+476.579606 1.869455 -0.008355 1.869435 -0.008355
+477.207924 1.869459 -0.008355 1.869439 -0.008351
+477.836243 1.869451 -0.008333 1.869430 -0.008333
+478.464561 1.869453 -0.008328 1.869433 -0.008315
+479.092880 1.869456 -0.008320 1.869436 -0.008302
+479.721198 1.869447 -0.008298 1.869427 -0.008303
+480.349517 1.869463 -0.008302 1.869443 -0.008288
+480.977835 1.869461 -0.008283 1.869441 -0.008278
+481.606154 1.869448 -0.008263 1.869428 -0.008272
+482.234472 1.869449 -0.008263 1.869429 -0.008249
+482.862791 1.869447 -0.008248 1.869427 -0.008244
+483.491109 1.869451 -0.008232 1.869431 -0.008233
+484.119428 1.869456 -0.008227 1.869436 -0.008227
+484.747746 1.869449 -0.008212 1.869429 -0.008212
+485.376065 1.869447 -0.008203 1.869427 -0.008203
+486.004384 1.869452 -0.008195 1.869432 -0.008195
+486.632702 1.869444 -0.008182 1.869424 -0.008182
+487.261021 1.869441 -0.008172 1.869421 -0.008181
+487.889339 1.869455 -0.008162 1.869435 -0.008162
+488.517658 1.869455 -0.008147 1.869435 -0.008162
+489.145976 1.869452 -0.008140 1.869432 -0.008140
+489.774295 1.869455 -0.008124 1.869435 -0.008129
+490.402613 1.869445 -0.008117 1.869425 -0.008117
+491.030932 1.869461 -0.008105 1.869441 -0.008105
+491.659250 1.869449 -0.008099 1.869429 -0.008089
+492.287569 1.869457 -0.008093 1.869437 -0.008078
+492.915887 1.869448 -0.008087 1.869428 -0.008087
+493.544206 1.869458 -0.008073 1.869438 -0.008078
+494.172524 1.869447 -0.008057 1.869427 -0.008062
+494.800843 1.869446 -0.008055 1.869426 -0.008055
+495.429161 1.869461 -0.008029 1.869441 -0.008053
+496.057480 1.869443 -0.008025 1.869423 -0.008025
+496.685799 1.869450 -0.008013 1.869430 -0.008032
+497.314117 1.869460 -0.008011 1.869440 -0.008010
+497.942436 1.869460 -0.007994 1.869440 -0.007989
+498.570754 1.869447 -0.007975 1.869427 -0.007990
+499.199073 1.869450 -0.007984 1.869430 -0.007984
+499.827391 1.869444 -0.007965 1.869424 -0.007965
+500.455710 1.869461 -0.007955 1.869441 -0.007955
+501.084028 1.869452 -0.007936 1.869432 -0.007961
+501.712347 1.869450 -0.007940 1.869430 -0.007925
+502.340665 1.869455 -0.007932 1.869435 -0.007927
+502.968984 1.869466 -0.007911 1.869446 -0.007926
+503.597302 1.869462 -0.007911 1.869442 -0.007906
+504.225621 1.869440 -0.007896 1.869420 -0.007901
+504.853939 1.869460 -0.007886 1.869440 -0.007895
+505.482258 1.869445 -0.007879 1.869425 -0.007879
+506.110576 1.869457 -0.007876 1.869437 -0.007866
+506.738895 1.869460 -0.007865 1.869440 -0.007854
+507.367214 1.869449 -0.007855 1.869429 -0.007850
+507.995532 1.869450 -0.007831 1.869430 -0.007847
+508.623851 1.869441 -0.007829 1.869421 -0.007829
+509.252169 1.869469 -0.007826 1.869449 -0.007816
+509.880488 1.869457 -0.007803 1.869437 -0.007828
+510.508806 1.869447 -0.007813 1.869427 -0.007787
+511.137125 1.869459 -0.007802 1.869439 -0.007787
+511.765443 1.869456 -0.007799 1.869436 -0.007783
+512.393762 1.869449 -0.007772 1.869429 -0.007772
+513.022080 1.869459 -0.007758 1.869439 -0.007759
+513.650399 1.869455 -0.007757 1.869435 -0.007757
+514.278717 1.869457 -0.007745 1.869437 -0.007735
+514.907036 1.869439 -0.007725 1.869419 -0.007741
+515.535354 1.869459 -0.007716 1.869439 -0.007742
+516.163673 1.869460 -0.007707 1.869440 -0.007712
+516.791992 1.869450 -0.007709 1.869430 -0.007709
+517.420310 1.869453 -0.007690 1.869433 -0.007690
+518.048629 1.869462 -0.007691 1.869442 -0.007692
+518.676947 1.869446 -0.007671 1.869426 -0.007677
+519.305266 1.869452 -0.007662 1.869432 -0.007683
+519.933584 1.869465 -0.007661 1.869445 -0.007661
+520.561903 1.869452 -0.007649 1.869432 -0.007655
+521.190221 1.869445 -0.007642 1.869425 -0.007642
+521.818540 1.869445 -0.007639 1.869425 -0.007618
+522.446858 1.869452 -0.007624 1.869432 -0.007619
+523.075177 1.869454 -0.007614 1.869434 -0.007619
+523.703495 1.869453 -0.007596 1.869433 -0.007596
+524.331814 1.869452 -0.007589 1.869432 -0.007590
+524.960132 1.869457 -0.007597 1.869437 -0.007581
+525.588451 1.869454 -0.007588 1.869434 -0.007567
+526.216769 1.869440 -0.007573 1.869420 -0.007556
+526.845088 1.869460 -0.007557 1.869440 -0.007546
+527.473407 1.869438 -0.007541 1.869418 -0.007541
+528.101725 1.869449 -0.007552 1.869429 -0.007535
+528.730044 1.869445 -0.007535 1.869425 -0.007530
+529.358362 1.869465 -0.007519 1.869439 -0.007525
+529.986681 1.869452 -0.007515 1.869432 -0.007520
+530.614999 1.869462 -0.007511 1.869442 -0.007511
+531.243318 1.869463 -0.007491 1.869443 -0.007503
+531.871636 1.869448 -0.007491 1.869428 -0.007485
+532.499955 1.869450 -0.007463 1.869430 -0.007486
+533.128273 1.869454 -0.007467 1.869434 -0.007484
+533.756592 1.869459 -0.007462 1.869439 -0.007462
+534.384910 1.869460 -0.007449 1.869440 -0.007449
+535.013229 1.869456 -0.007445 1.869436 -0.007445
+535.641547 1.869458 -0.007428 1.869438 -0.007446
+536.269866 1.869457 -0.007422 1.869437 -0.007434
+536.898184 1.869462 -0.007416 1.869442 -0.007416
+537.526503 1.869468 -0.007416 1.869448 -0.007410
+538.154822 1.869451 -0.007400 1.869431 -0.007393
+538.783140 1.869454 -0.007396 1.869434 -0.007378
+539.411459 1.869463 -0.007377 1.869443 -0.007383
+540.039777 1.869450 -0.007372 1.869430 -0.007372
+540.668096 1.869450 -0.007360 1.869430 -0.007360
+541.296414 1.869463 -0.007346 1.869443 -0.007358
+541.924733 1.869459 -0.007344 1.869439 -0.007355
+542.553051 1.869456 -0.007330 1.869436 -0.007340
+543.181370 1.869472 -0.007333 1.869452 -0.007333
+543.809688 1.869460 -0.007321 1.869440 -0.007333
+544.438007 1.869454 -0.007301 1.869434 -0.007330
+545.066325 1.869455 -0.007307 1.869435 -0.007307
+545.694644 1.869470 -0.007294 1.869450 -0.007294
+546.322962 1.869467 -0.007286 1.869447 -0.007280
+546.951281 1.869472 -0.007285 1.869452 -0.007267
+547.579600 1.869454 -0.007268 1.869434 -0.007273
+548.207918 1.869454 -0.007259 1.869434 -0.007252
+548.836237 1.869457 -0.007264 1.869436 -0.007258
+549.464555 1.869459 -0.007258 1.869439 -0.007245
+550.092874 1.869445 -0.007256 1.869425 -0.007238
+550.721192 1.869444 -0.007237 1.869424 -0.007232
+551.349511 1.869450 -0.007239 1.869430 -0.007221
+551.977829 1.869440 -0.007232 1.869420 -0.007207
+552.606148 1.869447 -0.007198 1.869427 -0.007216
+553.234466 1.869444 -0.007200 1.869424 -0.007200
+553.862785 1.869443 -0.007197 1.869423 -0.007179
+554.491103 1.869459 -0.007178 1.869439 -0.007178
+555.119422 1.869454 -0.007186 1.869434 -0.007167
+555.747740 1.869473 -0.007162 1.869453 -0.007162
+556.376059 1.869457 -0.007156 1.869437 -0.007156
+557.004377 1.869454 -0.007165 1.869434 -0.007152
+557.632696 1.869457 -0.007150 1.869437 -0.007150
+558.261015 1.869451 -0.007127 1.869431 -0.007128
+558.889333 1.869451 -0.007128 1.869431 -0.007110
+559.517652 1.869452 -0.007137 1.869432 -0.007112
+560.145970 1.869459 -0.007097 1.869439 -0.007098
+560.774289 1.869456 -0.007106 1.869436 -0.007093
+561.402607 1.869454 -0.007087 1.869434 -0.007093
+562.030926 1.869440 -0.007083 1.869420 -0.007083
+562.659244 1.869465 -0.007086 1.869445 -0.007067
+563.287563 1.869447 -0.007074 1.869427 -0.007075
+563.915881 1.869449 -0.007056 1.869429 -0.007069
+564.544200 1.869464 -0.007044 1.869444 -0.007063
+565.172518 1.869449 -0.007035 1.869429 -0.007053
+565.800837 1.869434 -0.007017 1.869414 -0.007042
+566.429155 1.869452 -0.007042 1.869432 -0.007031
+567.057474 1.869459 -0.007026 1.869439 -0.007026
+567.685793 1.869448 -0.007012 1.869428 -0.007018
+568.314111 1.869443 -0.007009 1.869423 -0.007015
+568.942430 1.869453 -0.006993 1.869433 -0.007000
+569.570748 1.869470 -0.007000 1.869450 -0.007006
+570.199067 1.869462 -0.006991 1.869442 -0.006984
+570.827385 1.869462 -0.006962 1.869442 -0.006987
+571.455704 1.869456 -0.006979 1.869436 -0.006973
+572.084022 1.869451 -0.006962 1.869431 -0.006974
+572.712341 1.869473 -0.006950 1.869453 -0.006969
+573.340659 1.869470 -0.006944 1.869450 -0.006944
+573.968978 1.869448 -0.006922 1.869428 -0.006942
+574.597296 1.869448 -0.006932 1.869428 -0.006932
+575.225615 1.869447 -0.006916 1.869427 -0.006935
+575.853933 1.869454 -0.006922 1.869434 -0.006915
+576.482252 1.869456 -0.006912 1.869436 -0.006906
+577.110570 1.869445 -0.006917 1.869425 -0.006890
+577.738889 1.869443 -0.006897 1.869423 -0.006897
+578.367208 1.869447 -0.006881 1.869427 -0.006901
+578.995526 1.869439 -0.006880 1.869419 -0.006854
+579.623845 1.869465 -0.006874 1.869445 -0.006868
+580.252163 1.869453 -0.006859 1.869433 -0.006854
+580.880482 1.869447 -0.006852 1.869427 -0.006872
+581.508800 1.869451 -0.006847 1.869431 -0.006847
+582.137119 1.869454 -0.006854 1.869434 -0.006854
+582.765437 1.869437 -0.006828 1.869417 -0.006834
+583.393756 1.869450 -0.006832 1.869430 -0.006832
+584.022074 1.869443 -0.006821 1.869423 -0.006821
+584.650393 1.869457 -0.006817 1.869437 -0.006811
+585.278711 1.869452 -0.006805 1.869432 -0.006811
+585.907030 1.869454 -0.006790 1.869433 -0.006797
+586.535348 1.869444 -0.006784 1.869423 -0.006805
+587.163667 1.869468 -0.006770 1.869448 -0.006777
+587.791985 1.869459 -0.006775 1.869439 -0.006762
+588.420304 1.869437 -0.006777 1.869417 -0.006757
+589.048623 1.869451 -0.006763 1.869431 -0.006763
+589.676941 1.869460 -0.006736 1.869440 -0.006763
+590.305260 1.869440 -0.006747 1.869420 -0.006747
+590.933578 1.869470 -0.006743 1.869450 -0.006743
+591.561897 1.869461 -0.006742 1.869441 -0.006742
+592.190215 1.869444 -0.006724 1.869424 -0.006745
+592.818534 1.869449 -0.006707 1.869429 -0.006729
+593.446852 1.869456 -0.006708 1.869436 -0.006714
+594.075171 1.869442 -0.006707 1.869422 -0.006686
+594.703489 1.869450 -0.006694 1.869430 -0.006694
+595.331808 1.869459 -0.006700 1.869439 -0.006700
+595.960126 1.869448 -0.006686 1.869428 -0.006686
+596.588445 1.869452 -0.006675 1.869432 -0.006681
+597.216763 1.869463 -0.006683 1.869443 -0.006670
+597.845082 1.869448 -0.006674 1.869428 -0.006653
+598.473401 1.869469 -0.006656 1.869448 -0.006656
+599.101719 1.869461 -0.006646 1.869441 -0.006631
+599.730038 1.869442 -0.006639 1.869422 -0.006646
+600.358356 1.869442 -0.006640 1.869422 -0.006625
+600.986675 1.869446 -0.006615 1.869426 -0.006636
+601.614993 1.869464 -0.006610 1.869444 -0.006632
+602.243312 1.869461 -0.006614 1.869441 -0.006615
+602.871630 1.869459 -0.006597 1.869439 -0.006596
+603.499949 1.869458 -0.006601 1.869438 -0.006592
+604.128267 1.869474 -0.006594 1.869454 -0.006594
+604.756586 1.869452 -0.006580 1.869432 -0.006594
+605.384904 1.869446 -0.006593 1.869426 -0.006570
+606.013223 1.869449 -0.006560 1.869429 -0.006582
+606.641541 1.869452 -0.006580 1.869432 -0.006552
+607.269860 1.869472 -0.006557 1.869451 -0.006557
+607.898178 1.869440 -0.006543 1.869420 -0.006542
+608.526497 1.869446 -0.006562 1.869426 -0.006533
+609.154816 1.869452 -0.006554 1.869432 -0.006531
+609.783134 1.869460 -0.006550 1.869440 -0.006520
+610.411453 1.869454 -0.006503 1.869434 -0.006525
+611.039771 1.869441 -0.006512 1.869421 -0.006534
+611.668090 1.869467 -0.006498 1.869447 -0.006521
+612.296408 1.869462 -0.006504 1.869442 -0.006481
+612.924727 1.869444 -0.006501 1.869424 -0.006494
+613.553045 1.869450 -0.006502 1.869430 -0.006494
+614.181364 1.869463 -0.006472 1.869443 -0.006480
+614.809682 1.869463 -0.006482 1.869443 -0.006475
+615.438001 1.869456 -0.006461 1.869436 -0.006477
+616.066319 1.869473 -0.006488 1.869453 -0.006458
+616.694638 1.869459 -0.006476 1.869439 -0.006453
+617.322956 1.869469 -0.006436 1.869449 -0.006467
+617.951275 1.869451 -0.006447 1.869431 -0.006463
+618.579593 1.869448 -0.006453 1.869428 -0.006431
+619.207912 1.869438 -0.006420 1.869418 -0.006457
+619.836231 1.869460 -0.006426 1.869440 -0.006426
+620.464549 1.869458 -0.006400 1.869438 -0.006423
+621.092868 1.869467 -0.006414 1.869447 -0.006414
+621.721186 1.869467 -0.006411 1.869440 -0.006403
+622.349505 1.869454 -0.006394 1.869434 -0.006402
+622.977823 1.869456 -0.006399 1.869436 -0.006392
+623.606142 1.869445 -0.006399 1.869425 -0.006375
+624.234460 1.869456 -0.006381 1.869436 -0.006381
+624.862779 1.869453 -0.006395 1.869433 -0.006365
+625.491097 1.869452 -0.006363 1.869432 -0.006401
+626.119416 1.869450 -0.006371 1.869430 -0.006363
+626.747734 1.869474 -0.006370 1.869454 -0.006354
+627.376053 1.869458 -0.006356 1.869438 -0.006356
+628.004371 1.869452 -0.006341 1.869432 -0.006341
diff --git a/tests/non-mpi/hphi/test_hphi.py b/tests/non-mpi/hphi/test_hphi.py
new file mode 100644
index 00000000..809d784d
--- /dev/null
+++ b/tests/non-mpi/hphi/test_hphi.py
@@ -0,0 +1,42 @@
+#
+# DCore -- Integrated DMFT software for correlated electrons
+# Copyright (C) 2017 The University of Tokyo
+#
+# This program 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.
+#
+# This program 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 this program. If not, see .
+#
+from dcore.dcore_pre import dcore_pre
+from dcore.dcore import dcore
+from dcore.dcore_check import dcore_check
+# from dcore.tools import h5diff
+import numpy
+import os
+
+
+def test_hphi(request):
+ org_dir = os.getcwd()
+ os.chdir(request.fspath.dirname)
+
+ input_ini = "hphi.ini"
+
+ dcore_pre(input_ini)
+ dcore(input_ini)
+
+ # A direct comparison of HDF5 file does not work
+ # h5diff("square.out.h5", "square.out.h5.ref", "dmft_out/Sigma_iw", precision=1e-5)
+
+ # Use sigma.dat generated by dcore_check
+ dcore_check(input_ini, 'check/', 'png', 100) # generate sigma.dat
+ sigma = numpy.loadtxt("check/sigma.dat")
+ sigma_ref = numpy.loadtxt("sigma.dat.ref")
+ numpy.allclose(sigma, sigma_ref, atol=1e-5)