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)