From 2c12b69cfdbcf048a474c43a30b68888550a44d1 Mon Sep 17 00:00:00 2001 From: Pietro Delugas Date: Wed, 21 Apr 2021 13:09:53 +0200 Subject: [PATCH 1/2] implements the writing of ibrav in qeschema * reads bravais_index and use_alternative attributes from the atomic_structure element and uses them to select an ibrav * uses the cell vectors to compute A,B,C COSAB, COSBC and COSCA parameters status --- qeschema/cards.py | 2 + qeschema/converters.py | 2 +- qeschema/lattice_utils.py | 387 ++++++++++++++++++++++++++ qeschema/options.py | 38 ++- tests/examples/pw/Fe_noncolin.in.test | 13 +- 5 files changed, 435 insertions(+), 7 deletions(-) create mode 100644 qeschema/lattice_utils.py diff --git a/qeschema/cards.py b/qeschema/cards.py index cc055e9..e69774c 100644 --- a/qeschema/cards.py +++ b/qeschema/cards.py @@ -234,6 +234,8 @@ def get_cell_parameters_card(name, **kwargs): logger.error("Missing required arguments when building CELL_PARAMETERS card!") return [] # Add cell parameters card + if atomic_structure.get('@bravais_index'): + return [] cells = atomic_structure.get('cell', {}) if cells: lines = ['%s bohr' % name] diff --git a/qeschema/converters.py b/qeschema/converters.py index 73691a6..a7772e9 100644 --- a/qeschema/converters.py +++ b/qeschema/converters.py @@ -325,7 +325,7 @@ class PwInputConverter(RawInputConverter): 'atomic_structure': { '@nat': 'SYSTEM[nat]', '$': [ - ('SYSTEM[ibrav]', options.set_ibrav_to_zero, None), + ('SYSTEM[ibrav]', options.get_ibrav, None), ("ATOMIC_POSITIONS", cards.get_atomic_positions_cell_card, None), ("CELL_PARAMETERS", cards.get_cell_parameters_card, None) ], diff --git a/qeschema/lattice_utils.py b/qeschema/lattice_utils.py new file mode 100644 index 0000000..e91b091 --- /dev/null +++ b/qeschema/lattice_utils.py @@ -0,0 +1,387 @@ +# +# Copyright (c), 2015-2021, Quantum Espresso Foundation and SISSA (Scuola +# Internazionale Superiore di Studi Avanzati). All rights reserved. +# This file is distributed under the terms of the MIT License. See the +# file 'LICENSE' in the root directory of the present distribution, or +# http://opensource.org/licenses/MIT. +# +# Authors: Davide Brunato, Pietro Delugas +# + +import logging +import numpy as np +from math import isclose +from numpy.lib.twodim_base import tri + +from xmlschema.validators.helpers import base64_binary_validator + +logger = logging.getLogger("qeschema") + +def bohr2angs(l): + la: float = l * 0.529177210903 + return la + +def angs2bohr(l: float): + """ + l: float legth in Angstroem to convert in Bohr units + """ + lb: float = l / 0.529177210903 + return lb + +def latgen(celldm, ibrav_): + if ibrav_ in [1,2,3,-3]: + c1 = celldm[0] * np.array([1.0, 0.0, 0.0]) + c2 = celldm[0] * np.array([0.0, 1.0, 0.0]) + c3 = celldm[0] * np.array([0.0, 0.0, 1.0]) + if ibrav_ ==1: + v1 = c1 + v2 = c2 + v3 = c3 + elif ibrav_ == 2: + v1 = 0.5e0 * ( c3 - c1 ) + v2 = 0.5e0 * ( c2 + c3 ) + v3 = 0.5e0 * ( c2 - c1 ) + elif ibrav_ == -3: + v1 = 0.5e0 * ( -c1 + c2 + c3 ) + v2 = 0.5e0 * ( +c1 - c2 + c3 ) + v3 = 0.5e0 * ( +c1 + c2 - c3 ) + elif ibrav_ == 3: + v1 = 0.5e0 * ( c1 + c2 + c3 ) + v2 = 0.5e0 * (-c1 + c2 + c3 ) + v3 = 0.5e0 * (-c1 - c2 + c3 ) + elif ibrav_ == 4: + cab = np.cos(np.pi/3.0) + sab = np.sin(np.pi/3.0) + v1 = celldm[0] * np.array([ 1.0, 0.0, 0.0]) + v2 = celldm[0] * np.array([ cab, sab, 0.0]) + v3 = celldm[0] * celldm[2] * np.array([ 0.0, 0.0, 1.0]) + elif ibrav_ in [-5, 5]: + tx = np.sqrt((1 - celldm[3])/2.e0) + ty = np.sqrt((1 - celldm[3])/6.e0) + tz = np.sqrt((1 + 2.e0 * celldm[3])/3.e0) + if ibrav_ == 5: + v1 = np.array([ tx, -ty, tz]) + v2 = np.array([ 0, 2.e0*ty, tz]) + v3 = np.array([-tx, -ty, tz]) + else: + u = tz - 2.e0 * np.sqrt(2.0) * ty + v = tz + np.sqrt(2.0) * ty + v1 = celldm[0] / np.sqrt(3.0) * np.array ([u, v, v]) + v2 = celldm[0] / np.sqrt(3.0) * np.array ([v, u, v]) + v3 = celldm[0] / np.sqrt(3.0) * np.array ([v, v, u]) + elif ibrav_ ==6: + v1 = celldm[0] * np.array( [1.0, 0.0, 0.0 ]) + v2 = celldm[0] * np.array( [0.0, 1.0, 0.0 ]) + v3 = celldm[0] * np.array( [0.0, 0.0, celldm[2]]) + elif ibrav_ == 7: + v1 = celldm[0] * 0.5 * np.array( [ 1.0, -1.0, celldm[2] ]) + v2 = celldm[0] * 0.5 * np.array( [ 1.0, 1.0, celldm[2] ]) + v3 = celldm[0] * 0.5 * np.array( [-1.0, -1.0, celldm[2] ]) + elif ibrav_ in [8, 9, -9, 91, 10, 11 ]: + c1 = celldm[0] * np.array([ 1.0, 0.0, 0.0 ]) + c2 = celldm[0] * np.array([ 0.0, celldm[1], 0.0 ]) + c3 = celldm[0] * np.array([ 0.0, 0.0, celldm[2]]) + if ibrav_ ==8: + v1 = c1 + v2 = c2 + v3 = c3 + elif ibrav_ == 9: + v1 = 0.5 * ( c1 + c2 ) + v2 = 0.5 * ( c2 - c1 ) + v3 = c3 + elif ibrav_ == -9: + v1 = 0.5 * ( c1 - c2 ) + v2 = 0.5 * ( c1 + c2 ) + v3 = c3 + elif ibrav_ == 91: + v1 = c1 + v2 = 0.5 * ( c2 - c3 ) + v3 = 0.5 * ( c2 + c3 ) + elif ibrav_ == 10: + v1 = 0.5 * ( c1 + c3 ) + v2 = 0.5 * ( c1 + c2 ) + v3 = 0.5 * ( c2 + c3 ) + elif ibrav_ == 11: + v1 = 0.5 * ( c3 + c2 + c1 ) + v2 = 0.5 * ( c3 + c2 - c1) + v3 = 0.5 * ( c3 - c2 - c1 ) + elif ibrav_ in [12, 13]: + c = celldm[3] + s = np.sqrt(1.0-c**2) + c1 = celldm[0] * np.array([ 1.0, 0.0, 0.0 ]) + c2 = celldm[0] * celldm[1] * np.array([ c, s, 0.0 ]) + c3 = celldm[0] * celldm[2] * np.array([ 0.0, 0.0, 1.0 ]) + if ibrav_ == 12: + v1 = c1 + v2 = c2 + v3 = c3 + elif ibrav_ == 13: + v1 = 0.5 * ( c1 -c3 ) + v2 = c2 + v3 = 0.5 * ( c1 + c3 ) + elif ibrav_ in [-12, -13]: + c = celldm[4] + s = np.sqrt(1 - c**2) + c1 = celldm[0] * np.array([ 1.0, 0.0, 0.0 ]) + c2 = celldm[0] * celldm[1] * np.array([ 0.0, 1.0, 0.0 ]) + c3 = celldm[0] * celldm[2] * np.array([ c, 0.0, s ]) + if ibrav_ == -12: + v1 = c1 + v2 = c2 + v3 = c3 + elif ibrav_ == -13: + v1 = 0.5 * ( c1 + c2 ) + v2 = 0.5 * ( c2 - c1 ) + v3 = c3 + elif ibrav_ == 14: + v1 = celldm[0] * np.array([1.0, 0.0, 0.0 ]) + cab = celldm[5] + sab = np.sqrt(1 - cab**2) + v2 = celldm[0] * celldm[1] * np.array([ cab, sab, 0.0]) + cca = celldm[4] + cbc = celldm[3] + v3l = celldm[0] * celldm[2] + v3x = cca + v3y = ( cbc -cca * cab) / sab + v3z = np.sqrt( 1.0 - v3x**2 - v3y**2 ) + v3 = v3l * np.array ([ v3x, v3y, v3z ]) + else: + logger.error("latgen: ibrav unknown") + return np.array([v1, v2, v3]) + + + +def qe_ibrav(bravais_index, alt_axes = None): + if bravais_index < 0 or bravais_index > 14: + logger.error("wrong value for the bravais_index") + if bravais_index == 3: + if alt_axes == "b:a-b+c:-c": + ibrav_ = -3 + else: + ibrav_ = 3 + elif bravais_index == 5: + if alt_axes == "3fold-111": + ibrav_ = -5 + else: + ibrav_ = 5 + elif bravais_index == 9: + if alt_axes == "-b:a:c": + ibrav_ = -9 + elif alt_axes == "bcoA-type": + ibrav_ = 91 + else: + ibrav_ = 9 + elif bravais_index == 12 or bravais_index == 13: + if alt_axes == "unique-axis-b": + ibrav_ = -bravais_index + else: + ibrav_ = bravais_index + else: + ibrav_ = bravais_index + return ibrav_ + +def at2celldm(at, ibrav_, alat_ = None): + c1 = np.sqrt(at[0].dot(at[0])) + c2 = None + c3 = None + c4 = None + c5 = None + c6 = None + if ibrav_ == 0: + if alat_: + c1 = alat_ + elif ibrav_ == 2: + c1 = c1 * np.sqrt(2.e0) + elif ibrav_ == 3 or ibrav_ == -3: + c1 = c1 / np.sqrt(3.e0)*2.e0 + elif ibrav_ == 4 or ibrav_ == 6: + c3 = np.sqrt(at[2].dot(at[2]))/c1 + elif ibrav_ == 5 or ibrav_ == -5: + c4 = at[0].dot(at[1])/c1/np.sqrt(at[1].dot(at[1])) + elif ibrav_ == 7: + c1 = np.abs(at[0][0]) * 2.e0 + c3 = np.abs(at[0][2]/at[0][0]) + elif ibrav_ == 8: + c2 = np.sqrt(at[1].dot(at[1]))/c1 + c3 = np.sqrt(at[2].dot(at[2]))/c1 + elif ibrav_ == 9 or ibrav_ == -9: + c1 = np.abs(at[0][0]) * 2.e0 + c2 = np.abs(at[1][1]) * 2.e0 / c1 + c3 = np.abs(at[2][2]) / c1 + elif ibrav_ == 91: + c2 = np.abs(at[1][1]) * 2.e0 / c1 + c3 = np.abs(at[2][2]) * 2.e0 / c1 + elif ibrav_ == 10: + c1 = np.abs(at[0][0]) * 2.e0 + c2 = np.abs(at[1][1]) * 2.e0 / c1 + c3 = np.abs(at[2][2]) * 2.e0 / c1 + elif ibrav_ == 11: + c1 = np.abs(at[0][0]) * 2.e0 + c2 = np.abs(at[0][1]) * 2.e0 / c1 + c3 = np.abs(at[0][2]) * 2.e0 / c1 + elif ibrav_ == 12 or ibrav_ == -12: + c2 = np.sqrt(at[1].dot(at[1])) / c1 + c3 = np.sqrt(at[2].dot(at[2])) / c1 + if ibrav_ == 12: + c4 = at[0].dot(at[1]) /c1 / c1 / c2 + else: + c5 = at[0].dot(at[2]) /c1 / c1 / c3 + elif ibrav_ == 13: + c1 = np.abs(at[0][0]) * 2.e0 + c2 = np.sqrt(at[1].dot(at[1])) / c1 + c3 = np.abs(at[0][2]/at[0][0]) + c4 = at[1][0]/at[0][0] /c2 / 2.e0 + elif ibrav_ == -13: + c1 = np.abs(at[0][0]) *2.e0 + c2 = np.abs (at[1][1]/at[1][0]) + c3 = np.sqrt(at[2].dot(at[3]))/ c1 + c5 = at[2][0]/ at[0][0]/ c3/ 2.e0 + elif ibrav_ == 14: + c2 = np.sqrt(at[1].dot(at[1]))/c1 + c3 = np.sqrt(at[2].dot(at[2]))/c1 + c4 = at[1].dot(at[2])/ c1 / c1 / c2 / c3 + c5 = at[0].dot(at[2])/ c1 / c1 / c3 + c6 = at[1].dot(at[0])/ c1 / c1 / c2 + return (c1,c2,c3,c4,c5,c6) + +def qe_abc2at(abc, ibrav_, abc_is_primitive = False): + celldm_ = abc2celldm(abc, ibrav_, abc_is_primitive) + return latgen(celldm_, ibrav_) + + +def abc2celldm(abc, ibrav_, abc_is_primitive = False): + c1 = angs2bohr(abc[0]) + c2 = abc[1]/abc[0] + c3 = abc[2]/abc[0] + triclic_lattices = [14, 0] + unique_axis_b = [-12, -13] + unique_axis_c = [-5, 5, 12, 13] + if ibrav_ in triclic_lattices: + c4 = abs[3] + c5 = abs[4] + c6 = abs[5] + elif ibrav_ in unique_axis_b: + c4 = 0.0 + c5 = abc[4] + c6 = abc[5] + elif ibrav_ in unique_axis_c: + c4 = abc[3] + c5 = 0.0 + c6 = 0.0 + else: + c4 = 0.e0 + c5 = 0.e0 + c6 =0.e0 + return (c1,c2,c3,c4,c5,c6) + +def celldm2abc(celldm, ibrav_, abc_is_primitive=False): + at_ = latgen(celldm, ibrav_) + orthorombic_lattices =[1, 2, 3, -3, 6, 7, 8, 9, -9, 91, 10] # all angles of conventional cell fixed to 90 degrees + triclic_lattices = [14, 0] #3 angles + unique_axis_b = [-12, -13] # bc and ab == 90 degrees -- ca angle free + unique_axis_c = [-5, 5, 12, 13, 4] # ca and bv == 90 degrees -- ab angle free (PI/3 for hexagonal case) + + if abc_is_primitive: + a = np.sqrt(at_[0].dot(at_[0])) + b = np.sqrt(at_[1].dot(at_[1])) + c = np.sqrt(at_[2].dot(at_[2])) + cbc = at_[1].dot(at_[2])/ b/ c + cca = at_[2].dot(at_[0])/ c/ a + cab = at_[0].dot(at_[1])/ a/ b + a = bohr2angs(a) + b = bohr2angs(b) + c = bohr2angs(c) + else: + a = bohr2angs(celldm[0]) + b = a + c = a + if celldm[1]: + b *= celldm[1] + if celldm[2]: + c *= celldm[2] + # + if ibrav_ in triclic_lattices: + cbc = celldm[3] + cca = celldm[4] + cab = celldm[5] + elif ibrav_ in unique_axis_b: + cbc = 0.e0 + cca = celldm[4] + cab = 0.e0 + elif ibrav_ in unique_axis_c: + if celldm[3] != 0.e0: + cab = celldm[3] + else: + cab = at_[0].dot(at_[1])/ (angs2bohr(a)**2) + cca = 0.e0 + cbc = 0.e0 + elif ibrav_ in orthorombic_lattices: + cbc = 0.e0 + cca = 0.e0 + cab = 0.e0 + else: + logger.error("celldm2abc: unknown ibrav ") + return (a,b,c,cbc, cca, cab) + +def qe_at2abc(at_, ibrav_, abc_is_primitive_ = False): + celldm_ = at2celldm(at_, ibrav_) + return celldm2abc(celldm_, ibrav_, abc_is_primitive_) + + + +class lattice: + def __init__(self, vectors = None, abc = None, abc_is_primitive = False, + bravais_index = None, alt_axes = None, celldm = None, alat_ = None): + self.bravais_index = bravais_index + self.alt_axes = alt_axes + self.cell = self.__init_vectors(vectors, abc, abc_is_primitive, celldm) + self.ibrav, self.celldm = self.get_ibrav_celldm() + abc_ = self.get_primitive_abc(abc, abc_is_primitive) + self.primitive_abc = dict (zip(("a","b","c","cosBC","cosCA","cosAB"),abc_)) + abc_ = self.get_conventional_abc() + self.conventional_abc = dict(zip(("a","b","c","cosBC","cosCA","cosAB"), abc_)) + self.alt_axes = alt_axes + + def __init_vectors(self, vectors = None, abc = None, abc_is_primitive = False, celldm = None): + ibrav_ = qe_ibrav(self.bravais_index, self.alt_axes) + if vectors: + cellvec = np.asarray(vectors) + elif abc: + cellvec = qe_abc2at(abc, abc_is_primitive, ibrav_) + elif celldm: + cellvec = latgen(ibrav_, celldm) + else: + logger.error("lattice initialization failed") + return cellvec + + def get_ibrav_celldm(self, alat_ = None): + ibrav_ = qe_ibrav(self.bravais_index, self.alt_axes) + celldm = at2celldm(self.cell, ibrav_) + return ibrav_, celldm + + def get_primitive_abc(self, abc = None, abc_is_primitive = False): + if abc: + if (np.round(self.cell - qe_abc2at(abc, self.ibrav, abc_is_primitive), 5) != 0.0).any(): + logger.error("abc parameters in input do not match with expected cell vectors") + a = round(np.sqrt(self.cell[0].dot(self.cell[0])),5) + b = round(np.sqrt(self.cell[1].dot(self.cell[1])),5) + c = round(np.sqrt(self.cell[1].dot(self.cell[1])),5) + bc = round(self.cell[1].dot(self.cell[2])/b/c, 5) + ca = round(self.cell[2].dot(self.cell[0])/c/a, 5) + ab = round(self.cell[0].dot(self.cell[1])/a/b, 5) + return a, b, c, bc, ca, ab + + def get_conventional_abc(self): + abc = qe_at2abc(self.cell, self.ibrav) + return abc + + + + + + + + + + + diff --git a/qeschema/options.py b/qeschema/options.py index e27f45b..76e6b65 100644 --- a/qeschema/options.py +++ b/qeschema/options.py @@ -14,6 +14,7 @@ from .exceptions import XmlDocumentError from .utils import to_fortran +from .lattice_utils import lattice logger = logging.getLogger('qeschema') @@ -123,7 +124,42 @@ def get_system_nspin(name, **kwargs): def set_ibrav_to_zero(name, **_kwargs): assert isinstance(name, str) line = ' ibrav=0' - return [line] + alat_ = _kwargs['atomic_structure'].get('@alat', None) + if alat_: + line2 = f" celldm(1) = {alat_:10.6f}" + return [line,line2] + else: + return [line] + + + +def get_ibrav(name, **kwargs): + assert isinstance((name), str) + try: + atomic_structure = kwargs['atomic_structure'] + cell = atomic_structure['cell'] + except KeyError: + logger.error("Missing required arguments when computing ibrav value") + return [] + bravais_index_ = atomic_structure.get('@bravais_index',None) + alternative_axes_=atomic_structure.get('@alternative_axes',None) + alat_ = atomic_structure.get('@alat',None) + if bravais_index_ is None: + return set_ibrav_to_zero(name, **kwargs) + qe_lattice = lattice(vectors=[cell['a1'],cell['a2'],cell['a3']], bravais_index=bravais_index_, + alt_axes=alternative_axes_) + ibrav_ = qe_lattice.ibrav + abc = tuple((round(_,6) for _ in qe_lattice.conventional_abc.values())) + return [ + f" ibrav = {ibrav_}", + f" A = {abc[0]:9.6f}", + f" B = {abc[1]:9.6f}", + f" C = {abc[2]:9.6f}", + f" COSAB = {abc[5]:9.6f}", + f"COSBC = {abc[3]:9.6f}", + f"COSAC = {abc[4]:9.6f}" + ] + diff --git a/tests/examples/pw/Fe_noncolin.in.test b/tests/examples/pw/Fe_noncolin.in.test index 4120fe1..ba82276 100644 --- a/tests/examples/pw/Fe_noncolin.in.test +++ b/tests/examples/pw/Fe_noncolin.in.test @@ -21,7 +21,13 @@ ecutrho=200.0 ecutwfc=25.0 force_symmorphic=.false. - ibrav=0 + ibrav = 3 + A = 0.458280, + B = 0.458280, + C = 0.458280, + COSAB = 0.33333, + COSBC = -0.33333, + COSAC = 0.33333, input_dft='PZ' lspinorb=.false. nat=1 @@ -81,7 +87,4 @@ K_POINTS 0.0625 0.1875 0.1875 3.0 0.0625 0.1875 0.3125 6.0 0.0625 0.1875 0.4375 6.0 -CELL_PARAMETERS bohr - 2.60850000 2.60850000 2.60850000 - -2.60850000 2.60850000 2.60850000 - -2.60850000 -2.60850000 2.60850000 + From cfa6407bc36c4229bc7ff13faf4d995feb7c39e1 Mon Sep 17 00:00:00 2001 From: Pietro Delugas Date: Tue, 31 Aug 2021 15:58:34 +0200 Subject: [PATCH 2/2] first version of the lattice utilities --- qeschema/options.py | 4 +- tests/examples/pw/Fe_noncolin.in.test | 13 ++- tests/examples/pw/Ni.xml | 123 +++++++++++++------------- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/qeschema/options.py b/qeschema/options.py index 76e6b65..40b90b6 100644 --- a/qeschema/options.py +++ b/qeschema/options.py @@ -156,8 +156,8 @@ def get_ibrav(name, **kwargs): f" B = {abc[1]:9.6f}", f" C = {abc[2]:9.6f}", f" COSAB = {abc[5]:9.6f}", - f"COSBC = {abc[3]:9.6f}", - f"COSAC = {abc[4]:9.6f}" + f" COSBC = {abc[3]:9.6f}", + f" COSAC = {abc[4]:9.6f}" ] diff --git a/tests/examples/pw/Fe_noncolin.in.test b/tests/examples/pw/Fe_noncolin.in.test index ba82276..b496d7c 100644 --- a/tests/examples/pw/Fe_noncolin.in.test +++ b/tests/examples/pw/Fe_noncolin.in.test @@ -22,12 +22,12 @@ ecutwfc=25.0 force_symmorphic=.false. ibrav = 3 - A = 0.458280, - B = 0.458280, - C = 0.458280, - COSAB = 0.33333, - COSBC = -0.33333, - COSAC = 0.33333, + A = 2.760718 + B = 2.760718 + C = 2.760718 + COSAB = 0.000000 + COSBC = 0.000000 + COSAC = 0.000000 input_dft='PZ' lspinorb=.false. nat=1 @@ -87,4 +87,3 @@ K_POINTS 0.0625 0.1875 0.1875 3.0 0.0625 0.1875 0.3125 6.0 0.0625 0.1875 0.4375 6.0 - diff --git a/tests/examples/pw/Ni.xml b/tests/examples/pw/Ni.xml index 2d97992..50f06ae 100644 --- a/tests/examples/pw/Ni.xml +++ b/tests/examples/pw/Ni.xml @@ -153,7 +153,7 @@ 0.0000000000000000E+00 - + 1 1 1 1 1 1 1 1 1 @@ -171,6 +171,7 @@ + true 13 @@ -227,7 +228,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -241,7 +242,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -255,7 +256,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -269,7 +270,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -283,7 +284,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -297,7 +298,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -311,7 +312,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -325,7 +326,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -339,7 +340,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -353,7 +354,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -367,7 +368,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -381,7 +382,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -395,7 +396,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -409,7 +410,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -423,7 +424,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -437,7 +438,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -451,7 +452,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -465,7 +466,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -479,7 +480,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -493,7 +494,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -507,7 +508,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -521,7 +522,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -535,7 +536,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -549,7 +550,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -563,7 +564,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -577,7 +578,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -591,7 +592,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -605,7 +606,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -619,7 +620,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -633,7 +634,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -647,7 +648,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -661,7 +662,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -675,7 +676,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -689,7 +690,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -703,7 +704,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -717,7 +718,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -731,7 +732,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -745,7 +746,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -759,7 +760,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -773,7 +774,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -787,7 +788,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -801,7 +802,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -815,7 +816,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -829,7 +830,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -843,7 +844,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -857,7 +858,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -871,7 +872,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -885,7 +886,7 @@ 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - + 1 @@ -997,13 +998,13 @@ 320 - + 0.2239208167485215E+00 0.5963424759621956E+00 0.6080711994749779E+00 0.6080711994749779E+00 0.6814710645952964E+00 0.6814710645952964E+00 0.1247700124051794E+01 0.1427610027430446E+01 0.1427610028464290E+01 0.2239208201421337E+00 0.5963425306866970E+00 0.6080712612701358E+00 0.6080712612701358E+00 0.6814711248211411E+00 0.6814711248211411E+00 0.1247700142926585E+01 0.1427610039436862E+01 0.1427610040137971E+01 - + 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000008E+01 0.1000000000000008E+01 -0.1986509392945334E-85 -0.2688859669326466E-85 -0.2688859673362490E-85 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000008E+01 0.1000000000000008E+01 @@ -1017,13 +1018,13 @@ 314 - + 0.3985284434006500E+00 0.5448198533903976E+00 0.6020421798426696E+00 0.6493046170646570E+00 0.7431904430577059E+00 0.7612139309088251E+00 0.9252977912613303E+00 0.1155389262161396E+01 0.1335988412370023E+01 0.3985284534296145E+00 0.5448198847128399E+00 0.6020422283027729E+00 0.6493046704018990E+00 0.7431905074638967E+00 0.7612139979160308E+00 0.9252978266083906E+00 0.1155389284335717E+01 0.1335988425621271E+01 - + 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1680992081835646E+00 -0.3459966163007689E-02 -0.7278829177550114E-86 -0.1626137016860813E-85 -0.2331178043959036E-85 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1680952620171499E+00 -0.3459877170599911E-02 @@ -1037,13 +1038,13 @@ 313 - + 0.3202391224532793E+00 0.5621618411596567E+00 0.6289602828510987E+00 0.6659090246049939E+00 0.6977907944492208E+00 0.7376985154613600E+00 0.1073022913094318E+01 0.1254231606663006E+01 0.1320808887736544E+01 0.3202391271623845E+00 0.5621618880512051E+00 0.6289603315195229E+00 0.6659090808108041E+00 0.6977908555579975E+00 0.7376985807527339E+00 0.1073022936678288E+01 0.1254231622146490E+01 0.1320808906055958E+01 - + 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000052147780E+01 0.5965355833855738E+00 -0.1304587024640475E-85 -0.2012007648077561E-85 -0.2271918697355865E-85 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000052150309E+01 0.5965301783512247E+00 @@ -1057,13 +1058,13 @@ 318 - + 0.4599944652932631E+00 0.5218816362207788E+00 0.5805867825766329E+00 0.6974589248558196E+00 0.7289741728225831E+00 0.7898295747975774E+00 0.9102182778707910E+00 0.1044735278982478E+01 0.1103644551659136E+01 0.4599944830476383E+00 0.5218816791100147E+00 0.5805868129142988E+00 0.6974589856556579E+00 0.7289742463444142E+00 0.7898296364420161E+00 0.9102182935850471E+00 0.1044735310120851E+01 0.1103644562026910E+01 - + 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000040023764E+01 0.1023763337345748E+01 -0.7129711753624212E-11 -0.6690140050457015E-86 -0.1194154929110948E-85 -0.1424130840213414E-85 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000040025712E+01 0.1023762515541942E+01 -0.7129272913797558E-11 @@ -1077,13 +1078,13 @@ 312 - + 0.5136824055510720E+00 0.5243629088117925E+00 0.5719872182487535E+00 0.6681183403727151E+00 0.7362068896192324E+00 0.8526839146971126E+00 0.8689561495414011E+00 0.1036992127209182E+01 0.1139394601831626E+01 0.5136824297478841E+00 0.5243629290469136E+00 0.5719872584683046E+00 0.6681183923894014E+00 0.7362069603296857E+00 0.8526839542717941E+00 0.8689561972471893E+00 0.1036992152991270E+01 0.1139394630139027E+01 - + 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.7150694480642331E+00 -0.1676386294596504E-55 -0.1105969234782653E-72 -0.1163926438706007E-85 -0.1563695461992136E-85 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.7150641264638520E+00 -0.1676235849492259E-55 @@ -1097,13 +1098,13 @@ 332 - + 0.4073293757579241E+00 0.5274701442476686E+00 0.5845201277080103E+00 0.5845201277080112E+00 0.6801131583809592E+00 0.6801131583809612E+00 0.8266527814415654E+00 0.1317871980458169E+01 0.1317871980813663E+01 0.4073293996758013E+00 0.5274701473980120E+00 0.5845201840972557E+00 0.5845201840972557E+00 0.6801132337140158E+00 0.6801132337140190E+00 0.8266528340314775E+00 0.1317871987925802E+01 0.1317871990110902E+01 - + 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000002E+01 0.1000000000000002E+01 -0.8040093252805523E-33 -0.2260453304957031E-85 -0.2260453306344847E-85 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000000E+01 0.1000000000000002E+01 0.1000000000000002E+01