diff --git a/doc/documentation.rst b/doc/documentation.rst index 7aa3fa79..371ff512 100644 --- a/doc/documentation.rst +++ b/doc/documentation.rst @@ -34,6 +34,16 @@ DFT+DMFT guide/dftdmft_singleshot guide/dftdmft_selfcons +Advanced Topics +--------------- + +.. toctree:: + :maxdepth: 2 + + guide/blockstructure + guide/BasisRotation + guide/soc + Postprocessing -------------- diff --git a/doc/guide/BasisRotation.rst b/doc/guide/BasisRotation.rst new file mode 100644 index 00000000..b0df7fc4 --- /dev/null +++ b/doc/guide/BasisRotation.rst @@ -0,0 +1,82 @@ +.. _basisrotation: + +Automatic basis rotations in DFT+DMFT +===================================== + +When performing calculations with off-diagonal terms in the hybridisation function or in the local Hamiltonian, one is +often limited by the fermionic sign-problem slowing down the QMC calculations significantly. This can occur for instance if the crystal shows locally rotated or distorted cages, or when spin-orbit coupling is included. The examples for this are included in the :ref:`tutorials` of this documentation. + +However, as the fermonic sign in the QMC calculation is no +physical observable, one can try to improve the calculation by rotating +to another basis. While this basis can in principle be chosen arbitrarily, +two choices which have shown good results; name the basis sets that diagonalize the local Hamiltonian or the local density matrix of the +system. + +As outlined in section :ref:`blockstructure`, the :class:`BlockStructure` includes all necessary functionalities. While it is possible to manually transform each Green's functions and self energies between the *sumk* and the *solver* basis, this leads to cumbersum code and is discouraged. Instead, in order to facilitate the block-structure manipulations for an actual DFT+DMFT calculation, some of the necessary steps are automatically included automatically. As soon as the +transformation matrix is stored in the :class:`BlockStructure`, the +transformation is automatically performed when using :class:`SumkDFT`'s :meth:`extract_G_loc`, +:meth:`put_Sigma`, and :meth:`calc_dc` (see below). + +Setting up the initial solver structure from DFT +------------------------------------------------ + +Before the actual calculation one has to specify the *solver* basis structure, in which the impurity problem will be tackled. The different available approximation were introduced in section :ref:`blockstructure`. An important feature of DFTTools is that there is an automatic way to determine the entries of the Green's function matrix that are zero by symmetry, when initialising the class:: + + from triqs_dft_tools.sumk_dft import * + SK = SumkDFT(hdf_file,use_dft_blocks='True') + +The flag *use_dft_blocks=True* analysis the local density matrix, determines the zero entries, and sets up a minimal *solver* structure. Alternatively, this step can be achieved by (see the reference manual for options):: + + SK.analyse_block_structure() + + +Finding the transformation matrix +--------------------------------- + +The SumkDFT class offers a method that can determine transformation matrices to certain new basis. It is called as follows:: + + SK.calculate_diagonalization_matrix(prop_to_be_diagonal='eal') + +Possible option for *prop_to_be_diagonal* are *eal* (diagonalises the local hamiltonian) or *dm* (diagonalises the local density matrix). This routine stores the transformation matrix in the :class:`SK.block_structure` class, such that it can be used to rotate the basis. + + + +Automatic transformation during the DMFT loop +--------------------------------------------- + +During a DMFT loop one is often switching back and forth between the unrotated basis (Sumk-Space) and the rotated basis that is used by the QMC Solver. +Once the SK.block_structure.transformation property is set as shown above, this is +done automatically, meaning that :class:`SumkDFT`'s :meth:`extract_G_loc`, :meth:`put_Sigma`, and :meth:`calc_dc` are doing the transformations by default:: + + for it in range(iteration_offset, iteration_offset + n_iterations): + # every GF is in solver space here + S.G0_iw << inverse(S.Sigma_iw + inverse(S.G_iw)) + + # solve the impurity in solver space -> hopefully better sign + S.solve(h_int = H, **p) + + # calc_dc(..., transform = True) by default + SK.calc_dc(S.G_iw.density(), U_interact=U, J_hund=J, orb=0, use_dc_formula=DC_type) + + # put_Sigma(..., transform_to_sumk_blocks = True) by default + SK.put_Sigma([S.Sigma_iw]) + + SK.calc_mu() + + # extract_G_loc(..., transform_to_solver_blocks = True) by default + S.G_iw << SK.extract_G_loc()[0] + +.. warning:: + Before doing the DMFT self-consistency loop, one must not forget to also transform the + interaction Hamiltonian to the diagonal basis! + This can be also be done with a method of the :class:`BlockStructure` class, + namely the :meth:`convert_operator` method. Having set up a Hamiltonian in the *sumk* structure, it can easily + be transformed to the *solver* structure (including rotations of basis, picking of orbitals, + making matrices diagonal, etc) by:: + + H_solver = SK.block_structure.convert_operator(H_sumk) + + We refer to the tutorials on how to set up the Hamiltonian H_sumk in selected cases. + Note that this transformation might generally lead to complex values in the + interaction Hamiltonian. Unless you know better and can make everything real, + you should take care of using the correct version of the TRIQS CTQMC solver. \ No newline at end of file diff --git a/doc/guide/Sr2MgOsO6/Sr2MgOsO6.indmftpr b/doc/guide/Sr2MgOsO6/Sr2MgOsO6.indmftpr new file mode 100644 index 00000000..ed0a6b56 --- /dev/null +++ b/doc/guide/Sr2MgOsO6/Sr2MgOsO6.indmftpr @@ -0,0 +1,21 @@ +5 ! Nsort +2 1 1 4 2 ! Mult(Nsort) +3 ! lmax +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +cubic ! choice of angular harmonics +0 0 2 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +0 ! SO flag +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex +0 0 0 0 +0 0 0 0 +-0.088 0.43 ! 0.40 gives warnings, 0.043 gives occ 1.996 +0.04301 diff --git a/doc/guide/Sr2MgOsO6/Sr2MgOsO6.struct b/doc/guide/Sr2MgOsO6/Sr2MgOsO6.struct new file mode 100644 index 00000000..2078143b --- /dev/null +++ b/doc/guide/Sr2MgOsO6/Sr2MgOsO6.struct @@ -0,0 +1,72 @@ +Sr2MgOsO6 s-o calc. M|| 0.00 0.00 1.00 +B 5 87 + RELA + 10.507954 10.507954 14.968880 90.000000 90.000000 90.000000 +ATOM -1: X=0.00000000 Y=0.50000000 Z=0.75000000 + MULT= 2 ISPLIT=-2 + -1: X=0.50000000 Y=0.00000000 Z=0.75000000 +Sr 2+ NPT= 781 R0=.000010000 RMT= 2.50000 Z: 38.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -2: X=0.00000000 Y=0.00000000 Z=0.00000000 + MULT= 1 ISPLIT=-2 +Os 6+ NPT= 781 R0=.000005000 RMT= 1.94 Z: 76.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -3: X=0.00000000 Y=0.00000000 Z=0.50000000 + MULT= 1 ISPLIT=-2 +Mg 2+ NPT= 781 R0=.000100000 RMT= 1.89 Z: 12.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -4: X=0.74270000 Y=0.21790000 Z=0.00000000 + MULT= 4 ISPLIT= 8 + -4: X=0.25730000 Y=0.78210000 Z=0.00000000 + -4: X=0.21790000 Y=0.25730000 Z=0.00000000 + -4: X=0.78210000 Y=0.74270000 Z=0.00000000 +O 2- NPT= 781 R0=.000100000 RMT= 1.58 Z: 8.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -5: X=0.00000000 Y=0.00000000 Z=0.75390000 + MULT= 2 ISPLIT=-2 + -5: X=0.00000000 Y=0.00000000 Z=0.24610000 +O 2- NPT= 781 R0=.000100000 RMT= 1.58 Z: 8.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 + 8 NUMBER OF SYMMETRY OPERATIONS + 0-1 0 0.00000000 + 1 0 0 0.00000000 + 0 0-1 0.00000000 + 1 +-1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0-1 0.00000000 + 2 + 1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0-1 0.00000000 + 3 + 0-1 0 0.00000000 + 1 0 0 0.00000000 + 0 0 1 0.00000000 + 4 + 0 1 0 0.00000000 +-1 0 0 0.00000000 + 0 0-1 0.00000000 + 5 +-1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0 1 0.00000000 + 6 + 1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0 1 0.00000000 + 7 + 0 1 0 0.00000000 +-1 0 0 0.00000000 + 0 0 1 0.00000000 + 8 diff --git a/doc/guide/Sr2MgOsO6/Sr2MgOsO6_SOC.indmftpr b/doc/guide/Sr2MgOsO6/Sr2MgOsO6_SOC.indmftpr new file mode 100644 index 00000000..253cda1a --- /dev/null +++ b/doc/guide/Sr2MgOsO6/Sr2MgOsO6_SOC.indmftpr @@ -0,0 +1,21 @@ +5 ! Nsort +2 1 1 4 2 ! Mult(Nsort) +3 ! lmax +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +cubic ! choice of angular harmonics +0 0 2 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +1 ! SO flag +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex +0 0 0 0 +0 0 0 0 +-0.088 0.43 ! 0.40 gives warnings, 0.043 gives occ 1.996 +0.04301 diff --git a/doc/guide/Sr2RuO4/Sr2RuO4.indmftpr b/doc/guide/Sr2RuO4/Sr2RuO4.indmftpr new file mode 100644 index 00000000..fa8e6be5 --- /dev/null +++ b/doc/guide/Sr2RuO4/Sr2RuO4.indmftpr @@ -0,0 +1,17 @@ +4 ! Nsort +2 1 2 2 ! Multiplicities +3 ! lmax +complex ! Sr +0 0 0 0 +0 0 0 0 +cubic ! Ru +0 0 2 0 ! include d-shell as correlated +0 0 0 0 ! there are no irreps with SO +1 ! SO-flag +complex ! O1 +0 0 0 0 +0 0 0 0 +complex ! O2 +0 0 0 0 +0 0 0 0 +-0.7 1.4 ! energy window (Ry) diff --git a/doc/guide/Sr2RuO4/Sr2RuO4.struct b/doc/guide/Sr2RuO4/Sr2RuO4.struct new file mode 100644 index 00000000..5cfd9a0d --- /dev/null +++ b/doc/guide/Sr2RuO4/Sr2RuO4.struct @@ -0,0 +1,96 @@ +Sr2RuO4 s-o calc. M|| 0.00 0.00 1.00 +B 4 39_I + RELA + 7.300012 7.300012 24.044875 90.000000 90.000000 90.000000 +ATOM -1: X=0.00000000 Y=0.00000000 Z=0.35240000 + MULT= 2 ISPLIT=-2 + -1: X=0.00000000 Y=0.00000000 Z=0.64760000 +Sr2+ NPT= 781 R0=.000010000 RMT= 2.26000 Z: 38.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -2: X=0.00000000 Y=0.00000000 Z=0.00000000 + MULT= 1 ISPLIT=-2 +Ru4+ NPT= 781 R0=.000010000 RMT= 1.95000 Z: 44.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -3: X=0.50000000 Y=0.00000000 Z=0.00000000 + MULT= 2 ISPLIT= 8 + -3: X=0.00000000 Y=0.50000000 Z=0.00000000 +O 2- NPT= 781 R0=.000100000 RMT= 1.68000 Z: 8.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -4: X=0.00000000 Y=0.00000000 Z=0.16350000 + MULT= 2 ISPLIT=-2 + -4: X=0.00000000 Y=0.00000000 Z=0.83650000 +O 2- NPT= 781 R0=.000100000 RMT= 1.68000 Z: 8.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 + 16 NUMBER OF SYMMETRY OPERATIONS + 0-1 0 0.00000000 + 1 0 0 0.00000000 + 0 0-1 0.00000000 + 1 A 2 so. oper. type orig. index +-1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0-1 0.00000000 + 2 A 3 + 1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0-1 0.00000000 + 3 A 6 + 0-1 0 0.00000000 + 1 0 0 0.00000000 + 0 0 1 0.00000000 + 4 A 8 + 0 1 0 0.00000000 +-1 0 0 0.00000000 + 0 0-1 0.00000000 + 5 A 9 +-1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0 1 0.00000000 + 6 A 11 + 1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0 1 0.00000000 + 7 A 14 + 0 1 0 0.00000000 +-1 0 0 0.00000000 + 0 0 1 0.00000000 + 8 A 15 + 1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0-1 0.00000000 + 9 B 1 + 0 1 0 0.00000000 + 1 0 0 0.00000000 + 0 0-1 0.00000000 + 10 B 4 + 0-1 0 0.00000000 +-1 0 0 0.00000000 + 0 0-1 0.00000000 + 11 B 5 + 1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0 1 0.00000000 + 12 B 7 +-1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0-1 0.00000000 + 13 B 10 + 0 1 0 0.00000000 + 1 0 0 0.00000000 + 0 0 1 0.00000000 + 14 B 12 + 0-1 0 0.00000000 +-1 0 0 0.00000000 + 0 0 1 0.00000000 + 15 B 13 +-1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0 1 0.00000000 + 16 B 16 diff --git a/doc/guide/Sr2RuO4/calculate_dos_wannier_basis.py b/doc/guide/Sr2RuO4/calculate_dos_wannier_basis.py new file mode 100644 index 00000000..7cb8462a --- /dev/null +++ b/doc/guide/Sr2RuO4/calculate_dos_wannier_basis.py @@ -0,0 +1,15 @@ +from triqs_dft_tools.converters.wien2k_converter import Wien2kConverter +from triqs_dft_tools import SumkDFTTools + +filename = 'Sr2RuO4' + +conv = Wien2kConverter(filename = filename,hdf_filename=filename+'.h5') +conv.convert_dft_input() + +SK = SumkDFTTools(filename+'.h5') +mesh = (-10.0,10.0,500) +SK.dos_wannier_basis(broadening=(mesh[1]-mesh[0])/float(mesh[2]), + mesh=mesh, + save_to_file=True, + with_Sigma=False, + with_dc=False) diff --git a/doc/guide/blockstructure.rst b/doc/guide/blockstructure.rst new file mode 100644 index 00000000..2f51d937 --- /dev/null +++ b/doc/guide/blockstructure.rst @@ -0,0 +1,131 @@ +.. _blockstructure: + +Manipulating the Green's functions block structure +================================================== + +The DFTTools package includes the general :class:`BlockStructure ` class for manipulating the blocks of Green's functions (see also the TRIQS documentation on BlockGF). In the following, we will introduce its basic and most commonly used functionalities that might show up in an actual DFT+DMFT calculation, and will illustrate them on a very basic fictitious problem. + +The main idea is to have two structures for the Greens functions available. The first one is used in the procedures of the :class:`SumkDFT ` to calculate Dysons equations, lattice Greens functions, and so on, and is normally a full matrix. For instance, in a calculation using :math:`t_{2g}` orbitals without spin-orbit-coupling, you have an spin-up block of size 3x3 and a spin-down block of the same size. In the following, wee will refer to this structure as *sumk* structure. + +The second structure, called *solver* structure, is the one which is used for the solution of the Anderson impurity problem. As a matter of fact, in particular in combination with quantum Monte Carlo techniques, it is advisable to use as small blocks as possible in order to run into numerical problems. In particular, it should contain information about the symmetry of the local problem. + +Creating a block structure and Green's function +----------------------------------------------- + +For the purpose of this documentation, we focus on an example of a 3x3 Green's function, consisting of a 1x1 block and a 2x2 block (with off-diagonal coupling). This is reminiscent of a :math:`t_{2g}` manifold. Note that this initialisation is normally done automatically by DFTTools, we do it here manually for demonstration purposes only. + +We can create a simple :class:`BlockStructure ` object as follows:: + + from triqs_dft_tools import BlockStructure + BS = BlockStructure.full_structure([{'up':[0,1,2]}], None) + +This creates a block structure with one 3x3 block named *up*. Note that we have not created any Green's function yet; this is just the structure of those objects. If you want to create a Green's function with this structure, you can do (we will if with some content also):: + + from triqs.gf import * + GF_sumk = BS.create_gf(space='sumk', beta = 40, n_points = 1000) + GF_sumk['up'][0,0] << iOmega_n - 2.0 + GF_sumk['up'][1,1] << iOmega_n + 0.5 + GF_sumk['up'][2,2] << iOmega_n + 0.5 + GF_sumk['up'][1,2] << 0.1 + GF_sumk['up'][2,1] << 0.1 + GF_sumk['up'] << inverse(GF_sumk['up']) + +Technically, we use the *sumk* block structure for this Green's function. However, at this point, sumk and solver structure are still the same. + +A plot of this structure looks like this. Note that there are off-diagonal elements which are exactly zero by construction. + +.. image:: images_scripts/BS_GFsumk.png + :width: 600 + :align: center + +The *solver* structure +---------------------- + +The method:`BlockStructure.full_structure()` method, as we used it above to create our BlockStructure object, yields - as the name suggests - a full structure, where *sumk* and *solver* structure are identical. Now we want to take advantage of the symmetries of the problem to reduce the *solver* block structure to the relevant matrix elements only. In our case the [0,0] matrix element of the Green's function is completely decoupled from the 2x2 matrix of [1:2,1:2] elements. We simplify the *solver* structure by setting the mapping of each orbital to its target block and orbital:: + + BS.map_gf_struct_solver([{('up',0):('up_0',0), ('up',1):('up_1',0), ('up',2):('up_1',1)}]) + +This creates a *solver* structure different from the *sumk* structure. To see the result, let us look at the Green's function in the *solver* structure now:: + + GF_solver = BS.convert_gf(GF_sumk, space_from='sumk', space_to='solver') + +This converts the GF_sumk into GF_solver, which looks like this. + +.. image:: images_scripts/BS_GF_up_0.png + :width: 200 + :align: center + +.. image:: images_scripts/BS_GF_up_1.png + :width: 400 + :align: center + +As you can see, the Green's function in the *solver* structure now consists of two blocks: one 1x1 block (called *up_0*) and one 2x2 block (called *up_1*). This is no approximation, as the off-diagonal elements between these blocks are exactly zero anyway. + +Picking orbitals +---------------- + +In some cases it might happen that for the projection to localised orbitals a full *d* or *f*-shell has to be used. However, for the Anderson impurity problem, just a subset of the orbitals are needed. This is the case, e.g., when the projection leads to completely empty or full orbitals that you don't want to include in the AIM. + +For the example here, the local energy of the *up_0* block (2 eV) is higher than that of the *up_1* block (0.4 and 0.6 eV). Assuming that the chemical potential lies somewhere in the range of the *up_1* block, we might restrict our calculation to only this *up_1* block. The :class:`BlockStructure ` class includes methods to pick a subset or orbitals:: + + BS.pick_gf_struct_solver([{'up_1':[0,1]}]) + GF2 = BS.convert_gf(GF_sumk, space_from='sumk', space_to='solver') + +Now the Green's function GF2 consists of only one 2x2 block, called *up_1*, as we have left out the *up_0* block. + +Basis rotations +--------------- + +In cases where the Greens function or the local Hamiltonian shows off diagonal entries in the chosen basis, it is often beneficial to rotate to a different basis. This is of particular interest when using a QMC solver, since off-diagonal contributions lead to a famous fermionic sign problem. The :class:`BlockStructure ` class includes methods to perform such basis rotations. + +In our example, the local Hamiltonian is given by + +.. math:: + + \varepsilon_{mm'} = \begin{pmatrix} 2.0 & 0.0 & 0.0 \\0.0 & -0.5 & -0.1\\0.0 & -0.1 & -0.5 \end{pmatrix} + +It is easy to check that the following matrix diagonalises this local Hamiltonian: + +.. math:: + + T_{mm'} = \begin{pmatrix} 1.0 & 0.0 & 0.0 \\0.0 & 1/\sqrt{2} & -1/\sqrt{2}\\0.0 & 1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix} + +With this unitary matrix, we can do a basis rotation to reduce the size of the off-diagonal matrix elements. Note that the transformation matrix has to be given in the *sumk* basis form (a 3x3 matrix in this case):: + + import numpy as np + # Unitary transformation matrix + T = np.array([[1,0,0],[0,1./np.sqrt(2),-1./np.sqrt(2)],[0,1./np.sqrt(2),1./np.sqrt(2)]]) + + BS.transformation = [T] + GF3 = BS.convert_gf(GF_sumk, space_from='sumk', space_to='solver') + +.. image:: images_scripts/BS_GF_up_1_rotated.png + :width: 400 + :align: center + +As you can see, the offdiagonal elements are reduced to 1e-16 in this basis. Please note that our example is not the most generic case. Normally, due to non-local hybridisation, the off-diagonals can be made smaller, but not exactly zero. + +Diagonal approximation +---------------------- + +As said above, off diagonal contributions lead to some troubles. However, +when you are exactly sure that you know what you are doing, there is functionality to take only the diagonal parts into account in the block structure. Be careful, there is no automatic check whether this approximation is justified or not! + +Starting from the rotated basis as done above, we can get rid of the off-diagonals as follows:: + + BS.approximate_as_diagonal() + GF4 = BS.convert_gf(GF_sumk, space_from='sumk', space_to='solver') + +The Green's function GF4 consists now only of two 1x1 blocks, where *up_1* was the [0,0] element of the former 2x2 block, and *up_2* was the [1,1] element: + +.. image:: images_scripts/BS_GF_up_1_rotated_diag.png + :width: 200 + :align: center + +.. image:: images_scripts/BS_GF_up_2_rotated_diag.png + :width: 200 + :align: center + +In summary, we started with a full 3x3 matrix in the very beginning, and ended with two 1x1 blocks containing the relevant matrix elements for the calculation. + + diff --git a/doc/guide/conv_W90.rst b/doc/guide/conv_W90.rst index fdc9a5f1..a44704a6 100644 --- a/doc/guide/conv_W90.rst +++ b/doc/guide/conv_W90.rst @@ -84,6 +84,8 @@ In our `Pnma`-LaVO\ :sub:`3` example, for instance, we could use:: where the ``x=-1,1,0`` option indicates that the V--O bonds in the octahedra are rotated by (approximatively) 45 degrees with respect to the axes of the `Pbnm` cell. +The last line of :file:`seedname.inp` is the DFT Fermi energy (in eV), which is subtracted from the onsite terms in the :file:`seedname_hr.dat` file. This is recommended since some functions in DFTTools implicitly assume a Fermi energy of 0 eV. + The converter will analyse the matrix elements of the local Hamiltonian to find the symmetry matrices `rot_mat` needed for the global-to-local transformation of the basis set for correlated orbitals diff --git a/doc/guide/images_scripts/BS_GF_up_0.png b/doc/guide/images_scripts/BS_GF_up_0.png new file mode 100644 index 00000000..b1c329b4 Binary files /dev/null and b/doc/guide/images_scripts/BS_GF_up_0.png differ diff --git a/doc/guide/images_scripts/BS_GF_up_1.png b/doc/guide/images_scripts/BS_GF_up_1.png new file mode 100644 index 00000000..db6a77e5 Binary files /dev/null and b/doc/guide/images_scripts/BS_GF_up_1.png differ diff --git a/doc/guide/images_scripts/BS_GF_up_1_rotated.png b/doc/guide/images_scripts/BS_GF_up_1_rotated.png new file mode 100644 index 00000000..3445c99c Binary files /dev/null and b/doc/guide/images_scripts/BS_GF_up_1_rotated.png differ diff --git a/doc/guide/images_scripts/BS_GF_up_1_rotated_diag.png b/doc/guide/images_scripts/BS_GF_up_1_rotated_diag.png new file mode 100644 index 00000000..8bb447ad Binary files /dev/null and b/doc/guide/images_scripts/BS_GF_up_1_rotated_diag.png differ diff --git a/doc/guide/images_scripts/BS_GF_up_2_rotated_diag.png b/doc/guide/images_scripts/BS_GF_up_2_rotated_diag.png new file mode 100644 index 00000000..4b676f10 Binary files /dev/null and b/doc/guide/images_scripts/BS_GF_up_2_rotated_diag.png differ diff --git a/doc/guide/images_scripts/BS_GFsumk.png b/doc/guide/images_scripts/BS_GFsumk.png new file mode 100644 index 00000000..3dd57801 Binary files /dev/null and b/doc/guide/images_scripts/BS_GFsumk.png differ diff --git a/doc/guide/images_scripts/LaVO3_w90.inp b/doc/guide/images_scripts/LaVO3_w90.inp index 2cc1c08d..0999cee9 100644 --- a/doc/guide/images_scripts/LaVO3_w90.inp +++ b/doc/guide/images_scripts/LaVO3_w90.inp @@ -5,3 +5,4 @@ 1 0 2 3 0 0 # atom, sort, l, dim, SO, irep 2 0 2 3 0 0 # atom, sort, l, dim, SO, irep 3 0 2 3 0 0 # atom, sort, l, dim, SO, irep +0.0 # DFT Fermi Energy (optional) diff --git a/doc/guide/soc.rst b/doc/guide/soc.rst new file mode 100644 index 00000000..47356af6 --- /dev/null +++ b/doc/guide/soc.rst @@ -0,0 +1,43 @@ +.. _soc: + +Spin-orbit coupled calculations (single-shot) +============================================= + +There are two main ways of including the spin-orbit coupling (SOC) term into +DFT+DMFT calculations: + +- by performing a DFT calculation including SOC and then doing a DMFT calculation on top, or +- by performing a DFT calculation without SOC and then adding the SOC term on the model level. + +The second variant is a bit more involved and needs quite some expertise, so this guide will cover only the first variant with SOC included in the DFT calculations. + +Treatment of SOC in DFT +----------------------- + +For now, TRIQS/DFTTools does only work with Wien2k when performing calculations with SO. +The treatment of SOC in the VASP package is fundamentally different to the way Wien2k treats it, and the interface does not handle that at the moment. +Therefore, this guide describes how to do an SOC calculation using the Wien2k DFT package. + +First, a Wien2k calculation including SOC has to be performed. +For details, we refer the reader to the `documentation of Wien2k `_ . As a matter of fact, we need the output for the DFT band structure for both spin directions explicitly. That means that one needs to do a spin-polarised DFT calculation with SOC, but, however, with magnetic moment set to zero. In the Wien2k initialisation procedure, one can choose for the option -nom when ``lstart`` is called. This means that the charge densities are initialised without magnetic splitting. The SOC calculation is then performed in a standard way as described in the Wien2k manual. + +Performing the projection +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Note that the final ``x lapw2 -almd -so -up`` and ``x lapw2 -almd -so -dn`` have to be run *on a single core*, which implies that, before, ``x lapw2 -up``, ``x lapw2 -dn``, and ``x lapwso -up`` have to be run in single-core mode (at least once). + +In the ``case.indmftpr`` file, the spin-orbit flag has to be set to ``1`` for the correlated atoms. +For example, for the compound Sr\ :sub:`2`\ MgOsO\ :sub:`6`, with the struct file :download:`Sr2MgOsO6.struct `, we would, e.g., use the ``indmftpr`` file :download:`found here `. +Then, ``dmftproj -sp -so`` has to be called. +As usual, it is important to check for warnings (e.g., about eigenvalues of the overlap matrix) in the output of ``dmftproj`` and adapt the window until these warnings disappear. + +Note that in presence of SOC, it is not possible to project only onto the :math:`t_{2g}` subshell because it is not an irreducible representation. + + +We strongly suggest using the :py:meth:`.dos_wannier_basis` functionality of the :py:class:`.SumkDFTTools` class (see :download:`calculate_dos_wannier_basis.py `) and compare the Wannier-projected orbitals to the original DFT DOS (they should be more or less equal). +Note that, with SOC, there are usually off-diagonal elements of the spectral function, which can also be imaginary. +The imaginary part can be found in the third column of the files ``DOS_wann_...``. + +After the projection, one can proceed with the DMFT calculation. However, two things need to be noted here. First, since the spin is not a good quantum number any more, there are off-diagonal elements in the hybridisation function and the local Hamiltonian coupling the two spin directions. This will eventually lead to a fermonic sign problem when QMC is used as a impurity solver. Second, although the :math:`e_{g}` subshell needs to be included in the projection, it can in many cases be neglected in the solution of the Anderson impurity model, after a transformation to a rotated local basis is done. This basis, diagonalising the local Hamiltonian in the presence of SOC, is often called the numerical j-basis. How rotations are performed is described in :ref:`basisrotation`, and the cutting of the orbitals in :ref:`blockstructure`. + +A DMFT calculation including SOC for Sr2MgOsO6 is included in the :ref:`tutorials`. diff --git a/doc/reference/block_structure.rst b/doc/reference/block_structure.rst index ad4004c8..1fe1bebb 100644 --- a/doc/reference/block_structure.rst +++ b/doc/reference/block_structure.rst @@ -9,8 +9,8 @@ The block structure can also be written to and read from HDF files. .. warning:: Do not write the individual elements of this class to a HDF file, - as they belong together and changing one without the other can - result in unexpected results. Always write the BlockStructure + as they belong together and changing one without the other can + result in unexpected results. Always write the BlockStructure object as a whole. Writing the sumk_to_solver and solver_to_sumk elements @@ -19,4 +19,3 @@ The block structure can also be written to and read from HDF files. .. autoclass:: triqs_dft_tools.block_structure.BlockStructure :members: :show-inheritance: - diff --git a/doc/tutorials.rst b/doc/tutorials.rst index 723da9c7..8342013c 100644 --- a/doc/tutorials.rst +++ b/doc/tutorials.rst @@ -14,6 +14,24 @@ A simple example: SrVO3 tutorials/srvo3 +Basis rotations: Sr2MgOsO6 without SOC +-------------------------------------- + +.. toctree:: + :maxdepth: 2 + + tutorials/sr2mgoso6_nosoc + + +Sr2MgOsO6 with SOC (non-magnetic) +--------------------------------- + +.. toctree:: + :maxdepth: 2 + + tutorials/sr2mgoso6_soc + + Full charge self consistency with Wien2k: :math:`\gamma`-Ce ----------------------------------------------------------- diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.indmftpr b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.indmftpr new file mode 100644 index 00000000..de341fa1 --- /dev/null +++ b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.indmftpr @@ -0,0 +1,20 @@ +5 ! Nsort +2 1 1 4 2 ! Mult(Nsort) +3 ! lmax +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +cubic ! choice of angular harmonics +0 0 2 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +1 ! SO flag +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex +0 0 0 0 +0 0 0 0 +-0.09 0.43 diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.outdmftpr b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.outdmftpr new file mode 100644 index 00000000..815e1920 --- /dev/null +++ b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.outdmftpr @@ -0,0 +1,31 @@ +Density Matrices for the Correlated States : + + Sort = 2 Atom = 3 and Orbital l = 2 +Writing the matrix as : [ block up/up | block up/dn ] with + [ block dn/up | block dn/dn ] + # For the Up/Up block : + 0.003574 0.000000 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 + 0.000000 0.000000 0.254943 -0.000000 -0.020080 0.048438 -0.000000 -0.000000 -0.000000 -0.000000 + -0.000000 0.000000 -0.020080 -0.048438 0.011530 0.000000 0.000000 -0.000000 0.000000 -0.000000 + -0.000000 -0.000000 -0.000000 0.000000 0.000000 0.000000 0.363933 -0.000000 0.157594 -0.000000 + -0.000000 0.000000 -0.000000 0.000000 0.000000 0.000000 0.157594 -0.000000 0.363933 -0.000000 + # For the Down/Down block : + 0.003574 0.000000 0.000000 0.000000 0.000000 -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 0.000000 -0.000000 0.254943 0.000000 0.020080 0.048438 -0.000000 0.000000 0.000000 -0.000000 + 0.000000 0.000000 0.020080 -0.048438 0.011530 -0.000000 -0.000000 -0.000000 0.000000 0.000000 + -0.000000 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.363933 0.000000 -0.157594 -0.000000 + 0.000000 0.000000 0.000000 0.000000 0.000000 -0.000000 -0.157594 -0.000000 0.363933 0.000000 + # For the Up/Down block : + -0.000000 0.000000 0.000000 -0.000000 0.000000 0.000000 0.028268 0.000554 -0.028268 -0.000554 + -0.000000 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 -0.111512 0.018026 -0.111512 0.018026 + 0.000000 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.014697 0.018147 0.014697 0.018147 + -0.028268 -0.000554 0.111512 -0.018026 0.014697 0.018147 -0.000000 -0.000000 0.000000 0.000000 + -0.028268 -0.000554 -0.111512 0.018026 -0.014697 -0.018147 0.000000 0.000000 -0.000000 0.000000 + # For the Down/Up block : + -0.000000 -0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.028268 0.000554 -0.028268 0.000554 + 0.000000 0.000000 -0.000000 0.000000 -0.000000 0.000000 0.111512 0.018026 -0.111512 -0.018026 + 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.014697 -0.018147 -0.014697 0.018147 + 0.028268 -0.000554 -0.111512 -0.018026 0.014697 -0.018147 -0.000000 0.000000 0.000000 -0.000000 + -0.028268 0.000554 -0.111512 -0.018026 0.014697 -0.018147 0.000000 -0.000000 -0.000000 -0.000000 + +The charge of the orbital is : 1.99583 diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.py b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.py new file mode 100644 index 00000000..136107ea --- /dev/null +++ b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC.py @@ -0,0 +1,112 @@ +# Import the modules: +from triqs_dft_tools.sumk_dft import * +from triqs.gf import * +from h5 import HDFArchive +from triqs.operators.util import * +from triqs.operators.util.U_matrix import * +from triqs_cthyb import * +import triqs.utility.mpi as mpi + +# Init the SumK class: +filename = 'Sr2MgOsO6_SOC.h5' +SK = SumkDFT(hdf_file=filename,use_dft_blocks=True) + +# Find diagonal local basis set: +SK.calculate_diagonalization_matrix(prop_to_be_diagonal='eal',calc_in_solver_blocks=True) + +########################### +# Now we pick the orbitals: +# BE CAREFUL: THIS NEEDS TO BE DONE PROPERLY +# AND IS DIFFERENT FORM CASE TO CASE! +SK.block_structure.pick_gf_struct_solver([{'ud_0': [0,1,2],'ud_1': [0,1,2]}]) +########################### + +# Now we set up the U matrix, first in cubic (Wien2k) convention: +U = 2.0 +J = 0.2 +U_sph = U_matrix(l=2, U_int=U, J_hund=J) +U_sph = np.kron(np.reshape(np.eye(2),(1,2,1,2)),np.kron(np.reshape(np.eye(2),(2,1,2,1)),U_sph)) +U_mat = transform_U_matrix(U_sph, SK.T[0].conjugate()) + +# Now we set up the interaction Hamiltonian +h_sumk = h_int_slater(['ud'], range(10), U_mat, off_diag=True, complex=True) +# And convert it to the solver structure +h_int = SK.block_structure.convert_operator(h_sumk) + +# Solver Init: +beta = 40.0 +S = Solver(beta=beta, gf_struct=SK.block_structure.gf_struct_solver_list[0]) + +# Solver parameters: +p = {} +# solver +p["random_seed"] = 123 * mpi.rank + 567 +p["length_cycle"] = 200 +p["n_warmup_cycles"] = 100000 +p["n_cycles"] = 3000000 +# tail fit +p["perform_tail_fit"] = True +p["fit_max_moment"] = 4 +p["fit_min_w"] = 4.0 +p["fit_max_w"] = 8.0 + +# double counting correction: +dc_type = 0 # FLL +# DMFT loops: +n_loops = 1 + +#for first iteration, add the outout group: +if mpi.is_master_node(): + with HDFArchive(filename) as ar: + if (not ar.is_group('dmft_output')): + ar.create_group('dmft_output') + +for iteration_number in range(1,n_loops+1): + + mpi.report("Iteration = %s"%iteration_number) + + SK.set_Sigma([ S.Sigma_iw ]) # put Sigma into the SumK class + chemical_potential = SK.calc_mu( precision = 0.01 ) # find the chemical potential for given density + S.G_iw << SK.extract_G_loc()[0] + + if (iteration_number==1): + # Put Hartree energy on Re Sigma + dm = S.G_iw.density() + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + S.Sigma_iw << SK.block_structure.convert_matrix(SK.dc_imp[0],space_from='sumk',space_to='solver')['ud_0'][0,0] + + mpi.report("Orbital densities of local Green function :") + for s,gf in S.G_iw: + mpi.report("Orbital %s: %s"%(s,dm[s].real)) + mpi.report("Total charge of Gloc : %.6f"%S.G_iw.total_density().real) + + # Calculate new G0_iw to input into the solver: + S.G0_iw << S.Sigma_iw + inverse(S.G_iw) + S.G0_iw << inverse(S.G0_iw) + + # Solve the impurity problem: + S.solve(h_int=h_int, **p) + + # Solved. Now do post-solution stuff: + dm = S.G_iw.density() + mpi.report("Orbital densities of impurity Green function:") + for s,gf in S.G_iw: + mpi.report("Orbital %s: %s"%(s,dm[s].real)) + mpi.report("Total charge of impurity problem : %.6f"%S.G_iw.total_density().real) + + # Write the final Sigma and G to the hdf5 archive: + if mpi.is_master_node(): + with HDFArchive(filename) as ar: + ar['dmft_output']['iterations'] = iteration_number + ar['dmft_output']['G_0'] = S.G0_iw + ar['dmft_output']['G_tau'] = S.G_tau + ar['dmft_output']['G_iw'] = S.G_iw + ar['dmft_output']['Sigma_iw_%s'%iteration_number] = S.Sigma_iw + + # Set the new double counting: + dm = S.G_iw.density() # compute the density matrix of the impurity problem + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + + # Save stuff into the user_data group of hdf5 archive in case of rerun: + SK.save(['chemical_potential','dc_imp','dc_energ']) + diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_SOC_DOS.png b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC_DOS.png new file mode 100644 index 00000000..20a6f078 Binary files /dev/null and b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC_DOS.png differ diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_SOC_Sigmas.png b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC_Sigmas.png new file mode 100644 index 00000000..7147695d Binary files /dev/null and b/doc/tutorials/images_scripts/Sr2MgOsO6_SOC_Sigmas.png differ diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.indmftpr b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.indmftpr new file mode 100644 index 00000000..928c1656 --- /dev/null +++ b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.indmftpr @@ -0,0 +1,20 @@ +5 ! Nsort +2 1 1 4 2 ! Mult(Nsort) +3 ! lmax +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +cubic ! choice of angular harmonics +0 0 2 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +0 ! SO flag +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex ! choice of angular harmonics +0 0 0 0 ! l included for each sort +0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0) +complex +0 0 0 0 +0 0 0 0 +-0.09 0.43 diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.outdmftpr b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.outdmftpr new file mode 100644 index 00000000..27328905 --- /dev/null +++ b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.outdmftpr @@ -0,0 +1,12 @@ +Density Matrices for the Correlated States : + + Sort = 2 Atom = 3 and Orbital l = 2 + + 0.000739 0.000000 0.000000 0.000000 0.000000 -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 0.000000 -0.000000 0.502746 0.000000 0.000000 0.099298 0.000000 -0.000000 0.000000 -0.000000 + 0.000000 0.000000 0.000000 -0.099298 0.020434 0.000000 0.000000 -0.000000 0.000000 0.000000 + -0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.735763 0.000000 0.000000 0.000000 + 0.000000 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 -0.000000 0.735763 -0.000000 + +The charge of the orbital is : 1.99544 + diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.py b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.py new file mode 100644 index 00000000..2f906070 --- /dev/null +++ b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.py @@ -0,0 +1,117 @@ +# Import the modules: +from triqs_dft_tools.sumk_dft import * +from triqs.gf import * +from h5 import HDFArchive +from triqs.operators.util import * +from triqs.operators.util.U_matrix import * +from triqs_cthyb import * +import triqs.utility.mpi as mpi + +# Convert the input +from triqs_dft_tools.converters.wien2k_converter import * +Converter = Wien2kConverter(filename = "Sr2MgOsO6_noSOC") +Converter.convert_dft_input() + +# Init the SumK class: +filename = 'Sr2MgOsO6_noSOC.h5' +SK = SumkDFT(hdf_file=filename,use_dft_blocks=True) + +# Find diagonal local basis set: +SK.calculate_diagonalization_matrix(prop_to_be_diagonal='eal',calc_in_solver_blocks=True) + +########################### +# Now we pick the orbitals: +# BE CAREFUL: THIS NEEDS TO BE DONE PROPERLY +# AND IS DIFFERENT FORM CASE TO CASE! +SK.block_structure.pick_gf_struct_solver([{'up_1': [0],'up_2': [0],'up_3': [0],'down_1': [0],'down_2': [0],'down_3': [0]}]) +########################### + +# Now we set up the U matrix, first in cubic Wien2k convention: +U = 2.0 +J = 0.2 +U_mat = U_matrix(l=2,U_int=U,J_hund=J,basis='other', T=SK.T[0].conjugate()) + +# Now we set up the Hamiltonian: +h_sumk = h_int_slater(['up','down'], range(5), U_mat, off_diag=True) +# And now we rotate into solver space: +h_int = SK.block_structure.convert_operator(h_sumk) + +# Solver Init: +beta = 40.0 +S = Solver(beta=beta, gf_struct=SK.block_structure.gf_struct_solver_list[0]) + +# Solver parameters: +p = {} +# solver +p["random_seed"] = 123 * mpi.rank + 567 +p["length_cycle"] = 200 +p["n_warmup_cycles"] = 100000 +p["n_cycles"] = 1000000 +# tail fit +p["perform_tail_fit"] = True +p["fit_max_moment"] = 4 +p["fit_min_n"] = 30 +p["fit_max_n"] = 70 + +# double counting correction: +dc_type = 0 # FLL +# DMFT loops: +n_loops = 1 + +#for first iteration, add the outout group: +if mpi.is_master_node(): + with HDFArchive(filename) as ar: + if (not ar.is_group('dmft_output')): + ar.create_group('dmft_output') + +for iteration_number in range(1,n_loops+1): + + mpi.report("Iteration = %s"%iteration_number) + + SK.symm_deg_gf(S.Sigma_iw) # symmetrizing Sigma + SK.set_Sigma([ S.Sigma_iw ]) # put Sigma into the SumK class + chemical_potential = SK.calc_mu( precision = 0.01 ) # find the chemical potential for given density + S.G_iw << SK.extract_G_loc()[0] + + if (iteration_number==1): + # Put Hartree energy on Re Sigma + dm = S.G_iw.density() + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + S.Sigma_iw << SK.block_structure.convert_matrix(SK.dc_imp[0],space_from='sumk',space_to='solver')['up_1'][0,0] + + mpi.report("Orbital densities of local Green function :") + for s,gf in S.G_iw: + mpi.report("Orbital %s: %s"%(s,dm[s].real)) + mpi.report("Total charge of Gloc : %.6f"%S.G_iw.total_density().real) + + # Calculate new G0_iw to input into the solver: + S.G0_iw << S.Sigma_iw + inverse(S.G_iw) + S.G0_iw << inverse(S.G0_iw) + + # Solve the impurity problem: + S.solve(h_int=h_int, **p) + + # Solved. Now do post-solution stuff: + dm = S.G_iw.density() + mpi.report("Orbital densities of impurity Green function:") + for s,gf in S.G_iw: + mpi.report("Orbital %s: %s"%(s,dm[s].real)) + mpi.report("Total charge of impurity problem : %.6f"%S.G_iw.total_density().real) + + # Write the final Sigma and G to the hdf5 archive: + if mpi.is_master_node(): + with HDFArchive(filename) as ar: + ar['dmft_output']['iterations'] = iteration_number + ar['dmft_output']['G_0'] = S.G0_iw + ar['dmft_output']['G_tau'] = S.G_tau + ar['dmft_output']['G_iw'] = S.G_iw + ar['dmft_output']['Sigma_iw_%s'%iteration_number] = S.Sigma_iw + + # Set the new double counting: + dm = S.G_iw.density() # compute the density matrix of the impurity problem + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + + # Save stuff into the user_data group of hdf5 archive in case of rerun: + SK.save(['chemical_potential','dc_imp','dc_energ']) + + diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.struct b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.struct new file mode 100644 index 00000000..53439abd --- /dev/null +++ b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC.struct @@ -0,0 +1,40 @@ +Sr2MgOsO6 +B 5 87 + RELA + 10.507954 10.507954 14.968880 90.000000 90.000000 90.000000 +ATOM -1: X=0.00000000 Y=0.50000000 Z=0.75000000 + MULT= 2 ISPLIT=-2 + -1: X=0.50000000 Y=0.00000000 Z=0.75000000 +Sr 2+ NPT= 781 R0=.000010000 RMT= 2.50000 Z: 38.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -2: X=0.00000000 Y=0.00000000 Z=0.00000000 + MULT= 1 ISPLIT=-2 +Os 6+ NPT= 781 R0=.000005000 RMT= 1.94 Z: 76.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -3: X=0.00000000 Y=0.00000000 Z=0.50000000 + MULT= 1 ISPLIT=-2 +Mg 2+ NPT= 781 R0=.000100000 RMT= 1.89 Z: 12.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -4: X=0.74270000 Y=0.21790000 Z=0.00000000 + MULT= 4 ISPLIT= 8 + -4: X=0.25730000 Y=0.78210000 Z=0.00000000 + -4: X=0.21790000 Y=0.25730000 Z=0.00000000 + -4: X=0.78210000 Y=0.74270000 Z=0.00000000 +O 2- NPT= 781 R0=.000100000 RMT= 1.58 Z: 8.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 +ATOM -5: X=0.00000000 Y=0.00000000 Z=0.75390000 + MULT= 2 ISPLIT=-2 + -5: X=0.00000000 Y=0.00000000 Z=0.24610000 +O 2- NPT= 781 R0=.000100000 RMT= 1.58 Z: 8.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 + 0 NUMBER OF SYMMETRY OPERATIONS diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC_DOS.png b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC_DOS.png new file mode 100644 index 00000000..505bc130 Binary files /dev/null and b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC_DOS.png differ diff --git a/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC_Sigmas.png b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC_Sigmas.png new file mode 100644 index 00000000..d6c97c73 Binary files /dev/null and b/doc/tutorials/images_scripts/Sr2MgOsO6_noSOC_Sigmas.png differ diff --git a/doc/tutorials/sr2mgoso6_nosoc.rst b/doc/tutorials/sr2mgoso6_nosoc.rst new file mode 100644 index 00000000..21829da8 --- /dev/null +++ b/doc/tutorials/sr2mgoso6_nosoc.rst @@ -0,0 +1,213 @@ +.. _Sr2MgOsO6_noSOC: + +Here we will discuss a calculation where off-diagonal matrix elements show up, and will discuss step-by-step how this calculation can be set up. + +The full script for this calculation is also provided here (:download:`Sr2MgOsO6_noSOC.py `). + +Note that we do not include spin-orbit coupling here for pedagogical reasons. For the real material it is necessary to include also SOC. + + +DFT (Wien2k) and Wannier orbitals +================================= + +DFT setup +--------- + +First, we do a DFT calculation, using the Wien2k package. As main input file we have to provide the so-called struct file :file:`Sr2MgOs6_noSOC.struct`. We use the following: + +.. literalinclude:: images_scripts/Sr2MgOsO6_noSOC.struct + +The DFT calculation is done as usual, for instance you can use for the initialisation + + + init -b -vxc 5 -numk 2000 + +This is setting up a non-magnetic calculation, using the LDA and 2000 k-points in the full Brillouin zone. As usual, we start the DFT self consistent cycle by the Wien2k script :: + + run + +After the SC cycled finished, you can calculate the DOS. It should look like what you can see in this figure: + +.. image:: images_scripts/Sr2MgOsO6_noSOC_DOS.png + :width: 700 + :align: center + + +Wannier orbitals +---------------- + +As a next step, we calculate localised orbitals for the d orbitals. We use this input file for :program:`dmftproj`: + +.. literalinclude:: images_scripts/Sr2MgOsO6_noSOC.indmftpr + +Note that, due to the distortions in the crystal structure, we need to include all five d orbitals in the calculation (line 8 in the input file above). The projection window is set such that all d orbitals are included. + +To prepare the input data for :program:`dmftproj` we execute lapw2 with the `-almd` option :: + + x lapw2 -almd + +Then :program:`dmftproj` is executed in its default mode (i.e. without spin-polarization or spin-orbit included) :: + + dmftproj + +At the end of the run you see the density matrix in Wannier space: + +.. literalinclude:: images_scripts/Sr2MgOsO6_noSOC.outdmftpr + +As you can see, there are off-diagonal elements between the :math:`d_{x^2-y^2}` and the :math:`d_{xy}` orbital. + +We convert the output to the hdf5 archive, using +the python module :class:`Wien2kConverter `. A simple python script doing this is:: + + from triqs_dft_tools.converters.wien2k_converter import * + Converter = Wien2kConverter(filename = "Sr2MgOsO6_noSOC") + Converter.convert_dft_input() + +This reads all the data, and stores everything that is necessary for the DMFT calculation in the file :file:`Sr2MgOsO6_noSOC.h5`. + + +The DMFT calculation +==================== + +Rotating the basis +------------------ + +Before starting the DMFT calculation it is beneficial to look a bit more closely at the block structure of the problem. Eventually, we want to use a basis that is as diagonal as possible, and include only the partially filled orbitals in the correlated problem. All this can be done using the functionalities of the :class:`BlockStructure ` class, see section :ref:`blockstructure`. + +We first initialise the SumK class:: + + from triqs_dft_tools.sumk_dft import * + SK = SumkDFT(hdf_file='Sr2MgOsO6_noSOC.h5',use_dft_blocks=True) + +The flag *use_dft_blocks=True* determines, as usual, the smallest possible blocks with non-zero entries, and initialises them as *solver* block structure. In order to disentangle the :math:`d_{x^2-y^2}` and the :math:`d_{xy}` orbitals, and pick out only the partially filled one, we do a transformation into a basis where the local Hamiltonian is diagonal:: + + mat = SK.calculate_diagonalization_matrix(prop_to_be_diagonal='eal',calc_in_solver_blocks=True) + +We can look at the diagonalisation matrix, it is:: + + >>> print mat[0]['down'] + [[ 1. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j ] + [ 0. +0.j -0.985+0.j 0. -0.173j 0. +0.j 0. +0.j ] + [ 0. +0.j 0.173+0.j 0. -0.985j 0. +0.j 0. +0.j ] + [ 0. +0.j 0. +0.j 0. +0.j 1. +0.j 0. +0.j ] + [ 0. +0.j 0. +0.j 0. +0.j 0. +0.j 1. +0.j ]] + >>> + +This transformation is already stored in the SK.block_structure class. The next step is actually not needed for a DMFT calculation, but it is good to do this check to see what the transformation does to the local Hamiltonian. We can calculate it before rotation, rotate it, and look at the 2x2 block with and without off-diagonals:: + + eal = SK.eff_atomic_levels() + eal2 = SK.block_structure.convert_matrix(eal[0],space_from='sumk', space_to='solver') + + print eal[0]['up'][1:3,1:3] # prints the 2x2 block with offiagonals + [[ 0.391+0.j -0. -0.815j] + [-0. +0.815j 4.884-0.j ]] + + print eal2['up_1'] # prints the 2x2 block after rotation + [[0.247-0.j 0. +0.j] + [0. -0.j 5.028+0.j]] + +So the local Hamiltonian has been diagonalised. From the other entries we can see that the *up_0* block and the [1,1] entry of the *up_1* block correspond to :math:`e_g`-like orbitals, and the others are the +:math:`t_{2g}` orbitals that we want to keep. So we pick the according orbitals in the block structure:: + + SK.block_structure.pick_gf_struct_solver([{'up_1': [0],'up_2': [0],'up_3': [0],'down_1': [0],'down_2': [0],'down_3': [0]}]) + +We can now look at the final result:: + + print SK.block_structure.convert_matrix(eal[0],space_from='sumk',space_to='solver') + {'up_2': array([[0.156-0.j]]), 'up_3': array([[0.156-0.j]]), 'up_1': array([[0.247-0.j]]), 'down_3': array([[0.156-0.j]]), 'down_2': array([[0.156-0.j]]), 'down_1': array([[0.247-0.j]])} + +We see that we arrived at a structure with 3 orbitals per spin only, and blocks of size 1x1. + +The interaction Hamiltonian +--------------------------- + +We now set up the interaction Hamiltonian. Since we want to rotate the interaction matrix into the local basis, we are using the Slater convention for it:: + + from triqs.operators.util import * + from triqs.operators.util.U_matrix import * + + U = 2.0 + J = 0.2 + U_mat = U_matrix(l=2,U_int=U,J_hund=J,basis='other', T=SK.T[0].conjugate()) + +In the last line we use the Wien2k convention to write the U matrix in the cubic harmonics. Next, we want to set up a Hamiltonian and rotate it into the *solver* basis:: + + h_sumk = h_int_slater(['up','down'], range(5), U_mat, off_diag=True) + h_int = SK.block_structure.convert_operator(h_sumk) + h_int = h_int.real + +Note that we needed to set up the interaction Hamiltonian for the full set of five *d* orbitals. The :meth:`convert_operator` method then takes care of rotating and picking the relevant orbitals. In the last line above we made the Hamiltonian real, since we know it this case that there are only real numbers in the interaction Hamiltonian. Note that this is not generally the case! + +Now we have the interaction Hamiltonian for the solver, which we set up next:: + + from triqs_cthyb import * + import triqs.utility.mpi as mpi + + beta = 40.0 + S = Solver(beta=beta, gf_struct=SK.block_structure.gf_struct_solver_list[0]) + + # Solver parameters: + p = {} + # solver + p["random_seed"] = 123 * mpi.rank + 567 + p["length_cycle"] = 200 + p["n_warmup_cycles"] = 100000 + p["n_cycles"] = 1000000 + # tail fit + p["perform_tail_fit"] = True + p["fit_max_moment"] = 4 + p["fit_min_n"] = 40 + p["fit_max_n"] = 100 + + +The DMFT loop with automatic basis rotations +-------------------------------------------- + +After these initialisation steps, the formal DMFT cycle is very similar to a calculation without these basis rotations, since these rotations are done automatically, once the :class:`BlockStructure` property *transformation* is set, see :ref:`basisrotation`. + +The DMFT loop itself looks very much the same as in :ref:`SrVO3`:: + + # double counting correction: + dc_type = 0 # FLL + # DMFT loops: + n_loops = 1 + + for iteration_number in range(1,n_loops+1): + + mpi.report("Iteration = %s"%iteration_number) + + SK.symm_deg_gf(S.Sigma_iw) # symmetrizing Sigma + SK.set_Sigma([ S.Sigma_iw ]) # put Sigma into the SumK class + chemical_potential = SK.calc_mu( precision = 0.01 ) # find the chemical potential for given density + S.G_iw << SK.extract_G_loc()[0] + + if (iteration_number==1): + # Put Hartree energy on Re Sigma + dm = S.G_iw.density() + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + S.Sigma_iw << SK.block_structure.convert_matrix(SK.dc_imp[0],space_from='sumk',space_to='solver')['up_1'][0,0] + + # Calculate new G0_iw to input into the solver: + S.G0_iw << S.Sigma_iw + inverse(S.G_iw) + S.G0_iw << inverse(S.G0_iw) + + # Solve the impurity problem: + S.solve(h_int=h_int, **p) + + # Solved. Now do post-solution stuff: + # Set the new double counting: + dm = S.G_iw.density() # compute the density matrix of the impurity problem + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + + # Save stuff into the user_data group of hdf5 archive in case of rerun: + SK.save(['chemical_potential','dc_imp','dc_energ']) + +The only difference to the other example is in the initialisation of the real part of the self energy. We cannot just take an element of the *dc_imp* array, since this array is stored in the *sumk* structure. Therefore, we first need to transform this matrix into *solver* space, and then take the appropriate matrix element. After the first iteration (here done with 24e6 MC sweeps and using the real version of the CTMQC solver), you should get self energies like this: + +.. image:: images_scripts/Sr2MgOsO6_noSOC_Sigmas.png + :width: 600 + :align: center + +The two :math:`d_{xz}` and :math:`d_{yz}` orbitals are degenerate (blocks *up_2* and *up_3*), whereas the :math:`d_{xy}`-like orbital is different. + +A complete python script for this tutorial, including some more input/output, is available (:download:`Sr2MgOsO6_noSOC.py `). When running the script, you will encounter warnings during the transformation from the *sumk* to the *solver* basis. These warnings just reflect that the off-diagonal elements of the full Greens function are not zero at all frequencies, although the local Hamiltonian is. In that sense, we still do an approximation when restricting ourselves to the :math:`t_{2g}`-like orbitals. \ No newline at end of file diff --git a/doc/tutorials/sr2mgoso6_soc.rst b/doc/tutorials/sr2mgoso6_soc.rst new file mode 100644 index 00000000..3bb58c60 --- /dev/null +++ b/doc/tutorials/sr2mgoso6_soc.rst @@ -0,0 +1,227 @@ +.. _Sr2MgOsO6_SOC: + +In this tutorial we will discuss how to set up and perform a calculation including spin-orbit coupling. As an example, we again take Sr2MgOsO6, as we used for the discussion of basis rotations (:ref:`Sr2MgOsO6_noSOC`). + + +The full script for this calculation is also provided here (:download:`Sr2MgOsO6_SOC.py `). + +DFT (Wien2k) and Wannier orbitals +================================= + +DFT setup +--------- + +First, we do the DFT calculation, using the Wien2k package. As main input file we have to provide the struct file :file:`Sr2MgOs6_noSOC.struct`: + +.. literalinclude:: images_scripts/Sr2MgOsO6_noSOC.struct + +The struct file is the same as for non SOC calculations. However, the DFT calculation is done a bit differently now. First, we need to do a spin-polarised DFT calculation, but with magnetic moment set to zero. In the Wien2k initialisation procedure, one can choose for the option -nom when ``lstart`` is called. This means that the charge densities are initialised without magnetic splitting. After initialisation, do a full SC DFT run:: + + runsp + +After this SC cycled finished, we continue with the spin-orbit calculation. We initialise it with the Wien2k command:: + + init_so + +In this initialisation procedure, be sure to select a spin-polarised calculation. Then the SC cycle including SOC is done by:: + + runsp -so + +After the SC cycled finished, you can calculate the DOS with SOC iuncluded. It should look like what you can see in this figure: + +.. image:: images_scripts/Sr2MgOsO6_SOC_DOS.png + :width: 700 + :align: center + +Wannier orbitals +---------------- + +As a next step, we calculate localised orbitals for the d orbitals. We use this input file for :program:`dmftproj`: + +.. literalinclude:: images_scripts/Sr2MgOsO6_SOC.indmftpr + +Note that, due to the distortions in the crystal structure and the SOC, we include all five d orbitals in the calculation (line 8 in the input file above). The projection window is set such that all d orbitals are included. + +To prepare the input data for :program:`dmftproj` we execute lapw2 with the following options:: + + x lapw2 -up -c -so -almd + x lapw2 -dn -c -so -almd + +Then :program:`dmftproj` is executed for SOC:: + + dmftproj -sp -so + +At the end of the run you see the density matrix in Wannier space: + +.. literalinclude:: images_scripts/Sr2MgOsO6_SOC.outdmftpr + +As you can see, there are a lot of off-diagonal elements now, in particular also off-diagonal in spin space. This is just telling us that spin is not a good quantum number any more in the presence of SOC. + +We convert the output to the hdf5 archive, using +the python module :class:`Wien2kConverter `. A simple python script doing this is:: + + from triqs_dft_tools.converters.wien2k_converter import * + Converter = Wien2kConverter(filename = "Sr2MgOsO6_SOC") + Converter.convert_dft_input() + +This reads all the data, and stores everything that is necessary for the DMFT calculation in the file :file:`Sr2MgOsO6_SOC.h5`. + +The DMFT calculation +==================== + +Rotating the basis +------------------ + +Before starting the DMFT calculation it is beneficial to look a bit more closely at the block structure of the problem. Eventually, we want to use a basis that is as diagonal as possible, and include only the partially filled orbitals in the correlated problem. All this can be done using the functionalities of the :class:`BlockStructure ` class, see section :ref:`blockstructure`. + +We first initialise the SumK class:: + + from triqs_dft_tools.sumk_dft import * + SK = SumkDFT(hdf_file='Sr2MgOsO6_SOC.h5',use_dft_blocks=True) + +The flag *use_dft_blocks=True* determines, as usual, the smallest possible blocks with non-zero entries, and initialises them as *solver* block structure. We want to work in the basis that diagonalises the local Hamiltonian, which is often referred to as numerical j-basis. The transformation into this basis is calculated by:: + + mat = SK.calculate_diagonalization_matrix(prop_to_be_diagonal='eal',calc_in_solver_blocks=True) + +This transformation is stored in the SK.block_structure class and can be used to transform Greens function or operators. The next step is actually not needed for a DMFT calculation, but it is good to do this check to see what the transformation does to the local Hamiltonian. Note that in case of SOC, although spin is not a good quantum number any more, there are two blocks of size 5x5, each corresponding to negative/positive :math:`m_j` values:: + + eal = SK.eff_atomic_levels() + eal2 = SK.block_structure.convert_matrix(eal[0],space_from='sumk', space_to='solver') + + print eal2['ud_0'].diagonal().real. # diagonal of the first 5x5 block + [0.071 0.131 0.608 4.572 5.128] + + print eal2['ud_1'].diagonal().real. # diagonal of the second 5x5 block + [0.071 0.131 0.608 4.572 5.128] + +We see that the orbitals are ordered from low to high energy, which makes picking the orbitals around the Fermi level quite easy. We just take indices 0 to 2:: + + SK.block_structure.pick_gf_struct_solver([{'ud_0': [0,1,2],'ud_1': [0,1,2]}]) + +We can now look at the final result:: + + eal3 = SK.block_structure.convert_matrix(eal[0],space_from='sumk', space_to='solver') + + print eal3['ud_0'] + [[ 0.071+0.j 0. +0.j -0. -0.j] + [-0. -0.j 0.131+0.j -0. -0.j] + [-0. +0.j 0. +0.j 0.608-0.j]] + + print eal3['ud_1'] + [[ 0.071+0.j -0. -0.j 0. +0.j] + [-0. +0.j 0.131-0.j 0. +0.j] + [ 0. -0.j 0. -0.j 0.608+0.j]] + +We see that we arrived at a diagonal structure with two blocks of size 3x3, and we have picked the orbitals around the Fermi level. + +The interaction Hamiltonian +--------------------------- + +We now set up the interaction Hamiltonian. Since we want to rotate the interaction matrix into the local basis, we are using the Slater convention for it. We use *l=2* for *d* orbitals. Also, for SOC calculations, we need to inflate the resulting matrix to size 10x10:: + + from triqs.operators.util import * + from triqs.operators.util.U_matrix import * + + U = 2.0 + J = 0.2 + U_sph = U_matrix(l=2, U_int=U, J_hund=J) + U_sph = np.kron(np.reshape(np.eye(2),(1,2,1,2)),np.kron(np.reshape(np.eye(2),(2,1,2,1)),U_sph)) # inflating the matrix + U_mat = transform_U_matrix(U_sph, SK.T[0].conjugate()) + + +In the last line we use the Wien2k convention to write the U matrix in the cubic harmonics. Next, we want to set up a Hamiltonian and rotate it into the *solver* basis:: + + h_sumk = h_int_slater(['ud'], range(2*(2*l+1)), U_mat, off_diag=True, complex=True) + h_int = SK.block_structure.convert_operator(h_sumk) + +Note that we needed to set up the interaction Hamiltonian first for the full set of *d* orbitals. The :meth:`convert_operator` method then takes care of rotating and picking the relevant orbitals. + +Now we have the interaction Hamiltonian for the solver, which we set up next:: + + from triqs_cthyb import * + import triqs.utility.mpi as mpi + + beta = 40.0 + S = Solver(beta=beta, gf_struct=SK.block_structure.gf_struct_solver_list[0]) + + # Solver parameters: + p = {} + # solver + p["random_seed"] = 123 * mpi.rank + 567 + p["length_cycle"] = 200 + p["n_warmup_cycles"] = 100000 + p["n_cycles"] = 1000000 + # tail fit + p["perform_tail_fit"] = True + p["fit_max_moment"] = 4 + p["fit_min_w"] = 4.0 + p["fit_max_w"] = 8.0 + + +The DMFT loop with automatic basis rotations +-------------------------------------------- + +After these initialisation steps, the formal DMFT cycle is very similar to a calculation without SOC, since the rotations are done automatically, once the :class:`BlockStructure` property *transformation* is set, see :ref:`basisrotation`. + +The DMFT loop itself looks very much the same as in :ref:`SrVO3` or :ref:`Sr2MgOsO6_noSOC`:: + + # double counting correction: + dc_type = 0 # FLL + # DMFT loops: + n_loops = 1 + + for iteration_number in range(1,n_loops+1): + + mpi.report("Iteration = %s"%iteration_number) + + SK.set_Sigma([ S.Sigma_iw ]) # put Sigma into the SumK class + chemical_potential = SK.calc_mu( precision = 0.01 ) # find the chemical potential for given density + S.G_iw << SK.extract_G_loc()[0] + + if (iteration_number==1): + # Put Hartree energy on Re Sigma + dm = S.G_iw.density() + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + S.Sigma_iw << SK.block_structure.convert_matrix(SK.dc_imp[0],space_from='sumk',space_to='solver')['ud_0'][0,0] + + # Calculate new G0_iw to input into the solver: + S.G0_iw << S.Sigma_iw + inverse(S.G_iw) + S.G0_iw << inverse(S.G0_iw) + + # Solve the impurity problem: + S.solve(h_int=h_int, **p) + + # Solved. Now do post-solution stuff: + # Set the new double counting: + dm = S.G_iw.density() # compute the density matrix of the impurity problem + SK.calc_dc(dm, U_interact = U, J_hund = J, orb = 0, use_dc_formula = dc_type) + + # Save stuff into the user_data group of hdf5 archive in case of rerun: + SK.save(['chemical_potential','dc_imp','dc_energ']) + +The only difference to the other example is in the initialisation of the real part of the self energy. We cannot just take an element of the *dc_imp* array, since this array is stored in the *sumk* structure. Therefore, we first need to transform this matrix into *solver* space, and then take the appropriate matrix element. After the first iteration (here done with 18e6 MC sweeps), you should get this output at the end of the run:: + + Total number of measures: 18000000 + Average sign: (0.884535,-4.11253e-06) + Orbital densities of impurity Green function: + Orbital ud_0: + [[ 5.20045070e-01 -8.24863778e-10 5.95348202e-12] + [-8.24863778e-10 4.30734642e-01 -1.29359496e-03] + [ 5.95348202e-12 -1.29359496e-03 4.80477133e-02]] + Orbital ud_1: + [[ 5.24181422e-01 2.22991244e-09 -8.16290063e-10] + [ 2.22991244e-09 4.30431196e-01 2.19004569e-03] + [-8.16290063e-10 2.19004569e-03 4.77161009e-02]] + Total charge of impurity problem : 2.001156 + +We see that there is a small sign problem due to the off-diagonal elements in the hybridisation function. However, this sign problem is treatable, since we have rotated into the local basis where these off-diagonal elements are minimised. + +The imaginary part of the self energy matrix of the *ud_0* block looks like this: + +.. image:: images_scripts/Sr2MgOsO6_SOC_Sigmas.png + :width: 600 + :align: center + +Plotted on the same scale, the off-diagonal elements are very small, only the *(1,2)* and *(2,1)* elements are visibly different from zero. + +A complete python script for this tutorial, including some more input/output, is available (:download:`Sr2MgOsO6_SOC.py `). When running the script, you will encounter warnings during the transformation from the *sumk* to the *solver* basis. These warnings just reflect that the off-diagonal elements of the full Greens function are not zero at all frequencies, although the local Hamiltonian is. In that sense, we still do an approximation when restricting ourselves to the low-energy subset. \ No newline at end of file diff --git a/python/triqs_dft_tools/block_structure.py b/python/triqs_dft_tools/block_structure.py index fa615270..fb9e3786 100644 --- a/python/triqs_dft_tools/block_structure.py +++ b/python/triqs_dft_tools/block_structure.py @@ -1,9 +1,36 @@ + +########################################################################## +# +# TRIQS: a Toolbox for Research in Interacting Quantum Systems +# +# Copyright (C) 2018 by G. J. Kraberger +# Copyright (C) 2018 by Simons Foundation +# Authors: G. J. Kraberger, O. Parcollet +# +# TRIQS is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# TRIQS. If not, see . +# +########################################################################## + + import copy import numpy as np from triqs.gf import GfImFreq, BlockGf from ast import literal_eval import triqs.utility.mpi as mpi from warnings import warn +from collections import defaultdict + class BlockStructure(object): """ Contains information about the Green function structure. @@ -36,19 +63,268 @@ class BlockStructure(object): maps from the solver block to the sumk block for *inequivalent* correlated shell ish + deg_shells : list of lists of lists OR list of lists of dicts + In the simple format, ``deg_shells[ish][grp]`` is a list of + block names; ``ish`` is the index of the inequivalent correlated shell, + ``grp`` is the index of the group of symmetry-related blocks. + When the name of two blocks is in the same group, that means that + these two blocks are the same by symmetry. + + In the more general format, ``deg_shells[ish][grp]`` is a + dictionary whose keys are the block names that are part of the + group. The values of the dict for each key are tuples ``(v, conj)``, + where ``v`` is a transformation matrix with the same matrix dimensions + as the block and ``conj`` is a bool (whether or not to conjugate). + Two blocks with ``v_1, conj_1`` and ``v_2, conj_2`` being in the same + symmetry group means that + + .. math:: + + C_1(v_1^\dagger G_1 v_1) = C_2(v_2^\dagger G_2 v_2), + + where the :math:`G_i` are the Green's functions of the block, + and the functions :math:`C_i` conjugate their argument if the bool + ``conj_i`` is ``True``. + corr_to_inequiv : list + a list where, for each correlated shell, the index of the corresponding + inequivalent correlated shell is given + transformation : list of numpy.array or list of dict + a list with entries for each ``ish`` giving transformation matrices + that are used on the Green's function in ``sumk`` space before + converting to the ``solver`` space + Up to the change in block structure, + + .. math:: + + G_{solver} = T G_{sumk} T^\dagger + + if :math:`T` is the ``transformation`` of that particular shell. + + Note that for each shell this can either be a numpy array which + applies to all blocks or a dict with a transformation matrix for + each block. """ - def __init__(self,gf_struct_sumk=None, - gf_struct_solver=None, - solver_to_sumk=None, - sumk_to_solver=None, - solver_to_sumk_block=None, - deg_shells=None): + + def __init__(self, gf_struct_sumk=None, + gf_struct_solver=None, + solver_to_sumk=None, + sumk_to_solver=None, + solver_to_sumk_block=None, + deg_shells=None, + corr_to_inequiv = None, + transformation=None): self.gf_struct_sumk = gf_struct_sumk self.gf_struct_solver = gf_struct_solver self.solver_to_sumk = solver_to_sumk self.sumk_to_solver = sumk_to_solver self.solver_to_sumk_block = solver_to_sumk_block self.deg_shells = deg_shells + self.corr_to_inequiv = corr_to_inequiv + self.transformation = transformation + + @property + def gf_struct_solver_list(self): + """ The structure of the solver Green's function + + This is returned as a + list (for each shell) + of lists (for each block) + of tuples (block_name, block_indices). + + That is, + ``gf_struct_solver_list[ish][b][0]`` + is the name of the block number ``b`` of shell ``ish``, and + ``gf_struct_solver_list[ish][b][1]`` + is a list of its indices. + + The list for each shell is sorted alphabetically by block name. + """ + if self.gf_struct_solver is None: + return None + # we sort by block name in order to get a reproducible result + return [sorted([(k, v) for k, v in list(gfs.items())], key=lambda x: x[0]) + for gfs in self.gf_struct_solver] + + @property + def gf_struct_sumk_list(self): + """ The structure of the sumk Green's function + + This is returned as a + list (for each shell) + of lists (for each block) + of tuples (block_name, block_indices) + + That is, + ``gf_struct_sumk_list[ish][b][0]`` + is the name of the block number ``b`` of shell ``ish``, and + ``gf_struct_sumk_list[ish][b][1]`` + is a list of its indices. + """ + return self.gf_struct_sumk + + @property + def gf_struct_solver_dict(self): + """ The structure of the solver Green's function + + This is returned as a + list (for each shell) + of dictionaries. + + That is, + ``gf_struct_solver_dict[ish][bname]`` + is a list of the indices of block ``bname`` of shell ``ish``. + """ + return self.gf_struct_solver + + @property + def gf_struct_sumk_dict(self): + """ The structure of the sumk Green's function + + This is returned as a + list (for each shell) + of dictionaries. + + That is, + ``gf_struct_sumk_dict[ish][bname]`` + is a list of the indices of block ``bname`` of shell ``ish``. + """ + if self.gf_struct_sumk is None: + return None + return [{block: indices for block, indices in gfs} + for gfs in self.gf_struct_sumk] + + @property + def inequiv_to_corr(self): + """ A list mapping an inequivalent correlated shell to a correlated shell + """ + + if self.corr_to_inequiv is None: + return None + N_solver = len(np.unique(self.corr_to_inequiv)) + if self.gf_struct_solver is not None: + assert N_solver == len(self.gf_struct_solver) + assert sorted(np.unique(self.corr_to_inequiv)) == list(range(N_solver)),\ + "an inequivalent shell is missing in corr_to_inequiv" + return [self.corr_to_inequiv.index(icrsh) + for icrsh in list(range(N_solver))] + + @inequiv_to_corr.setter + def inequiv_to_corr(self, value): + # a check for backward compatibility + if value is None: + return + assert self.inequiv_to_corr == value, "Trying to set incompatible inequiv_to_corr" + + @property + def sumk_to_solver_block(self): + if self.inequiv_to_corr is None: + return None + ret = [] + for ish, icrsh in enumerate(self.inequiv_to_corr): + d = defaultdict(list) + for block_solver, block_sumk in list(self.solver_to_sumk_block[ish].items()): + d[block_sumk].append(block_solver) + ret.append(d) + return ret + + @property + def effective_transformation_sumk(self): + """ Return the effective transformation matrix + + A list of dicts, one for every correlated shell. In the dict, + there is a transformation matrix (as numpy array) for each + block in sumk space, that is used to transform the block. + """ + trans = copy.deepcopy(self.transformation) + if self.gf_struct_sumk is None: + raise Exception('gf_struct_sumk not set.') + if self.gf_struct_solver is None: + raise Exception('gf_struct_solver not set.') + + if trans is None: + trans = [{block: np.eye(len(indices)) for block, indices in gfs} + for gfs in self.gf_struct_sumk] + + assert isinstance(trans, list),\ + "transformation has to be a list" + + assert len(trans) == len(self.gf_struct_sumk),\ + "give one transformation per correlated shell" + + for icrsh in list(range(len(trans))): + ish = self.corr_to_inequiv[icrsh] + if trans[icrsh] is None: + trans[icrsh] = {block: np.eye(len(indices)) + for block, indices in self.gf_struct_sumk[icrsh]} + + if not isinstance(trans[icrsh], dict): + trans[icrsh] = {block: copy.deepcopy(trans[icrsh]) + for block, indices in self.gf_struct_sumk[icrsh]} + + assert list(trans[icrsh].keys()) == list(self.gf_struct_sumk_dict[icrsh].keys()),\ + "wrong block names used in transformation (icrsh = {})".format(icrsh) + + for block in trans[icrsh]: + assert trans[icrsh][block].shape[0] == trans[icrsh][block].shape[1],\ + "Transformation has to be quadratic; throwing away orbitals can be achieved on the level of the mapping. (icrsh = {}, block = {})".format(icrsh, block) + + assert trans[icrsh][block].shape[0] == len(self.gf_struct_sumk_dict[icrsh][block]),\ + "Transformation block shape does not match gf_struct_sumk. (icrsh = {}, block = {})".format(icrsh, block) + + # zero out all the lines of the transformation that are + # not included in gf_struct_solver + for iorb, norb in enumerate(self.gf_struct_sumk_dict[icrsh][block]): + if self.sumk_to_solver[ish][(block, norb)][0] is None: + trans[icrsh][block][iorb, :] = 0.0 + return trans + + @property + def effective_transformation_solver(self): + """ Return the effective transformation matrix + + A list of dicts, one for every inequivalent correlated shell. + In the dict, there is a transformation matrix (as numpy array) + for each block in solver space, that is used to transform from + the sumk block (see :py:meth:`.solver_to_sumk_block`) to the + solver block. + + + For a solver block ``b`` for inequivalent correlated shell ``ish``, + the corresponding block of the solver Green's function is:: + + # the effective transformation matrix for the block + T = block_structure.effective_transformation_solver[ish][b] + # the index of the correlated shell + icrsh = block_structure.inequiv_to_corr[ish] + # the name of the corresponding sumk block + block_sumk = block_structure.solver_to_sumk_block[icrsh][b] + # transform the Green's function + G_solver[ish][b].from_L_G_R(T, G_sumk[icrsh][block_sumk], T.conjugate().transpose()) + + The functionality of that code block is implemented in + :py:meth:`.convert_gf` (i.e., you don't need to use this directly). + """ + + eff_trans_sumk = self.effective_transformation_sumk + + ets = [] + for ish in range(len(self.gf_struct_solver)): + icrsh = self.inequiv_to_corr[ish] + ets.append(dict()) + for block in self.gf_struct_solver[ish]: + block_sumk = self.solver_to_sumk_block[ish][block] + T = eff_trans_sumk[icrsh][block_sumk] + ets[ish][block] = np.zeros((len(self.gf_struct_solver[ish][block]), + len(T)), + dtype=T.dtype) + for i in self.gf_struct_solver[ish][block]: + i_sumk = self.solver_to_sumk[ish][block, i] + assert i_sumk[0] == block_sumk,\ + "Wrong block in solver_to_sumk" + i_sumk = i_sumk[1] + ets[ish][block][i, :] = T[i_sumk, :] + return ets + @classmethod def full_structure(cls,gf_struct,corr_to_inequiv): @@ -103,9 +379,10 @@ class BlockStructure(object): solver_to_sumk = copy.deepcopy(solver_to_sumk), sumk_to_solver = solver_to_sumk, solver_to_sumk_block = s2sblock, - deg_shells = [[] for ish in range(len(gf_struct))]) + deg_shells = [[] for ish in range(len(gf_struct))], + corr_to_inequiv = corr_to_inequiv) - def pick_gf_struct_solver(self,new_gf_struct): + def pick_gf_struct_solver(self, new_gf_struct): """ Pick selected orbitals within blocks. This throws away parts of the Green's function that (for some @@ -143,12 +420,12 @@ class BlockStructure(object): gf_struct = new_gf_struct[ish] # create new solver_to_sumk - so2su={} + so2su = {} so2su_block = {} for blk,idxs in list(gf_struct.items()): for i in range(len(idxs)): - so2su[(blk,i)]=self.solver_to_sumk[ish][(blk,idxs[i])] - so2su_block[blk]=so2su[(blk,i)][0] + so2su[(blk, i)] = self.solver_to_sumk[ish][(blk, idxs[i])] + so2su_block[blk] = so2su[(blk, i)][0] self.solver_to_sumk[ish] = so2su self.solver_to_sumk_block[ish] = so2su_block # create new sumk_to_solver @@ -156,15 +433,44 @@ class BlockStructure(object): blk,ind=v if blk in gf_struct and ind in gf_struct[blk]: new_ind = gf_struct[blk].index(ind) - self.sumk_to_solver[ish][k]=(blk,new_ind) + self.sumk_to_solver[ish][k] = (blk, new_ind) else: - self.sumk_to_solver[ish][k]=(None,None) + self.sumk_to_solver[ish][k] = (None, None) + # adapt deg_shells + + self.adapt_deg_shells(gf_struct, ish) + + # reindexing gf_struct so that it starts with 0 for k in gf_struct: gf_struct[k]=list(range(len(gf_struct[k]))) self.gf_struct_solver[ish]=gf_struct - def pick_gf_struct_sumk(self,new_gf_struct): + def adapt_deg_shells(self, gf_struct, ish=0): + """ Adapts the deg_shells to a new gf_struct + Internally called when using pick_gf_struct and map_gf_struct + """ + if self.deg_shells is not None: + for degsh in self.deg_shells[ish]: + if isinstance(degsh, dict): + for key in list(degsh.keys()): + if not key in gf_struct: + del degsh[key] + continue + if gf_struct[key] != self.gf_struct_solver[ish][key]: + v, C = degsh[key] + degsh[key][0] = \ + v[gf_struct[key], :][:, gf_struct[key]] + warn( + 'Removing shells from degenerate shell {}. Cannot guarantee that they continue to be equivalent.') + else: # degshell is list + degsh1 = copy.deepcopy(degsh) # in order to not remove a key while iterating + for key in degsh1: + if not key in gf_struct: + warn('Removing shells from degenerate shell {}.') + degsh.remove(key) + + def pick_gf_struct_sumk(self, new_gf_struct): """ Pick selected orbitals within blocks. This throws away parts of the Green's function that (for some @@ -199,25 +505,50 @@ class BlockStructure(object): However, the indices are not according to the solver Gf but the sumk Gf. """ + eff_trans_sumk = self.effective_transformation_sumk + assert len(eff_trans_sumk) == len(new_gf_struct),\ + "new_gf_struct has the wrong length" + + new_gf_struct_transformed = copy.deepcopy(new_gf_struct) + + # when there is a transformation matrix, this first zeroes out + # the corresponding rows of (a copy of) T and then applies + # pick_gf_struct_solver for all lines of T that have at least + # one non-zero entry + + for icrsh in range(len(new_gf_struct)): + for block, indices in self.gf_struct_sumk[icrsh]: + if not block in new_gf_struct[icrsh]: + #del new_gf_struct_transformed[block] # this MUST be wrong, as new_gf_struct_transformed needs to have a integer index for icrsh... # error when index is not kept at all + continue + T = eff_trans_sumk[icrsh][block] + for index in indices: + if not index in new_gf_struct[icrsh][block]: + T[:, index] = 0.0 + new_indices = [] + for index in indices: + if np.any(np.abs(T[index, :]) > 1.e-15): + new_indices.append(index) + new_gf_struct_transformed[icrsh][block] = new_indices gfs = [] # construct gfs, which is the equivalent of new_gf_struct # but according to the solver Gf, by using the sumk_to_solver # mapping - for ish in range(len(new_gf_struct)): + for icrsh in range(len(new_gf_struct_transformed)): + ish = self.corr_to_inequiv[icrsh] gfs.append({}) - for block in list(new_gf_struct[ish].keys()): - for ind in new_gf_struct[ish][block]: + for block in list(new_gf_struct_transformed[icrsh].keys()): + for ind in new_gf_struct_transformed[icrsh][block]: ind_sol = self.sumk_to_solver[ish][(block,ind)] - if not ind_sol[0] in gfs[ish]: - gfs[ish][ind_sol[0]]=[] - gfs[ish][ind_sol[0]].append(ind_sol[1]) + if not ind_sol[0] in gfs[icrsh]: + gfs[icrsh][ind_sol[0]]=[] + gfs[icrsh][ind_sol[0]].append(ind_sol[1]) self.pick_gf_struct_solver(gfs) - - def map_gf_struct_solver(self,mapping): - """ Map the Green function structure from one struct to another. + def map_gf_struct_solver(self, mapping): + r""" Map the Green function structure from one struct to another. Parameters ---------- @@ -225,38 +556,61 @@ class BlockStructure(object): the dict consists of elements (from_block,from_index) : (to_block,to_index) that maps from one structure to the other + (one for each shell; use a mapping ``None`` for a shell + you want to leave unchanged) + + Examples + -------- + + Consider a `gf_struct_solver` consisting of two :math:`1 \times 1` + blocks, `block_1` and `block_2`. Say you want to have a new block + structure where you merge them into one block because you want to + introduce an off-diagonal element. You could perform the mapping + via:: + + map_gf_struct_solver([{('block_1',0) : ('block', 0) + ('block_2',0) : ('block', 1)}]) """ for ish in range(len(mapping)): + if mapping[ish] is None: + continue gf_struct = {} so2su = {} su2so = {} so2su_block = {} - for frm,to in mapping[ish].items(): + for frm,to in list(mapping[ish].items()): if not to[0] in gf_struct: - gf_struct[to[0]]=[] + gf_struct[to[0]] = [] gf_struct[to[0]].append(to[1]) - so2su[to]=self.solver_to_sumk[ish][frm] - su2so[self.solver_to_sumk[ish][frm]]=to + so2su[to] = self.solver_to_sumk[ish][frm] + su2so[self.solver_to_sumk[ish][frm]] = to if to[0] in so2su_block: if so2su_block[to[0]] != \ - self.solver_to_sumk_block[ish][frm[0]]: + self.solver_to_sumk_block[ish][frm[0]]: warn("solver block '{}' maps to more than one sumk block: '{}', '{}'".format( - to[0],so2su_block[to[0]],self.solver_to_sumk_block[ish][frm[0]])) + to[0], so2su_block[to[0]], self.solver_to_sumk_block[ish][frm[0]])) else: - so2su_block[to[0]]=\ + so2su_block[to[0]] =\ self.solver_to_sumk_block[ish][frm[0]] for k in list(self.sumk_to_solver[ish].keys()): if not k in su2so: - su2so[k] = (None,None) - self.gf_struct_solver[ish]=gf_struct - self.solver_to_sumk[ish]=so2su - self.sumk_to_solver[ish]=su2so - self.solver_to_sumk_block[ish]=so2su_block + su2so[k] = (None, None) - def create_gf(self,ish=0,gf_function=GfImFreq,**kwargs): - """ Create a zero BlockGf having the gf_struct_solver structure. + self.adapt_deg_shells(gf_struct, ish) + + self.gf_struct_solver[ish] = gf_struct + self.solver_to_sumk[ish] = so2su + self.sumk_to_solver[ish] = su2so + self.solver_to_sumk_block[ish] = so2su_block + self.deg_shells[ish] = [] + + def create_gf(self, ish=0, gf_function=GfImFreq, space='solver', **kwargs): + """ Create a zero BlockGf having the correct structure. + + For ``space='solver'``, the structure is according to + ``gf_struct_solver``, else according to ``gf_struct_sumk``. When using GfImFreq as gf_function, typically you have to supply beta as keyword argument. @@ -265,24 +619,202 @@ class BlockStructure(object): ---------- ish : int shell index + If ``space='solver'``, the index of the of the inequivalent correlated shell, + if ``space='sumk'``, the index of the correlated shell gf_function : constructor function used to construct the Gf objects constituting the individual blocks; default: GfImFreq + space : 'solver' or 'sumk' + which space the structure should correspond to **kwargs : options passed on to the Gf constructor for the individual blocks """ - names = list(self.gf_struct_solver[ish].keys()) - blocks=[] + return self._create_gf_or_matrix(ish, gf_function, BlockGf, space, **kwargs) + + def create_matrix(self, ish=0, space='solver', dtype=np.complex_): + """ Create a zero matrix having the correct structure. + + For ``space='solver'``, the structure is according to + ``gf_struct_solver``, else according to ``gf_struct_sumk``. + + Parameters + ---------- + ish : int + shell index + If ``space='solver'``, the index of the of the inequivalent correlated shell, + if ``space='sumk'``, the index of the correlated shell + space : 'solver' or 'sumk' + which space the structure should correspond to + """ + + def gf_function(indices): + return np.zeros((len(indices), len(indices)), dtype=dtype) + + def block_function(name_list, block_list): + d = dict() + for i in range(len(name_list)): + d[name_list[i]] = block_list[i] + return d + + return self._create_gf_or_matrix(ish, gf_function, block_function, space) + + def _create_gf_or_matrix(self, ish=0, gf_function=GfImFreq, block_function=BlockGf, space='solver', **kwargs): + if space == 'solver': + gf_struct = self.gf_struct_solver + elif space == 'sumk': + gf_struct = self.gf_struct_sumk_dict + else: + raise Exception( + "Argument space has to be either 'solver' or 'sumk'.") + + names = list(gf_struct[ish].keys()) + blocks = [] for n in names: - G = gf_function(indices=self.gf_struct_solver[ish][n],**kwargs) + G = gf_function(indices=gf_struct[ish][n], **kwargs) blocks.append(G) - G = BlockGf(name_list = names, block_list = blocks) + G = block_function(name_list=names, block_list=blocks) return G + def check_gf(self, G, ish=None, space='solver'): + """ check whether the Green's function G has the right structure - def convert_gf(self,G,G_struct,ish=0,show_warnings=True,**kwargs): + This throws an error if the structure of G is not the same + as ``gf_struct_solver`` (for ``space=solver``) or + ``gf_struct_sumk`` (for ``space=sumk``).. + + Parameters + ---------- + G : BlockGf or list of BlockGf + Green's function to check + if it is a list, there should be as many entries as there + are shells, and the check is performed for all shells (unless + ish is given). + ish : int + shell index + default: 0 if G is just one Green's function is given, + check all if list of Green's functions is given + space : 'solver' or 'sumk' + which space the structure should correspond to + """ + + return self._check_gf_or_matrix(G, ish, space) + + def check_matrix(self, G, ish=None, space='solver'): + """ check whether the matrix G has the right structure + + This throws an error if the structure of G is not the same + as ``gf_struct_solver`` (for ``space=solver``) or + ``gf_struct_sumk`` (for ``space=sumk``).. + + Parameters + ---------- + G : dict of matrices or list of dict of matrices + matrix to check + if it is a list, there should be as many entries as there + are shells, and the check is performed for all shells (unless + ish is given). + ish : int + shell index + default: 0 if G is just one matrix is given, + check all if list of dicts is given + space : 'solver' or 'sumk' + which space the structure should correspond to + """ + + return self._check_gf_or_matrix(G, ish, space) + + def _check_gf_or_matrix(self, G, ish=None, space='solver'): + if space == 'solver': + gf_struct = self.gf_struct_solver + elif space == 'sumk': + gf_struct = self.gf_struct_sumk_dict + else: + raise Exception( + "Argument space has to be either 'solver' or 'sumk'.") + + if isinstance(G, list): + assert len(G) == len(gf_struct),\ + "list of G does not have the correct length" + if ish is None: + ishs = list(range(len(gf_struct))) + else: + ishs = [ish] + for ish in ishs: + self.check_gf(G[ish], ish=ish, space=space) + return + + if ish is None: + ish = 0 + + if isinstance(G, BlockGf): + for block in gf_struct[ish]: + assert block in G.indices,\ + "block " + block + " not in G (shell {})".format(ish) + for block, gf in G: + assert block in gf_struct[ish],\ + "block " + block + " not in struct (shell {})".format(ish) + assert list(gf.indices) == 2 * [list(map(str, gf_struct[ish][block]))],\ + "block " + block + \ + " has wrong indices (shell {})".format(ish) + else: + for block in gf_struct[ish]: + assert block in G,\ + "block " + block + " not in G (shell {})".format(ish) + for block, gf in list(G.items()): + assert block in gf_struct[ish],\ + "block " + block + " not in struct (shell {})".format(ish) + assert list(range(len(gf))) == 2 * [list(map(str, gf_struct[ish][block]))],\ + "block " + block + \ + " has wrong indices (shell {})".format(ish) + + def convert_operator(self, O, ish=0): + """ Converts a second-quantization operator from sumk structure + to solver structure. + + Parameters + ---------- + O : triqs.operators.Operator + Operator in sumk structure + + ish : int + shell index on which the operator acts + """ + + from triqs.operators import Operator, c, c_dag + + T = self.transformation[ish] + sk2s = self.sumk_to_solver[ish] + + O_out = Operator(0) + + for monomial in O: + coefficient = monomial[-1] + new_monomial = Operator(1) + #if coefficient > 1e-10: + for single_operator in monomial[0]: + new_single_operator = Operator(0) + daggered = single_operator[0] + + blockname = single_operator[1][0] + i = single_operator[1][1] + for j in range(len(T[blockname])): + if sk2s[(blockname, j)] != (None, None): + if daggered: + new_single_operator += (T[blockname][j,i] * c_dag(*sk2s[(blockname, j)])) + else: + new_single_operator += (T[blockname][j,i].conjugate() * c(*sk2s[(blockname, j)])) + + new_monomial *= new_single_operator + + O_out += new_monomial * coefficient + return O_out + + + + def convert_gf(self, G, G_struct=None, ish_from=0, ish_to=None, show_warnings=True, + G_out=None, space_from='solver', space_to='solver', ish=None, **kwargs): """ Convert BlockGf from its structure to this structure. .. warning:: @@ -295,49 +827,194 @@ class BlockStructure(object): ---------- G : BlockGf the Gf that should be converted - G_struct : GfStructure - the structure of that G - ish : int - shell index + G_struct : BlockStructure or str + the structure of that G or None (then, this structure + is used) + ish_from : int + shell index of the input structure + ish_to : int + shell index of the output structure; if None (the default), + it is the same as ish_from show_warnings : bool or float whether to show warnings when elements of the Green's function get thrown away if float, set the threshold for the magnitude of an element about to be thrown away to trigger a warning (default: 1.e-10) + G_out : BlockGf + the output Green's function (if not given, a new one is + created) + space_from : 'solver' or 'sumk' + whether the Green's function ``G`` corresponds to the + solver or sumk structure of ``G_struct`` + space_to : 'solver' or 'sumk' + whether the output Green's function should be according to + the solver of sumk structure of this structure **kwargs : options passed to the constructor for the new Gf """ + if ish is not None: + warn( + 'The parameter ish in convert_gf is deprecated. Use ish_from and ish_to instead.') + ish_from = ish + ish_to = ish + return self._convert_gf_or_matrix(G, G_struct, ish_from, ish_to, + show_warnings, G_out, space_from, space_to, **kwargs) + + def convert_matrix(self, G, G_struct=None, ish_from=0, ish_to=None, show_warnings=True, + G_out=None, space_from='solver', space_to='solver'): + """ Convert matrix from its structure to this structure. + + .. warning:: + + Elements that are zero in the new structure due to + the new block structure will be just ignored, thus + approximated to zero. + + Parameters + ---------- + G : dict of numpy array + the matrix that should be converted + G_struct : BlockStructure or str + the structure of that G or None (then, this structure + is used) + ish_from : int + shell index of the input structure + ish_to : int + shell index of the output structure; if None (the default), + it is the same as ish_from + show_warnings : bool or float + whether to show warnings when elements of the Green's + function get thrown away + if float, set the threshold for the magnitude of an element + about to be thrown away to trigger a warning + (default: 1.e-10) + G_out : dict of numpy array + the output numpy array (if not given, a new one is + created) + space_from : 'solver' or 'sumk' + whether the matrix ``G`` corresponds to the + solver or sumk structure of ``G_struct`` + space_to : 'solver' or 'sumk' + whether the output matrix should be according to + the solver of sumk structure of this structure + **kwargs : + options passed to the constructor for the new Gf + """ + + return self._convert_gf_or_matrix(G, G_struct, ish_from, ish_to, + show_warnings, G_out, space_from, space_to) + + def _convert_gf_or_matrix(self, G, G_struct=None, ish_from=0, ish_to=None, show_warnings=True, + G_out=None, space_from='solver', space_to='solver', **kwargs): + if ish_to is None: + ish_to = ish_from + warning_threshold = 1.e-10 if isinstance(show_warnings, float): warning_threshold = show_warnings show_warnings = True - G_new = self.create_gf(ish=ish,**kwargs) - for block in list(G_struct.gf_struct_solver[ish].keys()): - for i1 in G_struct.gf_struct_solver[ish][block]: - for i2 in G_struct.gf_struct_solver[ish][block]: - i1_sumk = G_struct.solver_to_sumk[ish][(block,i1)] - i2_sumk = G_struct.solver_to_sumk[ish][(block,i2)] - i1_sol = self.sumk_to_solver[ish][i1_sumk] - i2_sol = self.sumk_to_solver[ish][i2_sumk] - if i1_sol[0] is None or i2_sol[0] is None: - if show_warnings: - if mpi.is_master_node(): - warn(('Element {},{} of block {} of G is not present '+ - 'in the new structure').format(i1,i2,block)) - continue - if i1_sol[0]!=i2_sol[0]: - if show_warnings and np.max(np.abs(G[block][i1,i2].data)) > warning_threshold: - if mpi.is_master_node(): - warn(('Element {},{} of block {} of G is approximated '+ - 'to zero to match the new structure. Max abs value: {}').format( - i1,i2,block,np.max(np.abs(G[block][i1,i2].data)))) - continue - G_new[i1_sol[0]][i1_sol[1],i2_sol[1]] = \ - G[block][i1,i2] - return G_new + if G_struct is None: + G_struct = self + + if space_from == 'solver': + gf_struct_from = G_struct.gf_struct_solver[ish_from] + eff_trans_from = G_struct.effective_transformation_solver[ish_from] + block_mapping_from = G_struct.sumk_to_solver_block[ish_from] + elif space_from == 'sumk': + gf_struct_from = G_struct.gf_struct_sumk_dict[ish_from] + eff_trans_from = {block: np.eye(len(indices)) + for block, indices in G_struct.gf_struct_sumk[ish_from]} + block_mapping_from = {b: [b] for b in gf_struct_from} + else: + raise Exception( + "Argument space_from has to be either 'solver' or 'sumk'.") + + if space_to == 'solver': + gf_struct_to = self.gf_struct_solver[ish_to] + eff_trans_to = self.effective_transformation_solver[ish_to] + block_mapping_to = self.solver_to_sumk_block[ish_to] + elif space_to == 'sumk': + gf_struct_to = self.gf_struct_sumk_dict[ish_to] + eff_trans_to = {block: np.eye(len(indices)) + for block, indices in self.gf_struct_sumk_list[ish_to]} + block_mapping_to = {b: b for b in gf_struct_to} + else: + raise Exception( + "Argument space_to has to be either 'solver' or 'sumk'.") + + if isinstance(G, BlockGf): + # create a Green's function to hold the result + if G_out is None: + if not 'mesh' in kwargs and not 'beta' in kwargs: + kwargs['mesh'] = G.mesh + G_out = self.create_gf(ish=ish_to, space=space_to, **kwargs) + else: + self.check_gf(G_out, ish=ish_to, space=space_to) + elif isinstance(G, dict): + if G_out is None: + G_out = self.create_matrix(ish=ish_to, space=space_to) + else: + self.check_matrix(G_out, ish=ish_to, space=space_to) + else: + raise Exception('G is neither BlockGf nor dict.') + + for block_to in list(gf_struct_to.keys()): + if isinstance(G, BlockGf): + G_out[block_to].zero() + else: + G_out[block_to][:] = 0.0 + block_intermediate = block_mapping_to[block_to] + block_from = block_mapping_from[block_intermediate] + T_to = eff_trans_to[block_to] + g_help = G_out[block_to].copy() + for block in block_from: + T_from = eff_trans_from[block] + if isinstance(G, BlockGf): + g_help.from_L_G_R(np.dot(T_to, np.conjugate(np.transpose(T_from))), + G[block], + np.dot(T_from, np.conjugate(np.transpose(T_to)))) + G_out[block_to] << G_out[block_to] + g_help + else: + g_help = np.dot(np.dot(T_to, np.conjugate(np.transpose(T_from))), + np.dot(G[block], + np.dot(T_from, np.conjugate(np.transpose(T_to))))) + G_out[block_to] += g_help + + if show_warnings: + # we back-transform it + G_back = G_struct._convert_gf_or_matrix(G_out, self, ish_from=ish_to, + ish_to=ish_from, + show_warnings=False, # else we get an endless loop + space_from=space_to, space_to=space_from, **kwargs) + for name, gf in (G_back if isinstance(G, BlockGf) else list(G_back.items())): + if isinstance(G, BlockGf): + maxdiff = np.max(np.abs(G_back[name].data - G[name].data), + axis=0) + else: + maxdiff = G_back[name] - G[name] + + if space_to == 'solver' and self == G_struct: # do comparison in solver (ignore diff. in ignored orbitals) + tmp = self.create_matrix(space='sumk') + tmp[name] = maxdiff + maxdiff = G_struct._convert_gf_or_matrix(tmp, self, ish_from=ish_from, + ish_to=ish_to, + show_warnings=False, + space_from=space_from, space_to=space_to, **kwargs) + + for block in maxdiff: + maxdiff_b = maxdiff[block] + if np.any(maxdiff_b > warning_threshold): + warn('Block {} maximum difference:\n'.format(name) + str(maxdiff)) + + + elif np.any(maxdiff > warning_threshold): + warn('Block {} maximum difference:\n'.format(name) + + str(maxdiff)) + + return G_out def approximate_as_diagonal(self): """ Create a structure for a GF with zero off-diagonal elements. @@ -356,7 +1033,7 @@ class BlockStructure(object): self.gf_struct_solver.append({}) self.solver_to_sumk.append({}) self.solver_to_sumk_block.append({}) - for frm,to in self.sumk_to_solver[ish].items(): + for frm,to in list(self.sumk_to_solver[ish].items()): if to[0] is not None: self.gf_struct_solver[ish][frm[0]+'_'+str(frm[1])]=[0] self.sumk_to_solver[ish][frm]=(frm[0]+'_'+str(frm[1]),0) @@ -393,7 +1070,7 @@ class BlockStructure(object): for prop in [ "gf_struct_sumk", "gf_struct_solver", "solver_to_sumk", "sumk_to_solver", "solver_to_sumk_block", - "deg_shells"]: + "deg_shells","transformation", "corr_to_inequiv"]: if not compare(getattr(self,prop),getattr(other,prop)): return False return True @@ -406,14 +1083,20 @@ class BlockStructure(object): ret = {} for element in [ "gf_struct_sumk", "gf_struct_solver", - "solver_to_sumk_block","deg_shells"]: + "solver_to_sumk_block","deg_shells", + "transformation", "corr_to_inequiv"]: ret[element] = getattr(self,element) + if ret[element] is None: + ret[element] = 'None' + + if ret["transformation"] is None: + ret["transformation"] = "None" def construct_mapping(mapping): d = [] for ish in range(len(mapping)): d.append({}) - for k,v in mapping[ish].items(): + for k,v in list(mapping[ish].items()): d[ish][repr(k)] = repr(v) return d @@ -429,18 +1112,23 @@ class BlockStructure(object): d = [] for ish in range(len(mapping)): d.append({}) - for k,v in mapping[ish].items(): + for k,v in list(mapping[ish].items()): # literal_eval is a saje alternative to eval d[ish][literal_eval(k)] = literal_eval(v) return d + for elem in D: + if D[elem]=="None": + D[elem] = None + D['solver_to_sumk']=reconstruct_mapping(D['solver_to_sumk']) D['sumk_to_solver']=reconstruct_mapping(D['sumk_to_solver']) return cls(**D) def __str__(self): s='' - s+= "gf_struct_sumk "+str( self.gf_struct_sumk)+'\n' + s+= "corr_to_inequiv "+str(self.corr_to_inequiv)+'\n' + s+= "gf_struct_sumk "+str(self.gf_struct_sumk)+'\n' s+= "gf_struct_solver "+str(self.gf_struct_solver)+'\n' s+= "solver_to_sumk_block "+str(self.solver_to_sumk_block)+'\n' for el in ['solver_to_sumk','sumk_to_solver']: @@ -459,12 +1147,14 @@ class BlockStructure(object): for l in range(len(self.deg_shells[ish])): s+=' equivalent group '+str(l)+'\n' if isinstance(self.deg_shells[ish][l],dict): - for key, val in self.deg_shells[ish][l].items(): + for key, val in list(self.deg_shells[ish][l].items()): s+=' '+key+('*' if val[1] else '')+':\n' s+=' '+str(val[0]).replace('\n','\n ')+'\n' else: for key in self.deg_shells[ish][l]: s+=' '+key+'\n' + s += "transformation\n" + s += str(self.transformation) return s from h5.formats import register_class diff --git a/python/triqs_dft_tools/converters/plovasp/plotools.py b/python/triqs_dft_tools/converters/plovasp/plotools.py index c2dd5389..af500ff8 100644 --- a/python/triqs_dft_tools/converters/plovasp/plotools.py +++ b/python/triqs_dft_tools/converters/plovasp/plotools.py @@ -189,9 +189,9 @@ def generate_plo(conf_pars, el_struct): print(" Shell %i"%(ish + 1)) loc_ham = pshells[pgroup.ishells[ish]].local_hamiltonian(el_struct) for io in range(loc_ham.shape[1]): - print(" Site %i"%(io + 1)) + print(" Site %i (real | complex part)"%(io + 1)) for row in loc_ham[:, io, :, :].sum(0): - print(''.join(map("{0:14.7f}".format, row))) + print(''.join(map("{0:14.7f}".format, row.real))+' |'+''.join(map("{0:14.7f}".format, row.imag))) # END DEBUG output if 'dosmesh' in conf_pars.general: print() diff --git a/python/triqs_dft_tools/converters/plovasp/proj_shell.py b/python/triqs_dft_tools/converters/plovasp/proj_shell.py index f6982fe0..628357b0 100644 --- a/python/triqs_dft_tools/converters/plovasp/proj_shell.py +++ b/python/triqs_dft_tools/converters/plovasp/proj_shell.py @@ -363,7 +363,7 @@ class ProjectorShell: assert site_diag, "site_diag = False is not implemented" assert spin_diag, "spin_diag = False is not implemented" - loc_ham = np.zeros((ns, nion, nlm, nlm), dtype=np.float64) + loc_ham = np.zeros((ns, nion, nlm, nlm), dtype=np.complex128) # self.proj_win = np.zeros((nion, ns, nk, nlm, nb_max), dtype=np.complex128) kweights = el_struct.kmesh['kweights'] @@ -376,7 +376,7 @@ class ProjectorShell: for io in range(nion): proj_k = self.proj_win[io, isp, ik, ...] loc_ham[isp, io, :, :] += np.dot(proj_k * (eigk - el_struct.efermi), - proj_k.conj().T).real * weight + proj_k.conj().T) * weight # if not symops is None: # occ_mats = symmetrize_matrix_set(occ_mats, symops, ions, perm_map) diff --git a/python/triqs_dft_tools/converters/wannier90_converter.py b/python/triqs_dft_tools/converters/wannier90_converter.py index b07a0e9f..167114aa 100644 --- a/python/triqs_dft_tools/converters/wannier90_converter.py +++ b/python/triqs_dft_tools/converters/wannier90_converter.py @@ -142,6 +142,10 @@ class Wannier90Converter(ConverterTools): # l, dim, SO flag, irep): corr_shells = [{name: int(val) for name, val in zip( corr_shell_entries, R)} for icrsh in range(n_corr_shells)] + try: + self.fermi_energy = R.next() + except: + self.fermi_energy = 0. except StopIteration: # a more explicit error if the file is corrupted. mpi.report(self._name + ": reading input file %s failed!" % self.inp_file) @@ -443,7 +447,10 @@ class Wannier90Converter(ConverterTools): "Inconsistent indices for R vector n. %s" % ir) # fill h_of_r with the matrix elements of the Hamiltonian - h_of_r[ir][ii, jj] = complex(float(cline[5]), float(cline[6])) + if not numpy.any(rcurr) and ii == jj: + h_of_r[ir][ii, jj] = complex(float(cline[5]) - self.fermi_energy, float(cline[6])) + else: + h_of_r[ir][ii, jj] = complex(float(cline[5]), float(cline[6])) except ValueError: mpi.report("Wrong data or structure in file %s" % hr_filename) diff --git a/python/triqs_dft_tools/sumk_dft.py b/python/triqs_dft_tools/sumk_dft.py index 14b0b66b..31cf3cc1 100644 --- a/python/triqs_dft_tools/sumk_dft.py +++ b/python/triqs_dft_tools/sumk_dft.py @@ -3,6 +3,7 @@ # # TRIQS: a Toolbox for Research in Interacting Quantum Systems # +# Copyright (C) 2018 by G. J. Kraberger # Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola # # TRIQS is free software: you can redistribute it and/or modify it under the @@ -50,11 +51,11 @@ class SumkDFT(object): hdf_file : string Name of hdf5 containing the data. h_field : scalar, optional - The value of magnetic field to add to the DFT Hamiltonian. + The value of magnetic field to add to the DFT Hamiltonian. The contribution -h_field*sigma is added to diagonal elements of the Hamiltonian. It cannot be used with the spin-orbit coupling on; namely h_field is set to 0 if self.SO=True. use_dft_blocks : boolean, optional - If True, the local Green's function matrix for each spin is divided into smaller blocks + If True, the local Green's function matrix for each spin is divided into smaller blocks with the block structure determined from the DFT density matrix of the corresponding correlated shell. Alternatively and additionally, the block structure can be analysed using :meth:`analyse_block_structure ` @@ -62,7 +63,7 @@ class SumkDFT(object): dft_data : string, optional Name of hdf5 subgroup in which DFT data for projector and lattice Green's function construction are stored. symmcorr_data : string, optional - Name of hdf5 subgroup in which DFT data on symmetries of correlated shells + Name of hdf5 subgroup in which DFT data on symmetries of correlated shells (symmetry operations, permutaion matrices etc.) are stored. parproj_data : string, optional Name of hdf5 subgroup in which DFT data on non-normalized projectors for non-correlated @@ -93,6 +94,8 @@ class SumkDFT(object): self.misc_data = misc_data self.h_field = h_field + self.block_structure = BlockStructure() + # Read input from HDF: things_to_read = ['energy_unit', 'n_k', 'k_dep_projection', 'SP', 'SO', 'charge_below', 'density_required', 'symm_op', 'n_shells', 'shells', 'n_corr_shells', 'corr_shells', 'use_rotations', 'rot_mat', @@ -121,8 +124,6 @@ class SumkDFT(object): self.spin_names_to_ind[iso][ self.spin_block_names[iso][isp]] = isp * self.SP - self.block_structure = BlockStructure() - # GF structure used for the local things in the k sums # Most general form allowing for all hybridisation, i.e. largest # blocks possible @@ -151,14 +152,14 @@ class SumkDFT(object): self.chemical_potential = 0.0 # initialise mu self.init_dc() # initialise the double counting - + # charge mixing parameters self.charge_mixing = False # defaults from PRB 90 235103 ("... slow but stable convergence ...") self.charge_mixing_alpha = 0.1 self.charge_mixing_gamma = 1.0 self.deltaNOld = None - + # Analyse the block structure and determine the smallest gf_struct # blocks and maps, if desired if use_dft_blocks: @@ -192,7 +193,7 @@ class SumkDFT(object): # initialise variables on all nodes to ensure mpi broadcast works at # the end for it in things_to_read: - setattr(self, it, 0) + setattr(self, it, None) subgroup_present = 0 if mpi.is_master_node(): @@ -295,10 +296,10 @@ class SumkDFT(object): bname : string Block name of the target block of the lattice Green's function. - gf_to_downfold : Gf + gf_to_downfold : Gf Block of the Green's function that is to be downfolded. - gf_inp : Gf - FIXME + gf_inp : Gf + FIXME shells : string, optional - if shells='corr': orthonormalized projectors for correlated shells are used for the downfolding. @@ -350,10 +351,10 @@ class SumkDFT(object): bname : string Block name of the target block of the lattice Green's function. - gf_to_upfold : Gf + gf_to_upfold : Gf Block of the Green's function that is to be upfolded. - gf_inp : Gf - FIXME + gf_inp : Gf + FIXME shells : string, optional - if shells='corr': orthonormalized projectors for correlated shells are used for the upfolding. @@ -401,10 +402,10 @@ class SumkDFT(object): - if shells='corr': ish labels all correlated shells (equivalent or not) - if shells='all': ish labels only representative (inequivalent) non-correlated shells - gf_to_rotate : Gf + gf_to_rotate : Gf Block of the Green's function that is to be rotated. direction : string - The direction of rotation can be either + The direction of rotation can be either - 'toLocal' : global -> local transformation, - 'toGlobal' : local -> global transformation. @@ -454,7 +455,7 @@ class SumkDFT(object): def lattice_gf(self, ik, mu=None, iw_or_w="iw", beta=40, broadening=None, mesh=None, with_Sigma=True, with_dc=True): r""" - Calculates the lattice Green function for a given k-point from the DFT Hamiltonian and the self energy. + Calculates the lattice Green function for a given k-point from the DFT Hamiltonian and the self energy. Parameters ---------- @@ -477,7 +478,7 @@ class SumkDFT(object): Data defining mesh on which the real-axis GF will be calculated, given in the form (om_min,om_max,n_points), where om_min is the minimum omega, om_max is the maximum omega and n_points is the number of points. with_Sigma : boolean, optional - If True the GF will be calculated with the self-energy stored in self.Sigmaimp_(w/iw), for real/Matsubara GF, respectively. + If True the GF will be calculated with the self-energy stored in self.Sigmaimp_(w/iw), for real/Matsubara GF, respectively. In this case the mesh is taken from the self.Sigma_imp object. If with_Sigma=True but self.Sigmaimp_(w/iw) is not present, with_Sigma is reset to False. with_dc : boolean, optional @@ -568,9 +569,9 @@ class SumkDFT(object): idmat = [numpy.identity( self.n_orbitals[ik, ntoi[sp]], numpy.complex_) for sp in spn] M = copy.deepcopy(idmat) - + 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] - \ @@ -588,86 +589,128 @@ class SumkDFT(object): return G_latt - def set_Sigma(self, Sigma_imp): - self.put_Sigma(Sigma_imp) + def set_Sigma(self, Sigma_imp, transform_to_sumk_blocks=True): + self.put_Sigma(Sigma_imp, transform_to_sumk_blocks) - def put_Sigma(self, Sigma_imp): + def put_Sigma(self, Sigma_imp, transform_to_sumk_blocks=True): r""" - Inserts the impurity self-energies into the sumk_dft class. + Insert the impurity self-energies into the sumk_dft class. Parameters ---------- Sigma_imp : list of BlockGf (Green's function) objects - List containing impurity self-energy for all inequivalent correlated shells. - Self-energies for equivalent shells are then automatically set by this function. - The self-energies can be of the real or imaginary-frequency type. + List containing impurity self-energy for all (inequivalent) correlated shells. + Self-energies for equivalent shells are then automatically set by this function. + The self-energies can be of the real or imaginary-frequency type. + transform_to_sumk_blocks : bool, optional + If True (default), the input Sigma_imp will be transformed to the block structure ``gf_struct_sumk``, + else it has to be given in ``gf_struct_sumk``. """ - assert isinstance( - Sigma_imp, list), "put_Sigma: Sigma_imp has to be a list of Sigmas for the correlated shells, even if it is of length 1!" - assert len( - Sigma_imp) == self.n_inequiv_shells, "put_Sigma: give exactly one Sigma for each inequivalent corr. shell!" + if transform_to_sumk_blocks: + Sigma_imp = self.transform_to_sumk_blocks(Sigma_imp) - # init self.Sigma_imp_(i)w: - if all( (isinstance(gf, Gf) and isinstance (gf.mesh, MeshImFreq)) for bname, gf in Sigma_imp[0]): + assert isinstance(Sigma_imp, list),\ + "put_Sigma: Sigma_imp has to be a list of Sigmas for the correlated shells, even if it is of length 1!" + assert len(Sigma_imp) == self.n_corr_shells,\ + "put_Sigma: give exactly one Sigma for each corr. shell!" + + if all((isinstance(gf, Gf) and isinstance(gf.mesh, MeshImFreq)) for bname, gf in Sigma_imp[0]): # Imaginary frequency Sigma: - self.Sigma_imp_iw = [BlockGf(name_block_generator=[(block, GfImFreq(indices=inner, mesh=Sigma_imp[0].mesh)) - for block, inner in self.gf_struct_sumk[icrsh]], make_copies=False) + self.Sigma_imp_iw = [self.block_structure.create_gf(ish=icrsh, mesh=Sigma_imp[icrsh].mesh, space='sumk') for icrsh in range(self.n_corr_shells)] SK_Sigma_imp = self.Sigma_imp_iw - elif all( isinstance(gf, Gf) and isinstance (gf.mesh, MeshReFreq) for bname, gf in Sigma_imp[0]): + elif all(isinstance(gf, Gf) and isinstance(gf.mesh, MeshReFreq) for bname, gf in Sigma_imp[0]): # Real frequency Sigma: - self.Sigma_imp_w = [BlockGf(name_block_generator=[(block, GfReFreq(indices=inner, mesh=Sigma_imp[0].mesh)) - for block, inner in self.gf_struct_sumk[icrsh]], make_copies=False) + self.Sigma_imp_w = [self.block_structure.create_gf(ish=icrsh, mesh=Sigma_imp[icrsh].mesh, gf_function=GfReFreq, space='sumk') for icrsh in range(self.n_corr_shells)] SK_Sigma_imp = self.Sigma_imp_w - + else: - raise ValueError("put_Sigma: This type of Sigma is not handled.") + raise ValueError("put_Sigma: This type of Sigma is not handled, give either BlockGf of GfReFreq or GfImFreq.") + + # rotation from local to global coordinate system: + for icrsh in range(self.n_corr_shells): + for bname, gf in SK_Sigma_imp[icrsh]: + if self.use_rotations: + gf << self.rotloc(icrsh, + Sigma_imp[icrsh][bname], + direction='toGlobal') + else: + gf << Sigma_imp[icrsh][bname] + + def transform_to_sumk_blocks(self, Sigma_imp, Sigma_out=None): + r""" transform Sigma from solver to sumk space + + Parameters + ---------- + Sigma_imp : list of BlockGf (Green's function) objects + List containing impurity self-energy for all inequivalent correlated shells. + The self-energies can be of the real or imaginary-frequency type. + Sigma_out : list of BlockGf + list of one BlockGf per correlated shell with the block structure + according to ``gf_struct_sumk``; if None, it will be created + """ + + assert isinstance(Sigma_imp, list),\ + "transform_to_sumk_blocks: Sigma_imp has to be a list of Sigmas for the inequivalent correlated shells, even if it is of length 1!" + assert len(Sigma_imp) == self.n_inequiv_shells,\ + "transform_to_sumk_blocks: give exactly one Sigma for each inequivalent corr. shell!" + + if Sigma_out is None: + Sigma_out = [self.block_structure.create_gf(ish=icrsh, mesh=Sigma_imp[self.corr_to_inequiv[icrsh]].mesh, space='sumk') + for icrsh in range(self.n_corr_shells)] + else: + for icrsh in range(self.n_corr_shells): + self.block_structure.check_gf(Sigma_out, + ish=icrsh, + space='sumk') # transform the CTQMC blocks to the full matrix: for icrsh in range(self.n_corr_shells): # ish is the index of the inequivalent shell corresponding to icrsh ish = self.corr_to_inequiv[icrsh] - for block, inner in self.gf_struct_solver[ish].items(): - for ind1 in inner: - for ind2 in inner: - block_sumk, ind1_sumk = self.solver_to_sumk[ - ish][(block, ind1)] - block_sumk, ind2_sumk = self.solver_to_sumk[ - ish][(block, ind2)] - SK_Sigma_imp[icrsh][block_sumk][ - ind1_sumk, ind2_sumk] << Sigma_imp[ish][block][ind1, ind2] + self.block_structure.convert_gf( + G=Sigma_imp[ish], + G_struct=None, + space_from='solver', + space_to='sumk', + ish_from=ish, + ish_to=icrsh, + G_out=Sigma_out[icrsh]) + return Sigma_out - # rotation from local to global coordinate system: - if self.use_rotations: - for icrsh in range(self.n_corr_shells): - for bname, gf in SK_Sigma_imp[icrsh]: - gf << self.rotloc(icrsh, gf, direction='toGlobal') - - def extract_G_loc(self, mu=None, iw_or_w='iw', with_Sigma=True, with_dc=True, broadening=None): + def extract_G_loc(self, mu=None, iw_or_w='iw', with_Sigma=True, with_dc=True, broadening=None, + transform_to_solver_blocks=True, show_warnings=True): r""" Extracts the local downfolded Green function by the Brillouin-zone integration of the lattice Green's function. Parameters ---------- mu : real, optional - Input chemical potential. If not provided the value of self.chemical_potential is used as mu. + Input chemical potential. If not provided the value of self.chemical_potential is used as mu. with_Sigma : boolean, optional - If True then the local GF is calculated with the self-energy self.Sigma_imp. + If True then the local GF is calculated with the self-energy self.Sigma_imp. with_dc : boolean, optional - If True then the double-counting correction is subtracted from the self-energy in calculating the GF. + If True then the double-counting correction is subtracted from the self-energy in calculating the GF. broadening : float, optional - Imaginary shift for the axis along which the real-axis GF is calculated. - If not provided, broadening will be set to double of the distance between mesh points in 'mesh'. - Only relevant for real-frequency GF. + Imaginary shift for the axis along which the real-axis GF is calculated. + If not provided, broadening will be set to double of the distance between mesh points in 'mesh'. + Only relevant for real-frequency GF. + transform_to_solver_blocks : bool, optional + If True (default), the returned G_loc will be transformed to the block structure ``gf_struct_solver``, + else it will be in ``gf_struct_sumk``. + show_warnings : bool, optional + Displays warning messages during transformation + (Only effective if transform_to_solver_blocks = True Returns ------- - G_loc_inequiv : list of BlockGf (Green's function) objects - List of the local Green's functions for all inequivalent correlated shells, - rotated into the corresponding local frames. - + G_loc : list of BlockGf (Green's function) objects + List of the local Green's functions for all (inequivalent) correlated shells, + rotated into the corresponding local frames. + If ``transform_to_solver_blocks`` is True, it will be one per correlated shell, else one per + inequivalent correlated shell. """ if mu is None: @@ -726,25 +769,58 @@ class SumkDFT(object): G_loc[icrsh][bname] << self.rotloc( icrsh, gf, direction='toLocal') + if transform_to_solver_blocks: + return self.transform_to_solver_blocks(G_loc, show_warnings=show_warnings) + + return G_loc + + def transform_to_solver_blocks(self, G_loc, G_out=None, show_warnings = True): + """ transform G_loc from sumk to solver space + + Parameters + ---------- + G_loc : list of BlockGf + a list of one BlockGf per correlated shell with a structure + according to ``gf_struct_sumk``, e.g. as returned by + :py:meth:`.extract_G_loc` with ``transform_to_solver_blocks=False``. + G_out : list of BlockGf + a list of one BlockGf per *inequivalent* correlated shell + with a structure according to ``gf_struct_solver``. + The output Green's function (if not given, a new one is + created) + + Returns + ------- + G_out + """ + + assert isinstance(G_loc, list), "G_loc must be a list (with elements for each correlated shell)" + + if G_out is None: + G_out = [self.block_structure.create_gf(ish=ish, mesh=G_loc[self.inequiv_to_corr[ish]].mesh) + for ish in range(self.n_inequiv_shells)] + else: + for ish in range(self.n_inequiv_shells): + self.block_structure.check_gf(G_out, ish=ish) + # transform to CTQMC blocks: for ish in range(self.n_inequiv_shells): - for block, inner in self.gf_struct_solver[ish].items(): - for ind1 in inner: - for ind2 in inner: - block_sumk, ind1_sumk = self.solver_to_sumk[ - ish][(block, ind1)] - block_sumk, ind2_sumk = self.solver_to_sumk[ - ish][(block, ind2)] - G_loc_inequiv[ish][block][ind1, ind2] << G_loc[ - self.inequiv_to_corr[ish]][block_sumk][ind1_sumk, ind2_sumk] + self.block_structure.convert_gf( + G=G_loc[self.inequiv_to_corr[ish]], + G_struct=None, + ish_from=self.inequiv_to_corr[ish], + ish_to=ish, + space_from='sumk', + G_out=G_out[ish], + show_warnings = show_warnings) # return only the inequivalent shells: - return G_loc_inequiv + return G_out def analyse_block_structure(self, threshold=0.00001, include_shells=None, dm=None, hloc=None): r""" - Determines the block structure of local Green's functions by analysing the structure of - the corresponding density matrices and the local Hamiltonian. The resulting block structures + Determines the block structure of local Green's functions by analysing the structure of + the corresponding density matrices and the local Hamiltonian. The resulting block structures for correlated shells are stored in the :class:`SumkDFT.block_structure ` attribute. Parameters @@ -882,7 +958,7 @@ class SumkDFT(object): the output G(tau) or A(w) """ # make a GfImTime from the supplied GfImFreq - if all(isinstance(g_sh._first(), GfImFreq) for g_sh in G): + if all(isinstance(g_sh.mesh, MeshImFreq) for g_sh in G): gf = [BlockGf(name_block_generator = [(name, GfImTime(beta=block.mesh.beta, indices=block.indices,n_points=len(block.mesh)+1)) for name, block in g_sh], make_copies=False) for g_sh in G] @@ -890,15 +966,15 @@ class SumkDFT(object): for name, g in gf[ish]: g.set_from_fourier(G[ish][name]) # keep a GfImTime from the supplied GfImTime - elif all(isinstance(g_sh._first(), GfImTime) for g_sh in G): + elif all(isinstance(g_sh.mesh, MeshImTime) for g_sh in G): gf = G # make a spectral function from the supplied GfReFreq - elif all(isinstance(g_sh._first(), GfReFreq) for g_sh in G): + elif all(isinstance(g_sh.mesh, MeshReFreq) for g_sh in G): gf = [g_sh.copy() for g_sh in G] for ish in range(len(gf)): for name, g in gf[ish]: g << 1.0j*(g-g.conjugate().transpose())/2.0/numpy.pi - elif all(isinstance(g_sh._first(), GfReTime) for g_sh in G): + elif all(isinstance(g_sh.mesh, MeshReTime) for g_sh in G): def get_delta_from_mesh(mesh): w0 = None for w in mesh: @@ -907,7 +983,7 @@ class SumkDFT(object): else: return w-w0 gf = [BlockGf(name_block_generator = [(name, GfReFreq( - window=(-numpy.pi*(len(block.mesh)-1) / (len(block.mesh)*get_delta_from_mesh(block.mesh)), + window=(-numpy.pi*(len(block.mesh)-1) / (len(block.mesh)*get_delta_from_mesh(block.mesh)), numpy.pi*(len(block.mesh)-1) / (len(block.mesh)*get_delta_from_mesh(block.mesh))), n_points=len(block.mesh), indices=block.indices)) for name, block in g_sh], make_copies=False) for g_sh in G] @@ -954,6 +1030,8 @@ class SumkDFT(object): the Green's function transformed into the new block structure """ + assert isinstance(G, list), "G must be a list (with elements for each correlated shell)" + gf = self._get_hermitian_quantity_from_gf(G) # initialize the variables @@ -1022,11 +1100,11 @@ class SumkDFT(object): full_structure = BlockStructure.full_structure( [{sp:list(range(self.corr_shells[self.inequiv_to_corr[ish]]['dim'])) for sp in self.spin_block_names[self.corr_shells[self.inequiv_to_corr[ish]]['SO']]} - for ish in range(self.n_inequiv_shells)],None) + for ish in range(self.n_inequiv_shells)],self.corr_to_inequiv) G_transformed = [ self.block_structure.convert_gf(G[ish], full_structure, ish, mesh=G[ish].mesh.copy(), show_warnings=threshold, - gf_function=type(G[ish]._first())) + gf_function=type(G[ish]._first()), space_from='sumk', space_to='solver') for ish in range(self.n_inequiv_shells)] if analyse_deg_shells: @@ -1270,6 +1348,82 @@ class SumkDFT(object): # a block was found, break out of the loop break + def calculate_diagonalization_matrix(self, prop_to_be_diagonal='eal', calc_in_solver_blocks=True, write_to_blockstructure = True, shells=None): + """ + Calculates the diagonalisation matrix, and (optionally) stores it in the BlockStructure. + + Parameters + ---------- + prop_to_be_diagonal : string, optional + Defines the property to be diagonalized. + + - 'eal' : local hamiltonian (i.e. crystal field) + - 'dm' : local density matrix + + calc_in_solver_blocks : bool, optional + Whether the property shall be diagonalized in the + full sumk structure, or just in the solver structure. + + write_to_blockstructure : bool, optional + Whether the diagonalization matrix shall be written to + the BlockStructure directly. + shells : list of int, optional + Indices of correlated shells to be diagonalized. + None: all shells + + Returns + ------- + trafo : dict + The transformation matrix for each spin-block in the correlated shell + """ + + if self.block_structure.transformation: + mpi.report( + "calculate_diagonalization_matrix: requires block_structure.transformation = None.") + return 0 + + # Use all shells + if shells is None: + shells = range(self.n_corr_shells) + elif max(shells) >= self.n_corr_shells: # Check if the shell indices are present + mpi.report("calculate_diagonalization_matrix: shells not correct.") + return 0 + + if prop_to_be_diagonal == 'eal': + prop = [self.eff_atomic_levels()[self.corr_to_inequiv[ish]] + for ish in range(self.n_corr_shells)] + elif prop_to_be_diagonal == 'dm': + prop = self.density_matrix(method='using_point_integration') + else: + mpi.report( + "calculate_diagonalization_matrix: Choices for prop_to_be_diagonal are 'eal' or 'dm'.") + return 0 + + trans = [{block: numpy.eye(len(indices)) for block, indices in gfs} for gfs in self.gf_struct_sumk] + + for ish in shells: + trafo = {} + # Transform to solver basis if desired, blocks of prop change in this step! + if calc_in_solver_blocks: + prop[ish] = self.block_structure.convert_matrix(prop[ish], space_from='sumk', space_to='solver') + # Get diagonalisation matrix, if not already diagonal + for name in prop[ish]: + if numpy.sum(abs(prop[ish][name]-numpy.diag(numpy.diagonal(prop[ish][name])))) > 1e-13: + trafo[name] = numpy.linalg.eigh(prop[ish][name])[1].conj().T + else: + trafo[name] = numpy.identity(numpy.shape(prop[ish][name])[0]) + # Transform back to sumk if necessay, blocks change in this step! + if calc_in_solver_blocks: + trafo = self.block_structure.convert_matrix(trafo, space_from='solver', space_to='sumk') + trans[ish] = trafo + + # Write to block_structure object + + if write_to_blockstructure: + self.block_structure.transformation = trans + + return trans + def density_matrix(self, method='using_gf', beta=40.0): """Calculate density matrices in one of two ways. @@ -1284,7 +1438,7 @@ class SumkDFT(object): - if 'using_point_integration': Only works for diagonal hopping matrix (true in wien2k). beta : float, optional - Inverse temperature. + Inverse temperature. Returns ------- @@ -1468,21 +1622,22 @@ class SumkDFT(object): dc_imp : gf_struct_sumk like Double-counting self-energy term. dc_energ : list of floats - Double-counting energy corrections for each correlated shell. + Double-counting energy corrections for each correlated shell. """ self.dc_imp = dc_imp self.dc_energ = dc_energ - def calc_dc(self, dens_mat, orb=0, U_interact=None, J_hund=None, use_dc_formula=0, use_dc_value=None): + def calc_dc(self, dens_mat, orb=0, U_interact=None, J_hund=None, + use_dc_formula=0, use_dc_value=None, transform=True): r""" - Calculates and sets the double counting corrections. + Calculate and set the double counting corrections. If 'use_dc_value' is provided the double-counting term is uniformly initialized with this constant and 'U_interact' and 'J_hund' are ignored. - If 'use_dc_value' is None the correction is evaluated according to + If 'use_dc_value' is None the correction is evaluated according to one of the following formulae: * use_dc_formula = 0: fully-localised limit (FLL) @@ -1500,19 +1655,21 @@ class SumkDFT(object): Parameters ---------- dens_mat : gf_struct_solver like - Density matrix for the specified correlated shell. + Density matrix for the specified correlated shell. orb : int, optional - Index of an inequivalent shell. + Index of an inequivalent shell. U_interact : float, optional - Value of interaction parameter `U`. + Value of interaction parameter `U`. J_hund : float, optional - Value of interaction parameter `J`. + Value of interaction parameter `J`. use_dc_formula : int, optional - Type of double-counting correction (see description). + Type of double-counting correction (see description). use_dc_value : float, optional - Value of the double-counting correction. If specified - `U_interact`, `J_hund` and `use_dc_formula` are ignored. - + Value of the double-counting correction. If specified + `U_interact`, `J_hund` and `use_dc_formula` are ignored. + transform : bool + whether or not to use the transformation in block_structure + to transform the dc """ for icrsh in range(self.n_corr_shells): @@ -1593,6 +1750,11 @@ class SumkDFT(object): mpi.report( "DC for shell %(icrsh)i = %(use_dc_value)f" % locals()) mpi.report("DC energy = %s" % self.dc_energ[icrsh]) + if transform: + for sp in spn: + T = self.block_structure.effective_transformation_sumk[icrsh][sp] + self.dc_imp[icrsh][sp] = numpy.dot(T.conjugate().transpose(), + numpy.dot(self.dc_imp[icrsh][sp], T)) def add_dc(self, iw_or_w="iw"): r""" @@ -1624,7 +1786,7 @@ class SumkDFT(object): return sigma_minus_dc - def symm_deg_gf(self, gf_to_symm, orb): + def symm_deg_gf(self, gf_to_symm, ish=0): r""" Averages a GF over degenerate shells. @@ -1636,8 +1798,8 @@ class SumkDFT(object): ---------- gf_to_symm : gf_struct_solver like Input and output GF (i.e., it gets overwritten) - orb : int - Index of an inequivalent shell. + ish : int + Index of an inequivalent shell. (default value 0) """ @@ -1645,7 +1807,7 @@ class SumkDFT(object): # an h5 file, self.deg_shells might be None if self.deg_shells is None: return - for degsh in self.deg_shells[orb]: + for degsh in self.deg_shells[ish]: # ss will hold the averaged orbitals in the basis where the # blocks are all equal # i.e. maybe_conjugate(v^dagger gf v) @@ -1684,7 +1846,7 @@ class SumkDFT(object): def total_density(self, mu=None, iw_or_w="iw", with_Sigma=True, with_dc=True, broadening=None): r""" - Calculates the total charge within the energy window for a given chemical potential. + Calculates the total charge within the energy window for a given chemical potential. The chemical potential is either given by parameter `mu` or, if it is not specified, taken from `self.chemical_potential`. @@ -1701,7 +1863,7 @@ class SumkDFT(object): with - .. math:: n(k) = Tr G_{\nu\nu'}(k, i\omega_{n}). + .. math:: n(k) = Tr G_{\nu\nu'}(k, i\omega_{n}). The calculation is done in the global coordinate system, if distinction is made between local/global. @@ -1868,7 +2030,7 @@ class SumkDFT(object): ik, 0, bname, G_latt_iw[bname], gf,shells='csc') G_latt_iw[bname] = G_latt_rot_iw.copy() - + for bname, gf in G_latt_iw: deltaN[bname][ik] = G_latt_iw[bname].density() @@ -1878,7 +2040,7 @@ class SumkDFT(object): nb = self.n_orbitals[ik, ntoi[bname]] diag_inds = numpy.diag_indices(nb) deltaN[bname][ik][diag_inds] -= dens_mat_dft[bname][ik][:nb] - + if self.charge_mixing and self.deltaNOld is not None: G2 = numpy.sum(self.kpts_cart[ik,:]**2) # Kerker mixing @@ -1900,9 +2062,9 @@ class SumkDFT(object): mpi.world, dens[bname], lambda x, y: x + y) self.deltaNOld = copy.copy(deltaN) mpi.barrier() - - - + + + band_en_correction = mpi.all_reduce(mpi.world, band_en_correction, lambda x,y : x+y) # now save to file: @@ -2012,7 +2174,7 @@ class SumkDFT(object): return dc def check_projectors(self): - """Calculated the density matrix from projectors (DM = P Pdagger) to check that it is correct and + """Calculated the density matrix from projectors (DM = P Pdagger) to check that it is correct and specifically that it matches DFT.""" dens_mat = [numpy.zeros([self.corr_shells[icrsh]['dim'], self.corr_shells[icrsh]['dim']], numpy.complex_) for icrsh in range(self.n_corr_shells)] @@ -2091,3 +2253,31 @@ class SumkDFT(object): def __set_deg_shells(self,value): self.block_structure.deg_shells = value deg_shells = property(__get_deg_shells,__set_deg_shells) + + @property + def gf_struct_solver_list(self): + return self.block_structure.gf_struct_solver_list + + @property + def gf_struct_sumk_list(self): + return self.block_structure.gf_struct_sumk_list + + @property + def gf_struct_solver_dict(self): + return self.block_structure.gf_struct_solver_dict + + @property + def gf_struct_sumk_dict(self): + return self.block_structure.gf_struct_sumk_dict + + def __get_corr_to_inequiv(self): + return self.block_structure.corr_to_inequiv + def __set_corr_to_inequiv(self, value): + self.block_structure.corr_to_inequiv = value + corr_to_inequiv = property(__get_corr_to_inequiv, __set_corr_to_inequiv) + + def __get_inequiv_to_corr(self): + return self.block_structure.inequiv_to_corr + def __set_inequiv_to_corr(self, value): + self.block_structure.inequiv_to_corr = value + inequiv_to_corr = property(__get_inequiv_to_corr, __set_inequiv_to_corr) diff --git a/python/triqs_dft_tools/trans_basis.py b/python/triqs_dft_tools/trans_basis.py index 368005c6..baaa5857 100644 --- a/python/triqs_dft_tools/trans_basis.py +++ b/python/triqs_dft_tools/trans_basis.py @@ -48,7 +48,7 @@ class TransBasis: self.T = copy.deepcopy(self.SK.T[0]) self.w = numpy.identity(SK.corr_shells[0]['dim']) - def calculate_diagonalisation_matrix(self, prop_to_be_diagonal='eal'): + def calculate_diagonalisation_matrix(self, prop_to_be_diagonal='eal', calc_in_solver_blocks = False): """ Calculates the diagonalisation matrix w, and stores it as member of the class. @@ -60,6 +60,10 @@ class TransBasis: - 'eal' : local hamiltonian (i.e. crystal field) - 'dm' : local density matrix + calc_in_solver_blocks : bool, optional + Whether the property shall be diagonalized in the + full sumk structure, or just in the solver structure. + Returns ------- wsqr : double @@ -76,16 +80,29 @@ class TransBasis: "trans_basis: not a valid quantitiy to be diagonal. Choices are 'eal' or 'dm'.") return 0 - if self.SK.SO == 0: - self.eig, self.w = numpy.linalg.eigh(prop['up']) - # calculate new Transformation matrix + if calc_in_solver_blocks: + trafo = self.SK.block_structure.transformation + self.SK.block_structure.transformation = None + + prop_solver = self.SK.block_structure.convert_matrix(prop, space_from='sumk', space_to='solver') + v= {} + for name in prop_solver: + v[name] = numpy.linalg.eigh(prop_solver[name])[1] + self.w = self.SK.block_structure.convert_matrix(v, space_from='solver', space_to='sumk')['ud' if self.SK.SO else 'up'] self.T = numpy.dot(self.T.transpose().conjugate(), self.w).conjugate().transpose() + self.SK.block_structure.transformation = trafo else: - self.eig, self.w = numpy.linalg.eigh(prop['ud']) - # calculate new Transformation matrix - self.T = numpy.dot(self.T.transpose().conjugate(), - self.w).conjugate().transpose() + if self.SK.SO == 0: + self.eig, self.w = numpy.linalg.eigh(prop['up']) + # calculate new Transformation matrix + self.T = numpy.dot(self.T.transpose().conjugate(), + self.w).conjugate().transpose() + else: + self.eig, self.w = numpy.linalg.eigh(prop['ud']) + # calculate new Transformation matrix + self.T = numpy.dot(self.T.transpose().conjugate(), + self.w).conjugate().transpose() # measure for the 'unity' of the transformation: wsqr = sum(abs(self.w.diagonal())**2) / self.w.diagonal().size diff --git a/test/python/CMakeLists.txt b/test/python/CMakeLists.txt index c880cc1c..2097f00a 100644 --- a/test/python/CMakeLists.txt +++ b/test/python/CMakeLists.txt @@ -5,7 +5,7 @@ foreach(file ${all_h5_ref_files}) endforeach() # Copy other files -FILE(COPY SrVO3.pmat SrVO3.struct SrVO3.outputs SrVO3.oubwin SrVO3.ctqmcout SrVO3.symqmc SrVO3.sympar SrVO3.parproj hk_convert_hamiltonian.hk LaVO3-Pnma_hr.dat LaVO3-Pnma.inp DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +FILE(COPY SrVO3.pmat SrVO3.struct SrVO3.outputs SrVO3.oubwin SrVO3.ctqmcout SrVO3.symqmc SrVO3.sympar SrVO3.parproj hk_convert_hamiltonian.hk LaVO3-Pnma_hr.dat LaVO3-Pnma.inp LaVO3-Pnma_ef_hr.dat LaVO3-Pnma_ef.inp DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # List of all tests diff --git a/test/python/LaVO3-Pnma_ef.inp b/test/python/LaVO3-Pnma_ef.inp new file mode 100644 index 00000000..dbe881d7 --- /dev/null +++ b/test/python/LaVO3-Pnma_ef.inp @@ -0,0 +1,8 @@ + 0 3 2 3 + 8.0 + 4 + 0 0 2 3 0 0 + 1 0 2 3 0 0 + 2 0 2 3 0 0 + 3 0 2 3 0 0 +10.3 \ No newline at end of file diff --git a/test/python/LaVO3-Pnma_ef_hr.dat b/test/python/LaVO3-Pnma_ef_hr.dat new file mode 100644 index 00000000..4b08fc3d --- /dev/null +++ b/test/python/LaVO3-Pnma_ef_hr.dat @@ -0,0 +1,3893 @@ + written on 23Nov2015 at 18:54:56 + 12 + 27 + 2 2 2 1 1 1 2 2 2 2 2 2 1 1 1 + 2 2 2 2 2 2 1 1 1 2 2 2 + -1 -1 -1 1 1 -0.004024 -0.000000 + -1 -1 -1 2 1 -0.005064 0.000000 + -1 -1 -1 3 1 -0.001761 0.000000 + -1 -1 -1 4 1 -0.000117 0.000000 + -1 -1 -1 5 1 0.001789 0.000000 + -1 -1 -1 6 1 0.001063 0.000000 + -1 -1 -1 7 1 0.000182 0.000000 + -1 -1 -1 8 1 0.004941 0.000000 + -1 -1 -1 9 1 0.014966 0.000000 + -1 -1 -1 10 1 0.001052 0.000000 + -1 -1 -1 11 1 0.004249 0.000000 + -1 -1 -1 12 1 0.001055 -0.000000 + -1 -1 -1 1 2 -0.005064 0.000000 + -1 -1 -1 2 2 -0.005524 -0.000000 + -1 -1 -1 3 2 -0.000745 0.000000 + -1 -1 -1 4 2 -0.002085 0.000000 + -1 -1 -1 5 2 -0.000117 0.000000 + -1 -1 -1 6 2 -0.000794 -0.000000 + -1 -1 -1 7 2 0.001251 -0.000000 + -1 -1 -1 8 2 -0.008805 -0.000000 + -1 -1 -1 9 2 0.003121 0.000000 + -1 -1 -1 10 2 -0.000692 -0.000000 + -1 -1 -1 11 2 0.001052 -0.000000 + -1 -1 -1 12 2 0.000790 0.000000 + -1 -1 -1 1 3 -0.001761 -0.000000 + -1 -1 -1 2 3 -0.000745 -0.000000 + -1 -1 -1 3 3 -0.001184 -0.000000 + -1 -1 -1 4 3 -0.000794 -0.000000 + -1 -1 -1 5 3 0.001063 0.000000 + -1 -1 -1 6 3 0.000522 0.000000 + -1 -1 -1 7 3 -0.000792 0.000000 + -1 -1 -1 8 3 0.001717 0.000000 + -1 -1 -1 9 3 -0.004089 -0.000000 + -1 -1 -1 10 3 -0.000790 0.000000 + -1 -1 -1 11 3 -0.001055 -0.000000 + -1 -1 -1 12 3 0.001687 -0.000000 + -1 -1 -1 1 4 0.001100 0.000000 + -1 -1 -1 2 4 -0.001519 -0.000000 + -1 -1 -1 3 4 0.000143 0.000000 + -1 -1 -1 4 4 -0.002725 0.000000 + -1 -1 -1 5 4 0.003360 -0.000000 + -1 -1 -1 6 4 0.002175 0.000000 + -1 -1 -1 7 4 -0.018379 0.000000 + -1 -1 -1 8 4 -0.023064 -0.000000 + -1 -1 -1 9 4 0.002867 0.000000 + -1 -1 -1 10 4 -0.004057 -0.000000 + -1 -1 -1 11 4 -0.000661 -0.000000 + -1 -1 -1 12 4 -0.002825 0.000000 + -1 -1 -1 1 5 0.003927 0.000000 + -1 -1 -1 2 5 0.001100 -0.000000 + -1 -1 -1 3 5 0.001020 0.000000 + -1 -1 -1 4 5 0.003360 -0.000000 + -1 -1 -1 5 5 -0.006576 0.000000 + -1 -1 -1 6 5 0.000661 0.000000 + -1 -1 -1 7 5 0.036873 0.000000 + -1 -1 -1 8 5 0.042521 0.000000 + -1 -1 -1 9 5 -0.001922 0.000000 + -1 -1 -1 10 5 -0.003898 0.000000 + -1 -1 -1 11 5 0.000656 -0.000000 + -1 -1 -1 12 5 -0.002035 -0.000000 + -1 -1 -1 1 6 0.001020 -0.000000 + -1 -1 -1 2 6 0.000143 -0.000000 + -1 -1 -1 3 6 0.000617 0.000000 + -1 -1 -1 4 6 0.002175 -0.000000 + -1 -1 -1 5 6 0.000661 -0.000000 + -1 -1 -1 6 6 -0.001782 0.000000 + -1 -1 -1 7 6 -0.012364 0.000000 + -1 -1 -1 8 6 0.003338 0.000000 + -1 -1 -1 9 6 0.001533 -0.000000 + -1 -1 -1 10 6 0.005418 -0.000000 + -1 -1 -1 11 6 0.005132 0.000000 + -1 -1 -1 12 6 0.003373 -0.000000 + -1 -1 -1 1 7 -0.001131 -0.000000 + -1 -1 -1 2 7 0.000633 -0.000000 + -1 -1 -1 3 7 -0.000561 -0.000000 + -1 -1 -1 4 7 0.001052 -0.000000 + -1 -1 -1 5 7 0.004249 0.000000 + -1 -1 -1 6 7 -0.001055 0.000000 + -1 -1 -1 7 7 -0.004024 -0.000000 + -1 -1 -1 8 7 -0.005064 0.000000 + -1 -1 -1 9 7 0.001761 -0.000000 + -1 -1 -1 10 7 -0.000117 0.000000 + -1 -1 -1 11 7 0.001789 0.000000 + -1 -1 -1 12 7 -0.001063 -0.000000 + -1 -1 -1 1 8 0.000572 0.000000 + -1 -1 -1 2 8 -0.000480 -0.000000 + -1 -1 -1 3 8 0.000746 -0.000000 + -1 -1 -1 4 8 -0.000692 0.000000 + -1 -1 -1 5 8 0.001052 0.000000 + -1 -1 -1 6 8 -0.000790 0.000000 + -1 -1 -1 7 8 -0.005064 0.000000 + -1 -1 -1 8 8 -0.005524 -0.000000 + -1 -1 -1 9 8 0.000745 -0.000000 + -1 -1 -1 10 8 -0.002085 -0.000000 + -1 -1 -1 11 8 -0.000117 0.000000 + -1 -1 -1 12 8 0.000794 0.000000 + -1 -1 -1 1 9 0.000060 -0.000000 + -1 -1 -1 2 9 0.002537 0.000000 + -1 -1 -1 3 9 0.002086 -0.000000 + -1 -1 -1 4 9 0.000790 -0.000000 + -1 -1 -1 5 9 0.001055 -0.000000 + -1 -1 -1 6 9 0.001687 -0.000000 + -1 -1 -1 7 9 0.001761 0.000000 + -1 -1 -1 8 9 0.000745 0.000000 + -1 -1 -1 9 9 -0.001184 -0.000000 + -1 -1 -1 10 9 0.000794 0.000000 + -1 -1 -1 11 9 -0.001063 -0.000000 + -1 -1 -1 12 9 0.000522 -0.000000 + -1 -1 -1 1 10 -0.018379 -0.000000 + -1 -1 -1 2 10 -0.023064 -0.000000 + -1 -1 -1 3 10 -0.002867 -0.000000 + -1 -1 -1 4 10 -0.008805 0.000000 + -1 -1 -1 5 10 0.004941 0.000000 + -1 -1 -1 6 10 0.001717 -0.000000 + -1 -1 -1 7 10 0.011154 -0.000000 + -1 -1 -1 8 10 -0.004731 0.000000 + -1 -1 -1 9 10 -0.004392 -0.000000 + -1 -1 -1 10 10 -0.002725 0.000000 + -1 -1 -1 11 10 0.003360 0.000000 + -1 -1 -1 12 10 -0.002175 -0.000000 + -1 -1 -1 1 11 0.036873 0.000000 + -1 -1 -1 2 11 0.042521 0.000000 + -1 -1 -1 3 11 0.001922 -0.000000 + -1 -1 -1 4 11 0.001251 -0.000000 + -1 -1 -1 5 11 0.000182 0.000000 + -1 -1 -1 6 11 -0.000792 -0.000000 + -1 -1 -1 7 11 -0.003540 0.000000 + -1 -1 -1 8 11 -0.010651 -0.000000 + -1 -1 -1 9 11 -0.000453 -0.000000 + -1 -1 -1 10 11 0.003360 -0.000000 + -1 -1 -1 11 11 -0.006576 0.000000 + -1 -1 -1 12 11 -0.000661 -0.000000 + -1 -1 -1 1 12 0.012364 -0.000000 + -1 -1 -1 2 12 -0.003338 -0.000000 + -1 -1 -1 3 12 0.001533 -0.000000 + -1 -1 -1 4 12 0.003121 -0.000000 + -1 -1 -1 5 12 0.014966 -0.000000 + -1 -1 -1 6 12 -0.004089 0.000000 + -1 -1 -1 7 12 0.003444 0.000000 + -1 -1 -1 8 12 0.000487 0.000000 + -1 -1 -1 9 12 -0.000782 -0.000000 + -1 -1 -1 10 12 -0.002175 0.000000 + -1 -1 -1 11 12 -0.000661 0.000000 + -1 -1 -1 12 12 -0.001782 0.000000 + -1 -1 0 1 1 -0.006750 -0.000000 + -1 -1 0 2 1 -0.003264 -0.000000 + -1 -1 0 3 1 -0.003360 -0.000000 + -1 -1 0 4 1 -0.010651 -0.000000 + -1 -1 0 5 1 -0.003540 -0.000000 + -1 -1 0 6 1 0.000453 0.000000 + -1 -1 0 7 1 -0.177076 0.000000 + -1 -1 0 8 1 0.021015 -0.000000 + -1 -1 0 9 1 0.019597 -0.000000 + -1 -1 0 10 1 -0.002409 -0.000000 + -1 -1 0 11 1 -0.000864 -0.000000 + -1 -1 0 12 1 -0.000583 -0.000000 + -1 -1 0 1 2 -0.003264 -0.000000 + -1 -1 0 2 2 0.003393 -0.000000 + -1 -1 0 3 2 -0.003295 -0.000000 + -1 -1 0 4 2 -0.004731 -0.000000 + -1 -1 0 5 2 0.011154 -0.000000 + -1 -1 0 6 2 0.004392 0.000000 + -1 -1 0 7 2 0.021015 -0.000000 + -1 -1 0 8 2 -0.223461 -0.000000 + -1 -1 0 9 2 0.045911 0.000000 + -1 -1 0 10 2 -0.003521 -0.000000 + -1 -1 0 11 2 -0.002409 0.000000 + -1 -1 0 12 2 -0.003296 0.000000 + -1 -1 0 1 3 -0.003360 -0.000000 + -1 -1 0 2 3 -0.003295 0.000000 + -1 -1 0 3 3 0.000512 0.000000 + -1 -1 0 4 3 -0.000487 -0.000000 + -1 -1 0 5 3 -0.003444 -0.000000 + -1 -1 0 6 3 -0.000782 0.000000 + -1 -1 0 7 3 -0.019597 0.000000 + -1 -1 0 8 3 -0.045911 -0.000000 + -1 -1 0 9 3 -0.039538 -0.000000 + -1 -1 0 10 3 0.003296 -0.000000 + -1 -1 0 11 3 0.000583 -0.000000 + -1 -1 0 12 3 -0.002678 -0.000000 + -1 -1 0 1 4 0.001100 0.000000 + -1 -1 0 2 4 -0.001519 -0.000000 + -1 -1 0 3 4 0.000143 0.000000 + -1 -1 0 4 4 0.003393 0.000000 + -1 -1 0 5 4 -0.003264 0.000000 + -1 -1 0 6 4 -0.003295 0.000000 + -1 -1 0 7 4 0.053346 -0.000000 + -1 -1 0 8 4 -0.023372 0.000000 + -1 -1 0 9 4 -0.001648 0.000000 + -1 -1 0 10 4 -0.001053 -0.000000 + -1 -1 0 11 4 -0.008855 0.000000 + -1 -1 0 12 4 0.005382 0.000000 + -1 -1 0 1 5 0.003927 -0.000000 + -1 -1 0 2 5 0.001100 -0.000000 + -1 -1 0 3 5 0.001020 0.000000 + -1 -1 0 4 5 -0.003264 0.000000 + -1 -1 0 5 5 -0.006750 -0.000000 + -1 -1 0 6 5 -0.003360 0.000000 + -1 -1 0 7 5 0.020930 -0.000000 + -1 -1 0 8 5 -0.021525 0.000000 + -1 -1 0 9 5 0.002735 0.000000 + -1 -1 0 10 5 0.001885 0.000000 + -1 -1 0 11 5 -0.009884 0.000000 + -1 -1 0 12 5 0.003898 0.000000 + -1 -1 0 1 6 0.001020 -0.000000 + -1 -1 0 2 6 0.000143 -0.000000 + -1 -1 0 3 6 0.000617 0.000000 + -1 -1 0 4 6 -0.003295 -0.000000 + -1 -1 0 5 6 -0.003360 -0.000000 + -1 -1 0 6 6 0.000512 -0.000000 + -1 -1 0 7 6 0.003970 0.000000 + -1 -1 0 8 6 0.008426 0.000000 + -1 -1 0 9 6 0.001823 -0.000000 + -1 -1 0 10 6 0.012679 0.000000 + -1 -1 0 11 6 -0.016241 0.000000 + -1 -1 0 12 6 -0.006667 -0.000000 + -1 -1 0 1 7 -0.009884 -0.000000 + -1 -1 0 2 7 0.001885 -0.000000 + -1 -1 0 3 7 -0.003898 -0.000000 + -1 -1 0 4 7 -0.002409 0.000000 + -1 -1 0 5 7 -0.000864 0.000000 + -1 -1 0 6 7 0.000583 0.000000 + -1 -1 0 7 7 -0.006750 0.000000 + -1 -1 0 8 7 -0.003264 0.000000 + -1 -1 0 9 7 0.003360 -0.000000 + -1 -1 0 10 7 0.011154 0.000000 + -1 -1 0 11 7 -0.003540 -0.000000 + -1 -1 0 12 7 0.003444 -0.000000 + -1 -1 0 1 8 -0.008855 -0.000000 + -1 -1 0 2 8 -0.001053 0.000000 + -1 -1 0 3 8 -0.005382 -0.000000 + -1 -1 0 4 8 -0.003521 0.000000 + -1 -1 0 5 8 -0.002409 0.000000 + -1 -1 0 6 8 0.003296 -0.000000 + -1 -1 0 7 8 -0.003264 0.000000 + -1 -1 0 8 8 0.003393 0.000000 + -1 -1 0 9 8 0.003295 0.000000 + -1 -1 0 10 8 -0.004731 -0.000000 + -1 -1 0 11 8 -0.010651 0.000000 + -1 -1 0 12 8 0.000487 -0.000000 + -1 -1 0 1 9 0.016241 -0.000000 + -1 -1 0 2 9 -0.012679 -0.000000 + -1 -1 0 3 9 -0.006667 0.000000 + -1 -1 0 4 9 -0.003296 0.000000 + -1 -1 0 5 9 -0.000583 0.000000 + -1 -1 0 6 9 -0.002678 -0.000000 + -1 -1 0 7 9 0.003360 0.000000 + -1 -1 0 8 9 0.003295 -0.000000 + -1 -1 0 9 9 0.000512 -0.000000 + -1 -1 0 10 9 -0.004392 0.000000 + -1 -1 0 11 9 -0.000453 0.000000 + -1 -1 0 12 9 -0.000782 0.000000 + -1 -1 0 1 10 0.053346 -0.000000 + -1 -1 0 2 10 -0.023372 0.000000 + -1 -1 0 3 10 0.001648 -0.000000 + -1 -1 0 4 10 -0.223461 0.000000 + -1 -1 0 5 10 0.021015 -0.000000 + -1 -1 0 6 10 -0.045911 0.000000 + -1 -1 0 7 10 -0.010651 0.000000 + -1 -1 0 8 10 -0.004731 0.000000 + -1 -1 0 9 10 0.000487 0.000000 + -1 -1 0 10 10 0.003393 -0.000000 + -1 -1 0 11 10 -0.003264 -0.000000 + -1 -1 0 12 10 0.003295 -0.000000 + -1 -1 0 1 11 0.020930 0.000000 + -1 -1 0 2 11 -0.021525 -0.000000 + -1 -1 0 3 11 -0.002735 -0.000000 + -1 -1 0 4 11 0.021015 0.000000 + -1 -1 0 5 11 -0.177076 -0.000000 + -1 -1 0 6 11 -0.019597 0.000000 + -1 -1 0 7 11 -0.003540 0.000000 + -1 -1 0 8 11 0.011154 0.000000 + -1 -1 0 9 11 0.003444 0.000000 + -1 -1 0 10 11 -0.003264 0.000000 + -1 -1 0 11 11 -0.006750 -0.000000 + -1 -1 0 12 11 0.003360 -0.000000 + -1 -1 0 1 12 -0.003970 -0.000000 + -1 -1 0 2 12 -0.008426 0.000000 + -1 -1 0 3 12 0.001823 0.000000 + -1 -1 0 4 12 0.045911 0.000000 + -1 -1 0 5 12 0.019597 0.000000 + -1 -1 0 6 12 -0.039538 0.000000 + -1 -1 0 7 12 -0.000453 0.000000 + -1 -1 0 8 12 -0.004392 0.000000 + -1 -1 0 9 12 -0.000782 0.000000 + -1 -1 0 10 12 0.003295 0.000000 + -1 -1 0 11 12 0.003360 0.000000 + -1 -1 0 12 12 0.000512 0.000000 + -1 -1 1 1 1 -0.006576 -0.000000 + -1 -1 1 2 1 0.003360 0.000000 + -1 -1 1 3 1 0.000661 -0.000000 + -1 -1 1 4 1 0.011154 0.000000 + -1 -1 1 5 1 -0.003540 -0.000000 + -1 -1 1 6 1 -0.003444 0.000000 + -1 -1 1 7 1 0.000182 -0.000000 + -1 -1 1 8 1 0.001251 0.000000 + -1 -1 1 9 1 0.000792 -0.000000 + -1 -1 1 10 1 0.001463 -0.000000 + -1 -1 1 11 1 0.005262 -0.000000 + -1 -1 1 12 1 0.004782 0.000000 + -1 -1 1 1 2 0.003360 -0.000000 + -1 -1 1 2 2 -0.002725 0.000000 + -1 -1 1 3 2 0.002175 -0.000000 + -1 -1 1 4 2 -0.004731 -0.000000 + -1 -1 1 5 2 -0.010651 0.000000 + -1 -1 1 6 2 -0.000487 0.000000 + -1 -1 1 7 2 0.004941 -0.000000 + -1 -1 1 8 2 -0.008805 0.000000 + -1 -1 1 9 2 -0.001717 0.000000 + -1 -1 1 10 2 0.002999 -0.000000 + -1 -1 1 11 2 0.001463 0.000000 + -1 -1 1 12 2 -0.000263 0.000000 + -1 -1 1 1 3 0.000661 -0.000000 + -1 -1 1 2 3 0.002175 -0.000000 + -1 -1 1 3 3 -0.001782 0.000000 + -1 -1 1 4 3 0.004392 -0.000000 + -1 -1 1 5 3 0.000453 -0.000000 + -1 -1 1 6 3 -0.000782 0.000000 + -1 -1 1 7 3 -0.014966 -0.000000 + -1 -1 1 8 3 -0.003121 0.000000 + -1 -1 1 9 3 -0.004089 0.000000 + -1 -1 1 10 3 0.000263 -0.000000 + -1 -1 1 11 3 -0.004782 -0.000000 + -1 -1 1 12 3 -0.004078 -0.000000 + -1 -1 1 1 4 -0.000136 0.000000 + -1 -1 1 2 4 -0.000701 -0.000000 + -1 -1 1 3 4 -0.000218 0.000000 + -1 -1 1 4 4 -0.005524 -0.000000 + -1 -1 1 5 4 -0.005064 -0.000000 + -1 -1 1 6 4 -0.000745 0.000000 + -1 -1 1 7 4 -0.000808 -0.000000 + -1 -1 1 8 4 -0.000289 -0.000000 + -1 -1 1 9 4 0.004567 -0.000000 + -1 -1 1 10 4 -0.000480 -0.000000 + -1 -1 1 11 4 0.000572 0.000000 + -1 -1 1 12 4 -0.000746 0.000000 + -1 -1 1 1 5 -0.000898 -0.000000 + -1 -1 1 2 5 -0.000136 0.000000 + -1 -1 1 3 5 -0.000411 0.000000 + -1 -1 1 4 5 -0.005064 0.000000 + -1 -1 1 5 5 -0.004024 0.000000 + -1 -1 1 6 5 -0.001761 0.000000 + -1 -1 1 7 5 -0.001067 -0.000000 + -1 -1 1 8 5 -0.000059 0.000000 + -1 -1 1 9 5 -0.003255 -0.000000 + -1 -1 1 10 5 0.000633 -0.000000 + -1 -1 1 11 5 -0.001131 -0.000000 + -1 -1 1 12 5 0.000561 -0.000000 + -1 -1 1 1 6 -0.000411 0.000000 + -1 -1 1 2 6 -0.000218 -0.000000 + -1 -1 1 3 6 0.000726 -0.000000 + -1 -1 1 4 6 -0.000745 -0.000000 + -1 -1 1 5 6 -0.001761 -0.000000 + -1 -1 1 6 6 -0.001184 -0.000000 + -1 -1 1 7 6 0.000143 -0.000000 + -1 -1 1 8 6 0.002151 0.000000 + -1 -1 1 9 6 -0.000284 0.000000 + -1 -1 1 10 6 -0.002537 0.000000 + -1 -1 1 11 6 -0.000060 0.000000 + -1 -1 1 12 6 0.002086 -0.000000 + -1 -1 1 1 7 0.000656 -0.000000 + -1 -1 1 2 7 -0.003898 -0.000000 + -1 -1 1 3 7 0.002035 -0.000000 + -1 -1 1 4 7 0.001463 -0.000000 + -1 -1 1 5 7 0.005262 0.000000 + -1 -1 1 6 7 -0.004782 0.000000 + -1 -1 1 7 7 -0.006576 0.000000 + -1 -1 1 8 7 0.003360 -0.000000 + -1 -1 1 9 7 -0.000661 -0.000000 + -1 -1 1 10 7 -0.010651 -0.000000 + -1 -1 1 11 7 -0.003540 -0.000000 + -1 -1 1 12 7 -0.000453 -0.000000 + -1 -1 1 1 8 -0.000661 -0.000000 + -1 -1 1 2 8 -0.004057 0.000000 + -1 -1 1 3 8 0.002825 0.000000 + -1 -1 1 4 8 0.002999 -0.000000 + -1 -1 1 5 8 0.001463 0.000000 + -1 -1 1 6 8 0.000263 -0.000000 + -1 -1 1 7 8 0.003360 -0.000000 + -1 -1 1 8 8 -0.002725 -0.000000 + -1 -1 1 9 8 -0.002175 -0.000000 + -1 -1 1 10 8 -0.004731 -0.000000 + -1 -1 1 11 8 0.011154 -0.000000 + -1 -1 1 12 8 -0.004392 -0.000000 + -1 -1 1 1 9 -0.005132 -0.000000 + -1 -1 1 2 9 -0.005418 0.000000 + -1 -1 1 3 9 0.003373 -0.000000 + -1 -1 1 4 9 -0.000263 -0.000000 + -1 -1 1 5 9 0.004782 -0.000000 + -1 -1 1 6 9 -0.004078 -0.000000 + -1 -1 1 7 9 -0.000661 0.000000 + -1 -1 1 8 9 -0.002175 0.000000 + -1 -1 1 9 9 -0.001782 -0.000000 + -1 -1 1 10 9 0.000487 -0.000000 + -1 -1 1 11 9 0.003444 -0.000000 + -1 -1 1 12 9 -0.000782 -0.000000 + -1 -1 1 1 10 -0.000808 -0.000000 + -1 -1 1 2 10 -0.000289 0.000000 + -1 -1 1 3 10 -0.004567 0.000000 + -1 -1 1 4 10 -0.008805 0.000000 + -1 -1 1 5 10 0.001251 0.000000 + -1 -1 1 6 10 -0.003121 -0.000000 + -1 -1 1 7 10 -0.000117 0.000000 + -1 -1 1 8 10 -0.002085 -0.000000 + -1 -1 1 9 10 0.000794 -0.000000 + -1 -1 1 10 10 -0.005524 -0.000000 + -1 -1 1 11 10 -0.005064 -0.000000 + -1 -1 1 12 10 0.000745 -0.000000 + -1 -1 1 1 11 -0.001067 -0.000000 + -1 -1 1 2 11 -0.000059 -0.000000 + -1 -1 1 3 11 0.003255 0.000000 + -1 -1 1 4 11 0.004941 -0.000000 + -1 -1 1 5 11 0.000182 0.000000 + -1 -1 1 6 11 -0.014966 -0.000000 + -1 -1 1 7 11 0.001789 -0.000000 + -1 -1 1 8 11 -0.000117 -0.000000 + -1 -1 1 9 11 -0.001063 0.000000 + -1 -1 1 10 11 -0.005064 0.000000 + -1 -1 1 11 11 -0.004024 -0.000000 + -1 -1 1 12 11 0.001761 0.000000 + -1 -1 1 1 12 -0.000143 0.000000 + -1 -1 1 2 12 -0.002151 -0.000000 + -1 -1 1 3 12 -0.000284 0.000000 + -1 -1 1 4 12 -0.001717 -0.000000 + -1 -1 1 5 12 0.000792 -0.000000 + -1 -1 1 6 12 -0.004089 -0.000000 + -1 -1 1 7 12 -0.001063 0.000000 + -1 -1 1 8 12 0.000794 -0.000000 + -1 -1 1 9 12 0.000522 -0.000000 + -1 -1 1 10 12 0.000745 0.000000 + -1 -1 1 11 12 0.001761 0.000000 + -1 -1 1 12 12 -0.001184 0.000000 + -1 0 -1 1 1 -0.003709 0.000000 + -1 0 -1 2 1 -0.001875 0.000000 + -1 0 -1 3 1 -0.010883 0.000000 + -1 0 -1 4 1 0.000046 0.000000 + -1 0 -1 5 1 -0.000356 0.000000 + -1 0 -1 6 1 -0.007908 0.000000 + -1 0 -1 7 1 0.000182 -0.000000 + -1 0 -1 8 1 0.001251 0.000000 + -1 0 -1 9 1 0.000792 0.000000 + -1 0 -1 10 1 0.001052 -0.000000 + -1 0 -1 11 1 0.004249 0.000000 + -1 0 -1 12 1 0.001055 0.000000 + -1 0 -1 1 2 -0.001875 0.000000 + -1 0 -1 2 2 0.000971 0.000000 + -1 0 -1 3 2 -0.016089 0.000000 + -1 0 -1 4 2 0.004160 0.000000 + -1 0 -1 5 2 0.000046 -0.000000 + -1 0 -1 6 2 0.003257 0.000000 + -1 0 -1 7 2 0.004941 -0.000000 + -1 0 -1 8 2 -0.008805 -0.000000 + -1 0 -1 9 2 -0.001717 0.000000 + -1 0 -1 10 2 -0.000692 0.000000 + -1 0 -1 11 2 0.001052 -0.000000 + -1 0 -1 12 2 0.000790 0.000000 + -1 0 -1 1 3 -0.010883 -0.000000 + -1 0 -1 2 3 -0.016089 -0.000000 + -1 0 -1 3 3 -0.005433 -0.000000 + -1 0 -1 4 3 0.003257 -0.000000 + -1 0 -1 5 3 -0.007908 -0.000000 + -1 0 -1 6 3 -0.001138 0.000000 + -1 0 -1 7 3 -0.014966 -0.000000 + -1 0 -1 8 3 -0.003121 0.000000 + -1 0 -1 9 3 -0.004089 0.000000 + -1 0 -1 10 3 -0.000790 0.000000 + -1 0 -1 11 3 -0.001055 0.000000 + -1 0 -1 12 3 0.001687 -0.000000 + -1 0 -1 1 4 -0.001355 0.000000 + -1 0 -1 2 4 0.006074 0.000000 + -1 0 -1 3 4 0.008388 0.000000 + -1 0 -1 4 4 0.005370 0.000000 + -1 0 -1 5 4 -0.002479 -0.000000 + -1 0 -1 6 4 -0.013477 -0.000000 + -1 0 -1 7 4 -0.021525 0.000000 + -1 0 -1 8 4 -0.023372 -0.000000 + -1 0 -1 9 4 -0.008426 0.000000 + -1 0 -1 10 4 -0.004057 -0.000000 + -1 0 -1 11 4 -0.003898 -0.000000 + -1 0 -1 12 4 -0.005418 -0.000000 + -1 0 -1 1 5 -0.001701 0.000000 + -1 0 -1 2 5 -0.001355 -0.000000 + -1 0 -1 3 5 0.002485 0.000000 + -1 0 -1 4 5 -0.002479 -0.000000 + -1 0 -1 5 5 -0.002576 -0.000000 + -1 0 -1 6 5 0.012014 0.000000 + -1 0 -1 7 5 0.020930 0.000000 + -1 0 -1 8 5 0.053346 0.000000 + -1 0 -1 9 5 -0.003970 0.000000 + -1 0 -1 10 5 -0.000661 0.000000 + -1 0 -1 11 5 0.000656 0.000000 + -1 0 -1 12 5 -0.005132 0.000000 + -1 0 -1 1 6 0.002485 -0.000000 + -1 0 -1 2 6 0.008388 -0.000000 + -1 0 -1 3 6 -0.009679 -0.000000 + -1 0 -1 4 6 -0.013477 0.000000 + -1 0 -1 5 6 0.012014 -0.000000 + -1 0 -1 6 6 -0.011804 0.000000 + -1 0 -1 7 6 -0.002735 -0.000000 + -1 0 -1 8 6 0.001648 0.000000 + -1 0 -1 9 6 0.001823 -0.000000 + -1 0 -1 10 6 0.002825 -0.000000 + -1 0 -1 11 6 0.002035 -0.000000 + -1 0 -1 12 6 0.003373 -0.000000 + -1 0 -1 1 7 -0.001131 0.000000 + -1 0 -1 2 7 0.000572 -0.000000 + -1 0 -1 3 7 -0.000060 -0.000000 + -1 0 -1 4 7 0.001052 -0.000000 + -1 0 -1 5 7 0.004249 0.000000 + -1 0 -1 6 7 -0.001055 0.000000 + -1 0 -1 7 7 -0.003709 -0.000000 + -1 0 -1 8 7 -0.001875 0.000000 + -1 0 -1 9 7 0.010883 -0.000000 + -1 0 -1 10 7 0.000046 0.000000 + -1 0 -1 11 7 -0.000356 0.000000 + -1 0 -1 12 7 0.007908 -0.000000 + -1 0 -1 1 8 0.000633 0.000000 + -1 0 -1 2 8 -0.000480 -0.000000 + -1 0 -1 3 8 -0.002537 -0.000000 + -1 0 -1 4 8 -0.000692 0.000000 + -1 0 -1 5 8 0.001052 0.000000 + -1 0 -1 6 8 -0.000790 0.000000 + -1 0 -1 7 8 -0.001875 0.000000 + -1 0 -1 8 8 0.000971 0.000000 + -1 0 -1 9 8 0.016089 -0.000000 + -1 0 -1 10 8 0.004160 -0.000000 + -1 0 -1 11 8 0.000046 -0.000000 + -1 0 -1 12 8 -0.003257 -0.000000 + -1 0 -1 1 9 0.000561 -0.000000 + -1 0 -1 2 9 -0.000746 -0.000000 + -1 0 -1 3 9 0.002086 0.000000 + -1 0 -1 4 9 0.000790 0.000000 + -1 0 -1 5 9 0.001055 -0.000000 + -1 0 -1 6 9 0.001687 -0.000000 + -1 0 -1 7 9 0.010883 0.000000 + -1 0 -1 8 9 0.016089 0.000000 + -1 0 -1 9 9 -0.005433 0.000000 + -1 0 -1 10 9 -0.003257 0.000000 + -1 0 -1 11 9 0.007908 0.000000 + -1 0 -1 12 9 -0.001138 0.000000 + -1 0 -1 1 10 -0.021525 -0.000000 + -1 0 -1 2 10 -0.023372 -0.000000 + -1 0 -1 3 10 0.008426 -0.000000 + -1 0 -1 4 10 -0.008805 0.000000 + -1 0 -1 5 10 0.001251 -0.000000 + -1 0 -1 6 10 -0.003121 -0.000000 + -1 0 -1 7 10 0.131177 -0.000000 + -1 0 -1 8 10 -0.114958 0.000000 + -1 0 -1 9 10 0.031897 0.000000 + -1 0 -1 10 10 0.005370 0.000000 + -1 0 -1 11 10 -0.002479 0.000000 + -1 0 -1 12 10 0.013477 0.000000 + -1 0 -1 1 11 0.020930 0.000000 + -1 0 -1 2 11 0.053346 0.000000 + -1 0 -1 3 11 0.003970 -0.000000 + -1 0 -1 4 11 0.004941 -0.000000 + -1 0 -1 5 11 0.000182 0.000000 + -1 0 -1 6 11 -0.014966 0.000000 + -1 0 -1 7 11 0.117955 -0.000000 + -1 0 -1 8 11 -0.029678 -0.000000 + -1 0 -1 9 11 0.021868 -0.000000 + -1 0 -1 10 11 -0.002479 -0.000000 + -1 0 -1 11 11 -0.002576 0.000000 + -1 0 -1 12 11 -0.012014 -0.000000 + -1 0 -1 1 12 0.002735 -0.000000 + -1 0 -1 2 12 -0.001648 -0.000000 + -1 0 -1 3 12 0.001823 -0.000000 + -1 0 -1 4 12 -0.001717 -0.000000 + -1 0 -1 5 12 0.000792 -0.000000 + -1 0 -1 6 12 -0.004089 -0.000000 + -1 0 -1 7 12 0.042312 -0.000000 + -1 0 -1 8 12 -0.080588 0.000000 + -1 0 -1 9 12 -0.191389 -0.000000 + -1 0 -1 10 12 0.013477 -0.000000 + -1 0 -1 11 12 -0.012014 0.000000 + -1 0 -1 12 12 -0.011804 -0.000000 + -1 0 0 1 1 0.001945 0.000000 + -1 0 0 2 1 0.005620 0.000000 + -1 0 0 3 1 0.009668 0.000000 + -1 0 0 4 1 -0.029678 0.000000 + -1 0 0 5 1 0.117955 0.000000 + -1 0 0 6 1 -0.021868 0.000000 + -1 0 0 7 1 -0.177076 0.000000 + -1 0 0 8 1 0.021015 -0.000000 + -1 0 0 9 1 0.019597 -0.000000 + -1 0 0 10 1 0.001463 -0.000000 + -1 0 0 11 1 0.005262 -0.000000 + -1 0 0 12 1 0.004782 -0.000000 + -1 0 0 1 2 0.005620 -0.000000 + -1 0 0 2 2 -0.000637 -0.000000 + -1 0 0 3 2 0.014431 0.000000 + -1 0 0 4 2 -0.114958 0.000000 + -1 0 0 5 2 0.131177 -0.000000 + -1 0 0 6 2 -0.031897 0.000000 + -1 0 0 7 2 0.021015 -0.000000 + -1 0 0 8 2 -0.223461 -0.000000 + -1 0 0 9 2 0.045911 0.000000 + -1 0 0 10 2 0.002999 -0.000000 + -1 0 0 11 2 0.001463 0.000000 + -1 0 0 12 2 -0.000263 0.000000 + -1 0 0 1 3 0.009668 -0.000000 + -1 0 0 2 3 0.014431 -0.000000 + -1 0 0 3 3 -0.073208 -0.000000 + -1 0 0 4 3 0.080588 -0.000000 + -1 0 0 5 3 -0.042312 -0.000000 + -1 0 0 6 3 -0.191389 0.000000 + -1 0 0 7 3 -0.019597 -0.000000 + -1 0 0 8 3 -0.045911 -0.000000 + -1 0 0 9 3 -0.039538 -0.000000 + -1 0 0 10 3 0.000263 -0.000000 + -1 0 0 11 3 -0.004782 -0.000000 + -1 0 0 12 3 -0.004078 -0.000000 + -1 0 0 1 4 -0.001355 0.000000 + -1 0 0 2 4 0.006074 0.000000 + -1 0 0 3 4 0.008388 0.000000 + -1 0 0 4 4 -0.000637 0.000000 + -1 0 0 5 4 0.005620 0.000000 + -1 0 0 6 4 0.014431 0.000000 + -1 0 0 7 4 0.042521 -0.000000 + -1 0 0 8 4 -0.023064 0.000000 + -1 0 0 9 4 -0.003338 0.000000 + -1 0 0 10 4 -0.001053 0.000000 + -1 0 0 11 4 0.001885 0.000000 + -1 0 0 12 4 -0.012679 0.000000 + -1 0 0 1 5 -0.001701 0.000000 + -1 0 0 2 5 -0.001355 -0.000000 + -1 0 0 3 5 0.002485 0.000000 + -1 0 0 4 5 0.005620 -0.000000 + -1 0 0 5 5 0.001945 -0.000000 + -1 0 0 6 5 0.009668 0.000000 + -1 0 0 7 5 0.036873 -0.000000 + -1 0 0 8 5 -0.018379 0.000000 + -1 0 0 9 5 0.012364 0.000000 + -1 0 0 10 5 -0.008855 0.000000 + -1 0 0 11 5 -0.009884 -0.000000 + -1 0 0 12 5 0.016241 0.000000 + -1 0 0 1 6 0.002485 -0.000000 + -1 0 0 2 6 0.008388 -0.000000 + -1 0 0 3 6 -0.009679 -0.000000 + -1 0 0 4 6 0.014431 0.000000 + -1 0 0 5 6 0.009668 -0.000000 + -1 0 0 6 6 -0.073208 0.000000 + -1 0 0 7 6 0.001922 0.000000 + -1 0 0 8 6 -0.002867 0.000000 + -1 0 0 9 6 0.001533 -0.000000 + -1 0 0 10 6 -0.005382 0.000000 + -1 0 0 11 6 -0.003898 0.000000 + -1 0 0 12 6 -0.006667 0.000000 + -1 0 0 1 7 -0.009884 -0.000000 + -1 0 0 2 7 -0.008855 -0.000000 + -1 0 0 3 7 -0.016241 -0.000000 + -1 0 0 4 7 0.001463 0.000000 + -1 0 0 5 7 0.005262 0.000000 + -1 0 0 6 7 -0.004782 0.000000 + -1 0 0 7 7 0.001945 0.000000 + -1 0 0 8 7 0.005620 0.000000 + -1 0 0 9 7 -0.009668 -0.000000 + -1 0 0 10 7 0.131177 0.000000 + -1 0 0 11 7 0.117955 0.000000 + -1 0 0 12 7 0.042312 0.000000 + -1 0 0 1 8 0.001885 -0.000000 + -1 0 0 2 8 -0.001053 0.000000 + -1 0 0 3 8 0.012679 -0.000000 + -1 0 0 4 8 0.002999 -0.000000 + -1 0 0 5 8 0.001463 -0.000000 + -1 0 0 6 8 0.000263 -0.000000 + -1 0 0 7 8 0.005620 -0.000000 + -1 0 0 8 8 -0.000637 0.000000 + -1 0 0 9 8 -0.014431 -0.000000 + -1 0 0 10 8 -0.114958 -0.000000 + -1 0 0 11 8 -0.029678 0.000000 + -1 0 0 12 8 -0.080588 -0.000000 + -1 0 0 1 9 0.003898 -0.000000 + -1 0 0 2 9 0.005382 -0.000000 + -1 0 0 3 9 -0.006667 0.000000 + -1 0 0 4 9 -0.000263 0.000000 + -1 0 0 5 9 0.004782 0.000000 + -1 0 0 6 9 -0.004078 0.000000 + -1 0 0 7 9 -0.009668 0.000000 + -1 0 0 8 9 -0.014431 0.000000 + -1 0 0 9 9 -0.073208 -0.000000 + -1 0 0 10 9 0.031897 -0.000000 + -1 0 0 11 9 0.021868 0.000000 + -1 0 0 12 9 -0.191389 0.000000 + -1 0 0 1 10 0.042521 -0.000000 + -1 0 0 2 10 -0.023064 0.000000 + -1 0 0 3 10 0.003338 -0.000000 + -1 0 0 4 10 -0.223461 0.000000 + -1 0 0 5 10 0.021015 -0.000000 + -1 0 0 6 10 -0.045911 0.000000 + -1 0 0 7 10 -0.029678 0.000000 + -1 0 0 8 10 -0.114958 -0.000000 + -1 0 0 9 10 -0.080588 0.000000 + -1 0 0 10 10 -0.000637 -0.000000 + -1 0 0 11 10 0.005620 0.000000 + -1 0 0 12 10 -0.014431 -0.000000 + -1 0 0 1 11 0.036873 -0.000000 + -1 0 0 2 11 -0.018379 -0.000000 + -1 0 0 3 11 -0.012364 -0.000000 + -1 0 0 4 11 0.021015 0.000000 + -1 0 0 5 11 -0.177076 -0.000000 + -1 0 0 6 11 -0.019597 0.000000 + -1 0 0 7 11 0.117955 0.000000 + -1 0 0 8 11 0.131177 0.000000 + -1 0 0 9 11 0.042312 0.000000 + -1 0 0 10 11 0.005620 -0.000000 + -1 0 0 11 11 0.001945 -0.000000 + -1 0 0 12 11 -0.009668 -0.000000 + -1 0 0 1 12 -0.001922 -0.000000 + -1 0 0 2 12 0.002867 0.000000 + -1 0 0 3 12 0.001533 0.000000 + -1 0 0 4 12 0.045911 0.000000 + -1 0 0 5 12 0.019597 0.000000 + -1 0 0 6 12 -0.039538 -0.000000 + -1 0 0 7 12 0.021868 -0.000000 + -1 0 0 8 12 0.031897 0.000000 + -1 0 0 9 12 -0.191389 -0.000000 + -1 0 0 10 12 -0.014431 0.000000 + -1 0 0 11 12 -0.009668 0.000000 + -1 0 0 12 12 -0.073208 0.000000 + -1 0 1 1 1 -0.002576 0.000000 + -1 0 1 2 1 -0.002479 -0.000000 + -1 0 1 3 1 0.012014 0.000000 + -1 0 1 4 1 0.131177 0.000000 + -1 0 1 5 1 0.117955 0.000000 + -1 0 1 6 1 -0.042312 0.000000 + -1 0 1 7 1 0.000182 -0.000000 + -1 0 1 8 1 0.004941 0.000000 + -1 0 1 9 1 0.014966 0.000000 + -1 0 1 10 1 -0.002409 0.000000 + -1 0 1 11 1 -0.000864 -0.000000 + -1 0 1 12 1 -0.000583 -0.000000 + -1 0 1 1 2 -0.002479 0.000000 + -1 0 1 2 2 0.005370 -0.000000 + -1 0 1 3 2 -0.013477 -0.000000 + -1 0 1 4 2 -0.114958 0.000000 + -1 0 1 5 2 -0.029678 0.000000 + -1 0 1 6 2 0.080588 0.000000 + -1 0 1 7 2 0.001251 -0.000000 + -1 0 1 8 2 -0.008805 -0.000000 + -1 0 1 9 2 0.003121 0.000000 + -1 0 1 10 2 -0.003521 -0.000000 + -1 0 1 11 2 -0.002409 -0.000000 + -1 0 1 12 2 -0.003296 -0.000000 + -1 0 1 1 3 0.012014 -0.000000 + -1 0 1 2 3 -0.013477 -0.000000 + -1 0 1 3 3 -0.011804 -0.000000 + -1 0 1 4 3 -0.031897 0.000000 + -1 0 1 5 3 -0.021868 -0.000000 + -1 0 1 6 3 -0.191389 0.000000 + -1 0 1 7 3 -0.000792 -0.000000 + -1 0 1 8 3 0.001717 0.000000 + -1 0 1 9 3 -0.004089 -0.000000 + -1 0 1 10 3 0.003296 -0.000000 + -1 0 1 11 3 0.000583 -0.000000 + -1 0 1 12 3 -0.002678 0.000000 + -1 0 1 1 4 -0.002049 0.000000 + -1 0 1 2 4 0.001565 -0.000000 + -1 0 1 3 4 0.011447 -0.000000 + -1 0 1 4 4 0.000971 0.000000 + -1 0 1 5 4 -0.001875 -0.000000 + -1 0 1 6 4 -0.016089 0.000000 + -1 0 1 7 4 -0.000059 -0.000000 + -1 0 1 8 4 -0.000289 -0.000000 + -1 0 1 9 4 -0.002151 -0.000000 + -1 0 1 10 4 -0.000480 0.000000 + -1 0 1 11 4 0.000633 0.000000 + -1 0 1 12 4 0.002537 0.000000 + -1 0 1 1 5 -0.007888 0.000000 + -1 0 1 2 5 -0.002049 0.000000 + -1 0 1 3 5 0.000537 0.000000 + -1 0 1 4 5 -0.001875 0.000000 + -1 0 1 5 5 -0.003709 -0.000000 + -1 0 1 6 5 -0.010883 0.000000 + -1 0 1 7 5 -0.001067 0.000000 + -1 0 1 8 5 -0.000808 0.000000 + -1 0 1 9 5 -0.000143 -0.000000 + -1 0 1 10 5 0.000572 -0.000000 + -1 0 1 11 5 -0.001131 -0.000000 + -1 0 1 12 5 0.000060 0.000000 + -1 0 1 1 6 0.000537 0.000000 + -1 0 1 2 6 0.011447 0.000000 + -1 0 1 3 6 0.017130 -0.000000 + -1 0 1 4 6 -0.016089 -0.000000 + -1 0 1 5 6 -0.010883 -0.000000 + -1 0 1 6 6 -0.005433 -0.000000 + -1 0 1 7 6 0.003255 0.000000 + -1 0 1 8 6 -0.004567 0.000000 + -1 0 1 9 6 -0.000284 -0.000000 + -1 0 1 10 6 0.000746 0.000000 + -1 0 1 11 6 -0.000561 -0.000000 + -1 0 1 12 6 0.002086 0.000000 + -1 0 1 1 7 0.000656 0.000000 + -1 0 1 2 7 -0.000661 -0.000000 + -1 0 1 3 7 0.005132 0.000000 + -1 0 1 4 7 -0.002409 -0.000000 + -1 0 1 5 7 -0.000864 -0.000000 + -1 0 1 6 7 0.000583 0.000000 + -1 0 1 7 7 -0.002576 0.000000 + -1 0 1 8 7 -0.002479 -0.000000 + -1 0 1 9 7 -0.012014 -0.000000 + -1 0 1 10 7 -0.029678 -0.000000 + -1 0 1 11 7 0.117955 -0.000000 + -1 0 1 12 7 0.021868 0.000000 + -1 0 1 1 8 -0.003898 -0.000000 + -1 0 1 2 8 -0.004057 -0.000000 + -1 0 1 3 8 0.005418 0.000000 + -1 0 1 4 8 -0.003521 0.000000 + -1 0 1 5 8 -0.002409 0.000000 + -1 0 1 6 8 0.003296 0.000000 + -1 0 1 7 8 -0.002479 0.000000 + -1 0 1 8 8 0.005370 -0.000000 + -1 0 1 9 8 0.013477 0.000000 + -1 0 1 10 8 -0.114958 0.000000 + -1 0 1 11 8 0.131177 -0.000000 + -1 0 1 12 8 0.031897 -0.000000 + -1 0 1 1 9 -0.002035 -0.000000 + -1 0 1 2 9 -0.002825 0.000000 + -1 0 1 3 9 0.003373 -0.000000 + -1 0 1 4 9 -0.003296 -0.000000 + -1 0 1 5 9 -0.000583 0.000000 + -1 0 1 6 9 -0.002678 -0.000000 + -1 0 1 7 9 -0.012014 0.000000 + -1 0 1 8 9 0.013477 -0.000000 + -1 0 1 9 9 -0.011804 -0.000000 + -1 0 1 10 9 -0.080588 -0.000000 + -1 0 1 11 9 0.042312 -0.000000 + -1 0 1 12 9 -0.191389 0.000000 + -1 0 1 1 10 -0.000059 -0.000000 + -1 0 1 2 10 -0.000289 0.000000 + -1 0 1 3 10 0.002151 0.000000 + -1 0 1 4 10 -0.008805 0.000000 + -1 0 1 5 10 0.004941 0.000000 + -1 0 1 6 10 0.001717 -0.000000 + -1 0 1 7 10 0.000046 -0.000000 + -1 0 1 8 10 0.004160 0.000000 + -1 0 1 9 10 -0.003257 -0.000000 + -1 0 1 10 10 0.000971 0.000000 + -1 0 1 11 10 -0.001875 -0.000000 + -1 0 1 12 10 0.016089 -0.000000 + -1 0 1 1 11 -0.001067 -0.000000 + -1 0 1 2 11 -0.000808 -0.000000 + -1 0 1 3 11 0.000143 -0.000000 + -1 0 1 4 11 0.001251 -0.000000 + -1 0 1 5 11 0.000182 -0.000000 + -1 0 1 6 11 -0.000792 0.000000 + -1 0 1 7 11 -0.000356 0.000000 + -1 0 1 8 11 0.000046 -0.000000 + -1 0 1 9 11 0.007908 -0.000000 + -1 0 1 10 11 -0.001875 0.000000 + -1 0 1 11 11 -0.003709 -0.000000 + -1 0 1 12 11 0.010883 -0.000000 + -1 0 1 1 12 -0.003255 -0.000000 + -1 0 1 2 12 0.004567 -0.000000 + -1 0 1 3 12 -0.000284 -0.000000 + -1 0 1 4 12 0.003121 -0.000000 + -1 0 1 5 12 0.014966 -0.000000 + -1 0 1 6 12 -0.004089 0.000000 + -1 0 1 7 12 0.007908 0.000000 + -1 0 1 8 12 -0.003257 0.000000 + -1 0 1 9 12 -0.001138 0.000000 + -1 0 1 10 12 0.016089 0.000000 + -1 0 1 11 12 0.010883 0.000000 + -1 0 1 12 12 -0.005433 0.000000 + -1 1 -1 1 1 -0.004024 -0.000000 + -1 1 -1 2 1 -0.005064 0.000000 + -1 1 -1 3 1 -0.001761 0.000000 + -1 1 -1 4 1 -0.000117 0.000000 + -1 1 -1 5 1 0.001789 0.000000 + -1 1 -1 6 1 0.001063 0.000000 + -1 1 -1 7 1 0.000182 0.000000 + -1 1 -1 8 1 0.004941 0.000000 + -1 1 -1 9 1 0.014966 0.000000 + -1 1 -1 10 1 0.001052 0.000000 + -1 1 -1 11 1 0.004249 0.000000 + -1 1 -1 12 1 0.001055 -0.000000 + -1 1 -1 1 2 -0.005064 0.000000 + -1 1 -1 2 2 -0.005524 -0.000000 + -1 1 -1 3 2 -0.000745 0.000000 + -1 1 -1 4 2 -0.002085 0.000000 + -1 1 -1 5 2 -0.000117 0.000000 + -1 1 -1 6 2 -0.000794 -0.000000 + -1 1 -1 7 2 0.001251 -0.000000 + -1 1 -1 8 2 -0.008805 -0.000000 + -1 1 -1 9 2 0.003121 0.000000 + -1 1 -1 10 2 -0.000692 -0.000000 + -1 1 -1 11 2 0.001052 -0.000000 + -1 1 -1 12 2 0.000790 0.000000 + -1 1 -1 1 3 -0.001761 -0.000000 + -1 1 -1 2 3 -0.000745 -0.000000 + -1 1 -1 3 3 -0.001184 -0.000000 + -1 1 -1 4 3 -0.000794 -0.000000 + -1 1 -1 5 3 0.001063 0.000000 + -1 1 -1 6 3 0.000522 0.000000 + -1 1 -1 7 3 -0.000792 0.000000 + -1 1 -1 8 3 0.001717 0.000000 + -1 1 -1 9 3 -0.004089 -0.000000 + -1 1 -1 10 3 -0.000790 0.000000 + -1 1 -1 11 3 -0.001055 -0.000000 + -1 1 -1 12 3 0.001687 -0.000000 + -1 1 -1 1 4 0.001100 0.000000 + -1 1 -1 2 4 -0.001519 -0.000000 + -1 1 -1 3 4 0.000143 0.000000 + -1 1 -1 4 4 -0.002725 0.000000 + -1 1 -1 5 4 0.003360 -0.000000 + -1 1 -1 6 4 0.002175 0.000000 + -1 1 -1 7 4 -0.018379 0.000000 + -1 1 -1 8 4 -0.023064 -0.000000 + -1 1 -1 9 4 0.002867 0.000000 + -1 1 -1 10 4 -0.004057 -0.000000 + -1 1 -1 11 4 -0.000661 -0.000000 + -1 1 -1 12 4 -0.002825 0.000000 + -1 1 -1 1 5 0.003927 0.000000 + -1 1 -1 2 5 0.001100 -0.000000 + -1 1 -1 3 5 0.001020 0.000000 + -1 1 -1 4 5 0.003360 -0.000000 + -1 1 -1 5 5 -0.006576 0.000000 + -1 1 -1 6 5 0.000661 0.000000 + -1 1 -1 7 5 0.036873 0.000000 + -1 1 -1 8 5 0.042521 0.000000 + -1 1 -1 9 5 -0.001922 0.000000 + -1 1 -1 10 5 -0.003898 0.000000 + -1 1 -1 11 5 0.000656 -0.000000 + -1 1 -1 12 5 -0.002035 -0.000000 + -1 1 -1 1 6 0.001020 -0.000000 + -1 1 -1 2 6 0.000143 -0.000000 + -1 1 -1 3 6 0.000617 0.000000 + -1 1 -1 4 6 0.002175 -0.000000 + -1 1 -1 5 6 0.000661 -0.000000 + -1 1 -1 6 6 -0.001782 0.000000 + -1 1 -1 7 6 -0.012364 0.000000 + -1 1 -1 8 6 0.003338 0.000000 + -1 1 -1 9 6 0.001533 -0.000000 + -1 1 -1 10 6 0.005418 -0.000000 + -1 1 -1 11 6 0.005132 0.000000 + -1 1 -1 12 6 0.003373 -0.000000 + -1 1 -1 1 7 -0.001131 -0.000000 + -1 1 -1 2 7 0.000633 -0.000000 + -1 1 -1 3 7 -0.000561 -0.000000 + -1 1 -1 4 7 0.001052 -0.000000 + -1 1 -1 5 7 0.004249 0.000000 + -1 1 -1 6 7 -0.001055 0.000000 + -1 1 -1 7 7 -0.004024 -0.000000 + -1 1 -1 8 7 -0.005064 0.000000 + -1 1 -1 9 7 0.001761 -0.000000 + -1 1 -1 10 7 -0.000117 0.000000 + -1 1 -1 11 7 0.001789 0.000000 + -1 1 -1 12 7 -0.001063 -0.000000 + -1 1 -1 1 8 0.000572 0.000000 + -1 1 -1 2 8 -0.000480 -0.000000 + -1 1 -1 3 8 0.000746 -0.000000 + -1 1 -1 4 8 -0.000692 0.000000 + -1 1 -1 5 8 0.001052 0.000000 + -1 1 -1 6 8 -0.000790 0.000000 + -1 1 -1 7 8 -0.005064 0.000000 + -1 1 -1 8 8 -0.005524 -0.000000 + -1 1 -1 9 8 0.000745 -0.000000 + -1 1 -1 10 8 -0.002085 -0.000000 + -1 1 -1 11 8 -0.000117 0.000000 + -1 1 -1 12 8 0.000794 0.000000 + -1 1 -1 1 9 0.000060 -0.000000 + -1 1 -1 2 9 0.002537 0.000000 + -1 1 -1 3 9 0.002086 -0.000000 + -1 1 -1 4 9 0.000790 -0.000000 + -1 1 -1 5 9 0.001055 -0.000000 + -1 1 -1 6 9 0.001687 -0.000000 + -1 1 -1 7 9 0.001761 0.000000 + -1 1 -1 8 9 0.000745 0.000000 + -1 1 -1 9 9 -0.001184 -0.000000 + -1 1 -1 10 9 0.000794 0.000000 + -1 1 -1 11 9 -0.001063 -0.000000 + -1 1 -1 12 9 0.000522 -0.000000 + -1 1 -1 1 10 -0.018379 -0.000000 + -1 1 -1 2 10 -0.023064 -0.000000 + -1 1 -1 3 10 -0.002867 -0.000000 + -1 1 -1 4 10 -0.008805 0.000000 + -1 1 -1 5 10 0.004941 0.000000 + -1 1 -1 6 10 0.001717 -0.000000 + -1 1 -1 7 10 0.011154 -0.000000 + -1 1 -1 8 10 -0.004731 0.000000 + -1 1 -1 9 10 -0.004392 -0.000000 + -1 1 -1 10 10 -0.002725 0.000000 + -1 1 -1 11 10 0.003360 0.000000 + -1 1 -1 12 10 -0.002175 -0.000000 + -1 1 -1 1 11 0.036873 0.000000 + -1 1 -1 2 11 0.042521 0.000000 + -1 1 -1 3 11 0.001922 -0.000000 + -1 1 -1 4 11 0.001251 -0.000000 + -1 1 -1 5 11 0.000182 0.000000 + -1 1 -1 6 11 -0.000792 -0.000000 + -1 1 -1 7 11 -0.003540 0.000000 + -1 1 -1 8 11 -0.010651 -0.000000 + -1 1 -1 9 11 -0.000453 -0.000000 + -1 1 -1 10 11 0.003360 -0.000000 + -1 1 -1 11 11 -0.006576 0.000000 + -1 1 -1 12 11 -0.000661 -0.000000 + -1 1 -1 1 12 0.012364 -0.000000 + -1 1 -1 2 12 -0.003338 -0.000000 + -1 1 -1 3 12 0.001533 -0.000000 + -1 1 -1 4 12 0.003121 -0.000000 + -1 1 -1 5 12 0.014966 -0.000000 + -1 1 -1 6 12 -0.004089 0.000000 + -1 1 -1 7 12 0.003444 0.000000 + -1 1 -1 8 12 0.000487 0.000000 + -1 1 -1 9 12 -0.000782 -0.000000 + -1 1 -1 10 12 -0.002175 0.000000 + -1 1 -1 11 12 -0.000661 0.000000 + -1 1 -1 12 12 -0.001782 0.000000 + -1 1 0 1 1 -0.006750 -0.000000 + -1 1 0 2 1 -0.003264 -0.000000 + -1 1 0 3 1 -0.003360 -0.000000 + -1 1 0 4 1 -0.010651 -0.000000 + -1 1 0 5 1 -0.003540 -0.000000 + -1 1 0 6 1 0.000453 0.000000 + -1 1 0 7 1 -0.177076 0.000000 + -1 1 0 8 1 0.021015 -0.000000 + -1 1 0 9 1 0.019597 -0.000000 + -1 1 0 10 1 -0.002409 -0.000000 + -1 1 0 11 1 -0.000864 -0.000000 + -1 1 0 12 1 -0.000583 -0.000000 + -1 1 0 1 2 -0.003264 -0.000000 + -1 1 0 2 2 0.003393 -0.000000 + -1 1 0 3 2 -0.003295 -0.000000 + -1 1 0 4 2 -0.004731 -0.000000 + -1 1 0 5 2 0.011154 -0.000000 + -1 1 0 6 2 0.004392 0.000000 + -1 1 0 7 2 0.021015 -0.000000 + -1 1 0 8 2 -0.223461 -0.000000 + -1 1 0 9 2 0.045911 0.000000 + -1 1 0 10 2 -0.003521 -0.000000 + -1 1 0 11 2 -0.002409 0.000000 + -1 1 0 12 2 -0.003296 0.000000 + -1 1 0 1 3 -0.003360 -0.000000 + -1 1 0 2 3 -0.003295 0.000000 + -1 1 0 3 3 0.000512 0.000000 + -1 1 0 4 3 -0.000487 -0.000000 + -1 1 0 5 3 -0.003444 -0.000000 + -1 1 0 6 3 -0.000782 0.000000 + -1 1 0 7 3 -0.019597 0.000000 + -1 1 0 8 3 -0.045911 -0.000000 + -1 1 0 9 3 -0.039538 -0.000000 + -1 1 0 10 3 0.003296 -0.000000 + -1 1 0 11 3 0.000583 -0.000000 + -1 1 0 12 3 -0.002678 -0.000000 + -1 1 0 1 4 0.001100 0.000000 + -1 1 0 2 4 -0.001519 -0.000000 + -1 1 0 3 4 0.000143 0.000000 + -1 1 0 4 4 0.003393 0.000000 + -1 1 0 5 4 -0.003264 0.000000 + -1 1 0 6 4 -0.003295 0.000000 + -1 1 0 7 4 0.053346 -0.000000 + -1 1 0 8 4 -0.023372 0.000000 + -1 1 0 9 4 -0.001648 0.000000 + -1 1 0 10 4 -0.001053 -0.000000 + -1 1 0 11 4 -0.008855 0.000000 + -1 1 0 12 4 0.005382 0.000000 + -1 1 0 1 5 0.003927 -0.000000 + -1 1 0 2 5 0.001100 -0.000000 + -1 1 0 3 5 0.001020 0.000000 + -1 1 0 4 5 -0.003264 0.000000 + -1 1 0 5 5 -0.006750 -0.000000 + -1 1 0 6 5 -0.003360 0.000000 + -1 1 0 7 5 0.020930 -0.000000 + -1 1 0 8 5 -0.021525 0.000000 + -1 1 0 9 5 0.002735 0.000000 + -1 1 0 10 5 0.001885 0.000000 + -1 1 0 11 5 -0.009884 0.000000 + -1 1 0 12 5 0.003898 0.000000 + -1 1 0 1 6 0.001020 -0.000000 + -1 1 0 2 6 0.000143 -0.000000 + -1 1 0 3 6 0.000617 0.000000 + -1 1 0 4 6 -0.003295 -0.000000 + -1 1 0 5 6 -0.003360 -0.000000 + -1 1 0 6 6 0.000512 -0.000000 + -1 1 0 7 6 0.003970 0.000000 + -1 1 0 8 6 0.008426 0.000000 + -1 1 0 9 6 0.001823 -0.000000 + -1 1 0 10 6 0.012679 0.000000 + -1 1 0 11 6 -0.016241 0.000000 + -1 1 0 12 6 -0.006667 -0.000000 + -1 1 0 1 7 -0.009884 -0.000000 + -1 1 0 2 7 0.001885 -0.000000 + -1 1 0 3 7 -0.003898 -0.000000 + -1 1 0 4 7 -0.002409 0.000000 + -1 1 0 5 7 -0.000864 0.000000 + -1 1 0 6 7 0.000583 0.000000 + -1 1 0 7 7 -0.006750 0.000000 + -1 1 0 8 7 -0.003264 0.000000 + -1 1 0 9 7 0.003360 -0.000000 + -1 1 0 10 7 0.011154 0.000000 + -1 1 0 11 7 -0.003540 -0.000000 + -1 1 0 12 7 0.003444 -0.000000 + -1 1 0 1 8 -0.008855 -0.000000 + -1 1 0 2 8 -0.001053 0.000000 + -1 1 0 3 8 -0.005382 -0.000000 + -1 1 0 4 8 -0.003521 0.000000 + -1 1 0 5 8 -0.002409 0.000000 + -1 1 0 6 8 0.003296 -0.000000 + -1 1 0 7 8 -0.003264 0.000000 + -1 1 0 8 8 0.003393 0.000000 + -1 1 0 9 8 0.003295 0.000000 + -1 1 0 10 8 -0.004731 -0.000000 + -1 1 0 11 8 -0.010651 0.000000 + -1 1 0 12 8 0.000487 -0.000000 + -1 1 0 1 9 0.016241 -0.000000 + -1 1 0 2 9 -0.012679 -0.000000 + -1 1 0 3 9 -0.006667 0.000000 + -1 1 0 4 9 -0.003296 0.000000 + -1 1 0 5 9 -0.000583 0.000000 + -1 1 0 6 9 -0.002678 -0.000000 + -1 1 0 7 9 0.003360 0.000000 + -1 1 0 8 9 0.003295 -0.000000 + -1 1 0 9 9 0.000512 -0.000000 + -1 1 0 10 9 -0.004392 0.000000 + -1 1 0 11 9 -0.000453 0.000000 + -1 1 0 12 9 -0.000782 0.000000 + -1 1 0 1 10 0.053346 -0.000000 + -1 1 0 2 10 -0.023372 0.000000 + -1 1 0 3 10 0.001648 -0.000000 + -1 1 0 4 10 -0.223461 0.000000 + -1 1 0 5 10 0.021015 -0.000000 + -1 1 0 6 10 -0.045911 0.000000 + -1 1 0 7 10 -0.010651 0.000000 + -1 1 0 8 10 -0.004731 0.000000 + -1 1 0 9 10 0.000487 0.000000 + -1 1 0 10 10 0.003393 -0.000000 + -1 1 0 11 10 -0.003264 -0.000000 + -1 1 0 12 10 0.003295 -0.000000 + -1 1 0 1 11 0.020930 0.000000 + -1 1 0 2 11 -0.021525 -0.000000 + -1 1 0 3 11 -0.002735 -0.000000 + -1 1 0 4 11 0.021015 0.000000 + -1 1 0 5 11 -0.177076 -0.000000 + -1 1 0 6 11 -0.019597 0.000000 + -1 1 0 7 11 -0.003540 0.000000 + -1 1 0 8 11 0.011154 0.000000 + -1 1 0 9 11 0.003444 0.000000 + -1 1 0 10 11 -0.003264 0.000000 + -1 1 0 11 11 -0.006750 -0.000000 + -1 1 0 12 11 0.003360 -0.000000 + -1 1 0 1 12 -0.003970 -0.000000 + -1 1 0 2 12 -0.008426 0.000000 + -1 1 0 3 12 0.001823 0.000000 + -1 1 0 4 12 0.045911 0.000000 + -1 1 0 5 12 0.019597 0.000000 + -1 1 0 6 12 -0.039538 0.000000 + -1 1 0 7 12 -0.000453 0.000000 + -1 1 0 8 12 -0.004392 0.000000 + -1 1 0 9 12 -0.000782 0.000000 + -1 1 0 10 12 0.003295 0.000000 + -1 1 0 11 12 0.003360 0.000000 + -1 1 0 12 12 0.000512 0.000000 + -1 1 1 1 1 -0.006576 -0.000000 + -1 1 1 2 1 0.003360 0.000000 + -1 1 1 3 1 0.000661 -0.000000 + -1 1 1 4 1 0.011154 0.000000 + -1 1 1 5 1 -0.003540 -0.000000 + -1 1 1 6 1 -0.003444 0.000000 + -1 1 1 7 1 0.000182 -0.000000 + -1 1 1 8 1 0.001251 0.000000 + -1 1 1 9 1 0.000792 -0.000000 + -1 1 1 10 1 0.001463 -0.000000 + -1 1 1 11 1 0.005262 -0.000000 + -1 1 1 12 1 0.004782 0.000000 + -1 1 1 1 2 0.003360 -0.000000 + -1 1 1 2 2 -0.002725 0.000000 + -1 1 1 3 2 0.002175 -0.000000 + -1 1 1 4 2 -0.004731 -0.000000 + -1 1 1 5 2 -0.010651 0.000000 + -1 1 1 6 2 -0.000487 0.000000 + -1 1 1 7 2 0.004941 -0.000000 + -1 1 1 8 2 -0.008805 0.000000 + -1 1 1 9 2 -0.001717 0.000000 + -1 1 1 10 2 0.002999 -0.000000 + -1 1 1 11 2 0.001463 0.000000 + -1 1 1 12 2 -0.000263 0.000000 + -1 1 1 1 3 0.000661 -0.000000 + -1 1 1 2 3 0.002175 -0.000000 + -1 1 1 3 3 -0.001782 0.000000 + -1 1 1 4 3 0.004392 -0.000000 + -1 1 1 5 3 0.000453 -0.000000 + -1 1 1 6 3 -0.000782 0.000000 + -1 1 1 7 3 -0.014966 -0.000000 + -1 1 1 8 3 -0.003121 0.000000 + -1 1 1 9 3 -0.004089 0.000000 + -1 1 1 10 3 0.000263 -0.000000 + -1 1 1 11 3 -0.004782 -0.000000 + -1 1 1 12 3 -0.004078 -0.000000 + -1 1 1 1 4 -0.000136 0.000000 + -1 1 1 2 4 -0.000701 -0.000000 + -1 1 1 3 4 -0.000218 0.000000 + -1 1 1 4 4 -0.005524 -0.000000 + -1 1 1 5 4 -0.005064 -0.000000 + -1 1 1 6 4 -0.000745 0.000000 + -1 1 1 7 4 -0.000808 -0.000000 + -1 1 1 8 4 -0.000289 -0.000000 + -1 1 1 9 4 0.004567 -0.000000 + -1 1 1 10 4 -0.000480 -0.000000 + -1 1 1 11 4 0.000572 0.000000 + -1 1 1 12 4 -0.000746 0.000000 + -1 1 1 1 5 -0.000898 -0.000000 + -1 1 1 2 5 -0.000136 0.000000 + -1 1 1 3 5 -0.000411 0.000000 + -1 1 1 4 5 -0.005064 0.000000 + -1 1 1 5 5 -0.004024 0.000000 + -1 1 1 6 5 -0.001761 0.000000 + -1 1 1 7 5 -0.001067 -0.000000 + -1 1 1 8 5 -0.000059 0.000000 + -1 1 1 9 5 -0.003255 -0.000000 + -1 1 1 10 5 0.000633 -0.000000 + -1 1 1 11 5 -0.001131 -0.000000 + -1 1 1 12 5 0.000561 -0.000000 + -1 1 1 1 6 -0.000411 0.000000 + -1 1 1 2 6 -0.000218 -0.000000 + -1 1 1 3 6 0.000726 -0.000000 + -1 1 1 4 6 -0.000745 -0.000000 + -1 1 1 5 6 -0.001761 -0.000000 + -1 1 1 6 6 -0.001184 -0.000000 + -1 1 1 7 6 0.000143 -0.000000 + -1 1 1 8 6 0.002151 0.000000 + -1 1 1 9 6 -0.000284 0.000000 + -1 1 1 10 6 -0.002537 0.000000 + -1 1 1 11 6 -0.000060 0.000000 + -1 1 1 12 6 0.002086 -0.000000 + -1 1 1 1 7 0.000656 -0.000000 + -1 1 1 2 7 -0.003898 -0.000000 + -1 1 1 3 7 0.002035 -0.000000 + -1 1 1 4 7 0.001463 -0.000000 + -1 1 1 5 7 0.005262 0.000000 + -1 1 1 6 7 -0.004782 0.000000 + -1 1 1 7 7 -0.006576 0.000000 + -1 1 1 8 7 0.003360 -0.000000 + -1 1 1 9 7 -0.000661 -0.000000 + -1 1 1 10 7 -0.010651 -0.000000 + -1 1 1 11 7 -0.003540 -0.000000 + -1 1 1 12 7 -0.000453 -0.000000 + -1 1 1 1 8 -0.000661 -0.000000 + -1 1 1 2 8 -0.004057 0.000000 + -1 1 1 3 8 0.002825 0.000000 + -1 1 1 4 8 0.002999 -0.000000 + -1 1 1 5 8 0.001463 0.000000 + -1 1 1 6 8 0.000263 -0.000000 + -1 1 1 7 8 0.003360 -0.000000 + -1 1 1 8 8 -0.002725 -0.000000 + -1 1 1 9 8 -0.002175 -0.000000 + -1 1 1 10 8 -0.004731 -0.000000 + -1 1 1 11 8 0.011154 -0.000000 + -1 1 1 12 8 -0.004392 -0.000000 + -1 1 1 1 9 -0.005132 -0.000000 + -1 1 1 2 9 -0.005418 0.000000 + -1 1 1 3 9 0.003373 -0.000000 + -1 1 1 4 9 -0.000263 -0.000000 + -1 1 1 5 9 0.004782 -0.000000 + -1 1 1 6 9 -0.004078 -0.000000 + -1 1 1 7 9 -0.000661 0.000000 + -1 1 1 8 9 -0.002175 0.000000 + -1 1 1 9 9 -0.001782 -0.000000 + -1 1 1 10 9 0.000487 -0.000000 + -1 1 1 11 9 0.003444 -0.000000 + -1 1 1 12 9 -0.000782 -0.000000 + -1 1 1 1 10 -0.000808 -0.000000 + -1 1 1 2 10 -0.000289 0.000000 + -1 1 1 3 10 -0.004567 0.000000 + -1 1 1 4 10 -0.008805 0.000000 + -1 1 1 5 10 0.001251 0.000000 + -1 1 1 6 10 -0.003121 -0.000000 + -1 1 1 7 10 -0.000117 0.000000 + -1 1 1 8 10 -0.002085 -0.000000 + -1 1 1 9 10 0.000794 -0.000000 + -1 1 1 10 10 -0.005524 -0.000000 + -1 1 1 11 10 -0.005064 -0.000000 + -1 1 1 12 10 0.000745 -0.000000 + -1 1 1 1 11 -0.001067 -0.000000 + -1 1 1 2 11 -0.000059 -0.000000 + -1 1 1 3 11 0.003255 0.000000 + -1 1 1 4 11 0.004941 -0.000000 + -1 1 1 5 11 0.000182 0.000000 + -1 1 1 6 11 -0.014966 -0.000000 + -1 1 1 7 11 0.001789 -0.000000 + -1 1 1 8 11 -0.000117 -0.000000 + -1 1 1 9 11 -0.001063 0.000000 + -1 1 1 10 11 -0.005064 0.000000 + -1 1 1 11 11 -0.004024 -0.000000 + -1 1 1 12 11 0.001761 0.000000 + -1 1 1 1 12 -0.000143 0.000000 + -1 1 1 2 12 -0.002151 -0.000000 + -1 1 1 3 12 -0.000284 0.000000 + -1 1 1 4 12 -0.001717 -0.000000 + -1 1 1 5 12 0.000792 -0.000000 + -1 1 1 6 12 -0.004089 -0.000000 + -1 1 1 7 12 -0.001063 0.000000 + -1 1 1 8 12 0.000794 -0.000000 + -1 1 1 9 12 0.000522 -0.000000 + -1 1 1 10 12 0.000745 0.000000 + -1 1 1 11 12 0.001761 0.000000 + -1 1 1 12 12 -0.001184 0.000000 + 0 -1 -1 1 1 0.001281 0.000000 + 0 -1 -1 2 1 0.000516 0.000000 + 0 -1 -1 3 1 0.000711 -0.000000 + 0 -1 -1 4 1 -0.000117 0.000000 + 0 -1 -1 5 1 0.001789 -0.000000 + 0 -1 -1 6 1 0.001063 0.000000 + 0 -1 -1 7 1 -0.001131 0.000000 + 0 -1 -1 8 1 0.000633 -0.000000 + 0 -1 -1 9 1 0.000561 0.000000 + 0 -1 -1 10 1 -0.000059 0.000000 + 0 -1 -1 11 1 -0.001067 -0.000000 + 0 -1 -1 12 1 -0.003255 -0.000000 + 0 -1 -1 1 2 0.000516 -0.000000 + 0 -1 -1 2 2 -0.005886 -0.000000 + 0 -1 -1 3 2 -0.000662 0.000000 + 0 -1 -1 4 2 -0.002085 0.000000 + 0 -1 -1 5 2 -0.000117 0.000000 + 0 -1 -1 6 2 -0.000794 -0.000000 + 0 -1 -1 7 2 0.000572 0.000000 + 0 -1 -1 8 2 -0.000480 0.000000 + 0 -1 -1 9 2 -0.000746 0.000000 + 0 -1 -1 10 2 -0.000289 0.000000 + 0 -1 -1 11 2 -0.000808 0.000000 + 0 -1 -1 12 2 0.004567 0.000000 + 0 -1 -1 1 3 0.000711 0.000000 + 0 -1 -1 2 3 -0.000662 0.000000 + 0 -1 -1 3 3 0.000793 -0.000000 + 0 -1 -1 4 3 -0.000794 -0.000000 + 0 -1 -1 5 3 0.001063 0.000000 + 0 -1 -1 6 3 0.000522 0.000000 + 0 -1 -1 7 3 -0.000060 0.000000 + 0 -1 -1 8 3 -0.002537 0.000000 + 0 -1 -1 9 3 0.002086 0.000000 + 0 -1 -1 10 3 0.002151 -0.000000 + 0 -1 -1 11 3 0.000143 0.000000 + 0 -1 -1 12 3 -0.000284 0.000000 + 0 -1 -1 1 4 -0.010651 0.000000 + 0 -1 -1 2 4 -0.004731 0.000000 + 0 -1 -1 3 4 -0.000487 0.000000 + 0 -1 -1 4 4 -0.005886 0.000000 + 0 -1 -1 5 4 0.000516 -0.000000 + 0 -1 -1 6 4 -0.000662 0.000000 + 0 -1 -1 7 4 0.042521 -0.000000 + 0 -1 -1 8 4 -0.023064 0.000000 + 0 -1 -1 9 4 -0.003338 0.000000 + 0 -1 -1 10 4 -0.000480 0.000000 + 0 -1 -1 11 4 0.000633 0.000000 + 0 -1 -1 12 4 0.002537 0.000000 + 0 -1 -1 1 5 -0.003540 0.000000 + 0 -1 -1 2 5 0.011154 0.000000 + 0 -1 -1 3 5 -0.003444 0.000000 + 0 -1 -1 4 5 0.000516 0.000000 + 0 -1 -1 5 5 0.001281 0.000000 + 0 -1 -1 6 5 0.000711 -0.000000 + 0 -1 -1 7 5 0.036873 -0.000000 + 0 -1 -1 8 5 -0.018379 -0.000000 + 0 -1 -1 9 5 0.012364 0.000000 + 0 -1 -1 10 5 0.000572 -0.000000 + 0 -1 -1 11 5 -0.001131 -0.000000 + 0 -1 -1 12 5 0.000060 -0.000000 + 0 -1 -1 1 6 0.000453 -0.000000 + 0 -1 -1 2 6 0.004392 0.000000 + 0 -1 -1 3 6 -0.000782 0.000000 + 0 -1 -1 4 6 -0.000662 -0.000000 + 0 -1 -1 5 6 0.000711 0.000000 + 0 -1 -1 6 6 0.000793 0.000000 + 0 -1 -1 7 6 0.001922 0.000000 + 0 -1 -1 8 6 -0.002867 -0.000000 + 0 -1 -1 9 6 0.001533 0.000000 + 0 -1 -1 10 6 0.000746 0.000000 + 0 -1 -1 11 6 -0.000561 0.000000 + 0 -1 -1 12 6 0.002086 -0.000000 + 0 -1 -1 1 7 0.000656 -0.000000 + 0 -1 -1 2 7 -0.000661 0.000000 + 0 -1 -1 3 7 0.005132 0.000000 + 0 -1 -1 4 7 -0.000059 0.000000 + 0 -1 -1 5 7 -0.001067 -0.000000 + 0 -1 -1 6 7 0.003255 0.000000 + 0 -1 -1 7 7 0.001281 -0.000000 + 0 -1 -1 8 7 0.000516 0.000000 + 0 -1 -1 9 7 -0.000711 0.000000 + 0 -1 -1 10 7 -0.000136 -0.000000 + 0 -1 -1 11 7 -0.000898 0.000000 + 0 -1 -1 12 7 0.000411 -0.000000 + 0 -1 -1 1 8 -0.003898 0.000000 + 0 -1 -1 2 8 -0.004057 -0.000000 + 0 -1 -1 3 8 0.005418 0.000000 + 0 -1 -1 4 8 -0.000289 -0.000000 + 0 -1 -1 5 8 -0.000808 -0.000000 + 0 -1 -1 6 8 -0.004567 -0.000000 + 0 -1 -1 7 8 0.000516 -0.000000 + 0 -1 -1 8 8 -0.005886 0.000000 + 0 -1 -1 9 8 0.000662 -0.000000 + 0 -1 -1 10 8 -0.000701 -0.000000 + 0 -1 -1 11 8 -0.000136 0.000000 + 0 -1 -1 12 8 0.000218 0.000000 + 0 -1 -1 1 9 -0.002035 -0.000000 + 0 -1 -1 2 9 -0.002825 0.000000 + 0 -1 -1 3 9 0.003373 -0.000000 + 0 -1 -1 4 9 -0.002151 0.000000 + 0 -1 -1 5 9 -0.000143 0.000000 + 0 -1 -1 6 9 -0.000284 -0.000000 + 0 -1 -1 7 9 -0.000711 0.000000 + 0 -1 -1 8 9 0.000662 0.000000 + 0 -1 -1 9 9 0.000793 0.000000 + 0 -1 -1 10 9 0.000218 -0.000000 + 0 -1 -1 11 9 0.000411 0.000000 + 0 -1 -1 12 9 0.000726 -0.000000 + 0 -1 -1 1 10 0.042521 -0.000000 + 0 -1 -1 2 10 -0.023064 0.000000 + 0 -1 -1 3 10 0.003338 -0.000000 + 0 -1 -1 4 10 -0.004057 0.000000 + 0 -1 -1 5 10 -0.000661 -0.000000 + 0 -1 -1 6 10 0.002825 0.000000 + 0 -1 -1 7 10 0.001100 0.000000 + 0 -1 -1 8 10 -0.001519 0.000000 + 0 -1 -1 9 10 -0.000143 -0.000000 + 0 -1 -1 10 10 -0.005886 -0.000000 + 0 -1 -1 11 10 0.000516 -0.000000 + 0 -1 -1 12 10 0.000662 -0.000000 + 0 -1 -1 1 11 0.036873 -0.000000 + 0 -1 -1 2 11 -0.018379 -0.000000 + 0 -1 -1 3 11 -0.012364 -0.000000 + 0 -1 -1 4 11 -0.003898 0.000000 + 0 -1 -1 5 11 0.000656 -0.000000 + 0 -1 -1 6 11 0.002035 0.000000 + 0 -1 -1 7 11 0.003927 -0.000000 + 0 -1 -1 8 11 0.001100 -0.000000 + 0 -1 -1 9 11 -0.001020 -0.000000 + 0 -1 -1 10 11 0.000516 0.000000 + 0 -1 -1 11 11 0.001281 0.000000 + 0 -1 -1 12 11 -0.000711 0.000000 + 0 -1 -1 1 12 -0.001922 -0.000000 + 0 -1 -1 2 12 0.002867 0.000000 + 0 -1 -1 3 12 0.001533 -0.000000 + 0 -1 -1 4 12 -0.005418 0.000000 + 0 -1 -1 5 12 -0.005132 -0.000000 + 0 -1 -1 6 12 0.003373 0.000000 + 0 -1 -1 7 12 -0.001020 0.000000 + 0 -1 -1 8 12 -0.000143 0.000000 + 0 -1 -1 9 12 0.000617 -0.000000 + 0 -1 -1 10 12 0.000662 0.000000 + 0 -1 -1 11 12 -0.000711 -0.000000 + 0 -1 -1 12 12 0.000793 -0.000000 + 0 -1 0 1 1 -0.033978 0.000000 + 0 -1 0 2 1 -0.011489 -0.000000 + 0 -1 0 3 1 0.002081 0.000000 + 0 -1 0 4 1 0.011154 -0.000000 + 0 -1 0 5 1 -0.003540 -0.000000 + 0 -1 0 6 1 -0.003444 0.000000 + 0 -1 0 7 1 -0.009884 0.000000 + 0 -1 0 8 1 0.001885 0.000000 + 0 -1 0 9 1 0.003898 0.000000 + 0 -1 0 10 1 -0.021525 -0.000000 + 0 -1 0 11 1 0.020930 -0.000000 + 0 -1 0 12 1 0.002735 0.000000 + 0 -1 0 1 2 -0.011489 0.000000 + 0 -1 0 2 2 0.026358 0.000000 + 0 -1 0 3 2 -0.005567 0.000000 + 0 -1 0 4 2 -0.004731 -0.000000 + 0 -1 0 5 2 -0.010651 0.000000 + 0 -1 0 6 2 -0.000487 0.000000 + 0 -1 0 7 2 -0.008855 0.000000 + 0 -1 0 8 2 -0.001053 -0.000000 + 0 -1 0 9 2 0.005382 0.000000 + 0 -1 0 10 2 -0.023372 0.000000 + 0 -1 0 11 2 0.053346 -0.000000 + 0 -1 0 12 2 -0.001648 0.000000 + 0 -1 0 1 3 0.002081 -0.000000 + 0 -1 0 2 3 -0.005567 -0.000000 + 0 -1 0 3 3 0.003402 0.000000 + 0 -1 0 4 3 0.004392 -0.000000 + 0 -1 0 5 3 0.000453 -0.000000 + 0 -1 0 6 3 -0.000782 -0.000000 + 0 -1 0 7 3 -0.016241 0.000000 + 0 -1 0 8 3 0.012679 0.000000 + 0 -1 0 9 3 -0.006667 0.000000 + 0 -1 0 10 3 0.008426 0.000000 + 0 -1 0 11 3 0.003970 0.000000 + 0 -1 0 12 3 0.001823 0.000000 + 0 -1 0 1 4 0.011154 0.000000 + 0 -1 0 2 4 -0.004731 0.000000 + 0 -1 0 3 4 0.004392 0.000000 + 0 -1 0 4 4 0.026358 0.000000 + 0 -1 0 5 4 -0.011489 0.000000 + 0 -1 0 6 4 -0.005567 0.000000 + 0 -1 0 7 4 -0.021525 0.000000 + 0 -1 0 8 4 -0.023372 -0.000000 + 0 -1 0 9 4 -0.008426 0.000000 + 0 -1 0 10 4 -0.001053 0.000000 + 0 -1 0 11 4 0.001885 0.000000 + 0 -1 0 12 4 -0.012679 0.000000 + 0 -1 0 1 5 -0.003540 0.000000 + 0 -1 0 2 5 -0.010651 -0.000000 + 0 -1 0 3 5 0.000453 0.000000 + 0 -1 0 4 5 -0.011489 -0.000000 + 0 -1 0 5 5 -0.033978 0.000000 + 0 -1 0 6 5 0.002081 -0.000000 + 0 -1 0 7 5 0.020930 0.000000 + 0 -1 0 8 5 0.053346 0.000000 + 0 -1 0 9 5 -0.003970 0.000000 + 0 -1 0 10 5 -0.008855 0.000000 + 0 -1 0 11 5 -0.009884 -0.000000 + 0 -1 0 12 5 0.016241 0.000000 + 0 -1 0 1 6 -0.003444 -0.000000 + 0 -1 0 2 6 -0.000487 -0.000000 + 0 -1 0 3 6 -0.000782 0.000000 + 0 -1 0 4 6 -0.005567 -0.000000 + 0 -1 0 5 6 0.002081 0.000000 + 0 -1 0 6 6 0.003402 0.000000 + 0 -1 0 7 6 -0.002735 0.000000 + 0 -1 0 8 6 0.001648 0.000000 + 0 -1 0 9 6 0.001823 -0.000000 + 0 -1 0 10 6 -0.005382 0.000000 + 0 -1 0 11 6 -0.003898 0.000000 + 0 -1 0 12 6 -0.006667 0.000000 + 0 -1 0 1 7 -0.009884 -0.000000 + 0 -1 0 2 7 -0.008855 -0.000000 + 0 -1 0 3 7 -0.016241 -0.000000 + 0 -1 0 4 7 -0.021525 -0.000000 + 0 -1 0 5 7 0.020930 -0.000000 + 0 -1 0 6 7 -0.002735 -0.000000 + 0 -1 0 7 7 -0.033978 0.000000 + 0 -1 0 8 7 -0.011489 -0.000000 + 0 -1 0 9 7 -0.002081 -0.000000 + 0 -1 0 10 7 0.001100 -0.000000 + 0 -1 0 11 7 0.003927 0.000000 + 0 -1 0 12 7 -0.001020 -0.000000 + 0 -1 0 1 8 0.001885 -0.000000 + 0 -1 0 2 8 -0.001053 0.000000 + 0 -1 0 3 8 0.012679 -0.000000 + 0 -1 0 4 8 -0.023372 0.000000 + 0 -1 0 5 8 0.053346 -0.000000 + 0 -1 0 6 8 0.001648 -0.000000 + 0 -1 0 7 8 -0.011489 0.000000 + 0 -1 0 8 8 0.026358 0.000000 + 0 -1 0 9 8 0.005567 -0.000000 + 0 -1 0 10 8 -0.001519 0.000000 + 0 -1 0 11 8 0.001100 0.000000 + 0 -1 0 12 8 -0.000143 -0.000000 + 0 -1 0 1 9 0.003898 -0.000000 + 0 -1 0 2 9 0.005382 -0.000000 + 0 -1 0 3 9 -0.006667 -0.000000 + 0 -1 0 4 9 -0.008426 -0.000000 + 0 -1 0 5 9 -0.003970 -0.000000 + 0 -1 0 6 9 0.001823 0.000000 + 0 -1 0 7 9 -0.002081 0.000000 + 0 -1 0 8 9 0.005567 0.000000 + 0 -1 0 9 9 0.003402 0.000000 + 0 -1 0 10 9 -0.000143 0.000000 + 0 -1 0 11 9 -0.001020 0.000000 + 0 -1 0 12 9 0.000617 -0.000000 + 0 -1 0 1 10 -0.021525 0.000000 + 0 -1 0 2 10 -0.023372 -0.000000 + 0 -1 0 3 10 0.008426 -0.000000 + 0 -1 0 4 10 -0.001053 -0.000000 + 0 -1 0 5 10 -0.008855 -0.000000 + 0 -1 0 6 10 -0.005382 -0.000000 + 0 -1 0 7 10 0.001100 0.000000 + 0 -1 0 8 10 -0.001519 -0.000000 + 0 -1 0 9 10 -0.000143 -0.000000 + 0 -1 0 10 10 0.026358 0.000000 + 0 -1 0 11 10 -0.011489 -0.000000 + 0 -1 0 12 10 0.005567 -0.000000 + 0 -1 0 1 11 0.020930 0.000000 + 0 -1 0 2 11 0.053346 0.000000 + 0 -1 0 3 11 0.003970 -0.000000 + 0 -1 0 4 11 0.001885 -0.000000 + 0 -1 0 5 11 -0.009884 0.000000 + 0 -1 0 6 11 -0.003898 -0.000000 + 0 -1 0 7 11 0.003927 -0.000000 + 0 -1 0 8 11 0.001100 -0.000000 + 0 -1 0 9 11 -0.001020 -0.000000 + 0 -1 0 10 11 -0.011489 0.000000 + 0 -1 0 11 11 -0.033978 0.000000 + 0 -1 0 12 11 -0.002081 -0.000000 + 0 -1 0 1 12 0.002735 -0.000000 + 0 -1 0 2 12 -0.001648 -0.000000 + 0 -1 0 3 12 0.001823 -0.000000 + 0 -1 0 4 12 -0.012679 -0.000000 + 0 -1 0 5 12 0.016241 -0.000000 + 0 -1 0 6 12 -0.006667 -0.000000 + 0 -1 0 7 12 -0.001020 0.000000 + 0 -1 0 8 12 -0.000143 0.000000 + 0 -1 0 9 12 0.000617 0.000000 + 0 -1 0 10 12 0.005567 0.000000 + 0 -1 0 11 12 -0.002081 0.000000 + 0 -1 0 12 12 0.003402 0.000000 + 0 -1 1 1 1 0.001281 -0.000000 + 0 -1 1 2 1 0.000516 0.000000 + 0 -1 1 3 1 0.000711 -0.000000 + 0 -1 1 4 1 -0.010651 -0.000000 + 0 -1 1 5 1 -0.003540 -0.000000 + 0 -1 1 6 1 0.000453 0.000000 + 0 -1 1 7 1 0.000656 0.000000 + 0 -1 1 8 1 -0.003898 -0.000000 + 0 -1 1 9 1 -0.002035 0.000000 + 0 -1 1 10 1 0.042521 0.000000 + 0 -1 1 11 1 0.036873 0.000000 + 0 -1 1 12 1 -0.001922 0.000000 + 0 -1 1 1 2 0.000516 -0.000000 + 0 -1 1 2 2 -0.005886 0.000000 + 0 -1 1 3 2 -0.000662 -0.000000 + 0 -1 1 4 2 -0.004731 -0.000000 + 0 -1 1 5 2 0.011154 -0.000000 + 0 -1 1 6 2 0.004392 -0.000000 + 0 -1 1 7 2 -0.000661 -0.000000 + 0 -1 1 8 2 -0.004057 0.000000 + 0 -1 1 9 2 -0.002825 -0.000000 + 0 -1 1 10 2 -0.023064 -0.000000 + 0 -1 1 11 2 -0.018379 0.000000 + 0 -1 1 12 2 0.002867 -0.000000 + 0 -1 1 1 3 0.000711 0.000000 + 0 -1 1 2 3 -0.000662 -0.000000 + 0 -1 1 3 3 0.000793 0.000000 + 0 -1 1 4 3 -0.000487 -0.000000 + 0 -1 1 5 3 -0.003444 -0.000000 + 0 -1 1 6 3 -0.000782 -0.000000 + 0 -1 1 7 3 0.005132 -0.000000 + 0 -1 1 8 3 0.005418 -0.000000 + 0 -1 1 9 3 0.003373 0.000000 + 0 -1 1 10 3 0.003338 0.000000 + 0 -1 1 11 3 -0.012364 0.000000 + 0 -1 1 12 3 0.001533 0.000000 + 0 -1 1 1 4 -0.000117 -0.000000 + 0 -1 1 2 4 -0.002085 -0.000000 + 0 -1 1 3 4 -0.000794 0.000000 + 0 -1 1 4 4 -0.005886 -0.000000 + 0 -1 1 5 4 0.000516 -0.000000 + 0 -1 1 6 4 -0.000662 0.000000 + 0 -1 1 7 4 -0.000059 -0.000000 + 0 -1 1 8 4 -0.000289 0.000000 + 0 -1 1 9 4 -0.002151 -0.000000 + 0 -1 1 10 4 -0.004057 -0.000000 + 0 -1 1 11 4 -0.003898 -0.000000 + 0 -1 1 12 4 -0.005418 -0.000000 + 0 -1 1 1 5 0.001789 0.000000 + 0 -1 1 2 5 -0.000117 -0.000000 + 0 -1 1 3 5 0.001063 -0.000000 + 0 -1 1 4 5 0.000516 0.000000 + 0 -1 1 5 5 0.001281 -0.000000 + 0 -1 1 6 5 0.000711 -0.000000 + 0 -1 1 7 5 -0.001067 0.000000 + 0 -1 1 8 5 -0.000808 0.000000 + 0 -1 1 9 5 -0.000143 -0.000000 + 0 -1 1 10 5 -0.000661 0.000000 + 0 -1 1 11 5 0.000656 0.000000 + 0 -1 1 12 5 -0.005132 0.000000 + 0 -1 1 1 6 0.001063 -0.000000 + 0 -1 1 2 6 -0.000794 0.000000 + 0 -1 1 3 6 0.000522 -0.000000 + 0 -1 1 4 6 -0.000662 -0.000000 + 0 -1 1 5 6 0.000711 0.000000 + 0 -1 1 6 6 0.000793 -0.000000 + 0 -1 1 7 6 0.003255 -0.000000 + 0 -1 1 8 6 -0.004567 0.000000 + 0 -1 1 9 6 -0.000284 0.000000 + 0 -1 1 10 6 0.002825 -0.000000 + 0 -1 1 11 6 0.002035 -0.000000 + 0 -1 1 12 6 0.003373 -0.000000 + 0 -1 1 1 7 -0.001131 -0.000000 + 0 -1 1 2 7 0.000572 -0.000000 + 0 -1 1 3 7 -0.000060 -0.000000 + 0 -1 1 4 7 0.042521 0.000000 + 0 -1 1 5 7 0.036873 0.000000 + 0 -1 1 6 7 0.001922 -0.000000 + 0 -1 1 7 7 0.001281 0.000000 + 0 -1 1 8 7 0.000516 0.000000 + 0 -1 1 9 7 -0.000711 -0.000000 + 0 -1 1 10 7 0.001100 -0.000000 + 0 -1 1 11 7 0.003927 0.000000 + 0 -1 1 12 7 -0.001020 -0.000000 + 0 -1 1 1 8 0.000633 0.000000 + 0 -1 1 2 8 -0.000480 -0.000000 + 0 -1 1 3 8 -0.002537 -0.000000 + 0 -1 1 4 8 -0.023064 -0.000000 + 0 -1 1 5 8 -0.018379 0.000000 + 0 -1 1 6 8 -0.002867 0.000000 + 0 -1 1 7 8 0.000516 -0.000000 + 0 -1 1 8 8 -0.005886 -0.000000 + 0 -1 1 9 8 0.000662 -0.000000 + 0 -1 1 10 8 -0.001519 -0.000000 + 0 -1 1 11 8 0.001100 0.000000 + 0 -1 1 12 8 -0.000143 -0.000000 + 0 -1 1 1 9 0.000561 -0.000000 + 0 -1 1 2 9 -0.000746 -0.000000 + 0 -1 1 3 9 0.002086 -0.000000 + 0 -1 1 4 9 -0.003338 -0.000000 + 0 -1 1 5 9 0.012364 -0.000000 + 0 -1 1 6 9 0.001533 -0.000000 + 0 -1 1 7 9 -0.000711 -0.000000 + 0 -1 1 8 9 0.000662 0.000000 + 0 -1 1 9 9 0.000793 -0.000000 + 0 -1 1 10 9 -0.000143 0.000000 + 0 -1 1 11 9 -0.001020 0.000000 + 0 -1 1 12 9 0.000617 0.000000 + 0 -1 1 1 10 -0.000059 -0.000000 + 0 -1 1 2 10 -0.000289 -0.000000 + 0 -1 1 3 10 0.002151 0.000000 + 0 -1 1 4 10 -0.000480 -0.000000 + 0 -1 1 5 10 0.000572 0.000000 + 0 -1 1 6 10 0.000746 -0.000000 + 0 -1 1 7 10 -0.000136 0.000000 + 0 -1 1 8 10 -0.000701 0.000000 + 0 -1 1 9 10 0.000218 0.000000 + 0 -1 1 10 10 -0.005886 0.000000 + 0 -1 1 11 10 0.000516 -0.000000 + 0 -1 1 12 10 0.000662 -0.000000 + 0 -1 1 1 11 -0.001067 0.000000 + 0 -1 1 2 11 -0.000808 -0.000000 + 0 -1 1 3 11 0.000143 -0.000000 + 0 -1 1 4 11 0.000633 -0.000000 + 0 -1 1 5 11 -0.001131 0.000000 + 0 -1 1 6 11 -0.000561 -0.000000 + 0 -1 1 7 11 -0.000898 -0.000000 + 0 -1 1 8 11 -0.000136 -0.000000 + 0 -1 1 9 11 0.000411 -0.000000 + 0 -1 1 10 11 0.000516 0.000000 + 0 -1 1 11 11 0.001281 -0.000000 + 0 -1 1 12 11 -0.000711 0.000000 + 0 -1 1 1 12 -0.003255 0.000000 + 0 -1 1 2 12 0.004567 -0.000000 + 0 -1 1 3 12 -0.000284 -0.000000 + 0 -1 1 4 12 0.002537 -0.000000 + 0 -1 1 5 12 0.000060 0.000000 + 0 -1 1 6 12 0.002086 0.000000 + 0 -1 1 7 12 0.000411 0.000000 + 0 -1 1 8 12 0.000218 -0.000000 + 0 -1 1 9 12 0.000726 0.000000 + 0 -1 1 10 12 0.000662 0.000000 + 0 -1 1 11 12 -0.000711 -0.000000 + 0 -1 1 12 12 0.000793 0.000000 + 0 0 -1 1 1 -0.008104 0.000000 + 0 0 -1 2 1 0.006634 0.000000 + 0 0 -1 3 1 -0.003940 0.000000 + 0 0 -1 4 1 0.000046 0.000000 + 0 0 -1 5 1 -0.000356 0.000000 + 0 0 -1 6 1 -0.007908 0.000000 + 0 0 -1 7 1 -0.001131 -0.000000 + 0 0 -1 8 1 0.000572 -0.000000 + 0 0 -1 9 1 0.000060 0.000000 + 0 0 -1 10 1 -0.000808 0.000000 + 0 0 -1 11 1 -0.001067 -0.000000 + 0 0 -1 12 1 -0.000143 0.000000 + 0 0 -1 1 2 0.006634 -0.000000 + 0 0 -1 2 2 0.010240 -0.000000 + 0 0 -1 3 2 0.002203 0.000000 + 0 0 -1 4 2 0.004160 0.000000 + 0 0 -1 5 2 0.000046 0.000000 + 0 0 -1 6 2 0.003257 0.000000 + 0 0 -1 7 2 0.000633 0.000000 + 0 0 -1 8 2 -0.000480 0.000000 + 0 0 -1 9 2 0.002537 0.000000 + 0 0 -1 10 2 -0.000289 0.000000 + 0 0 -1 11 2 -0.000059 0.000000 + 0 0 -1 12 2 -0.002151 0.000000 + 0 0 -1 1 3 -0.003940 -0.000000 + 0 0 -1 2 3 0.002203 -0.000000 + 0 0 -1 3 3 -0.054625 -0.000000 + 0 0 -1 4 3 0.003257 -0.000000 + 0 0 -1 5 3 -0.007908 -0.000000 + 0 0 -1 6 3 -0.001138 0.000000 + 0 0 -1 7 3 -0.000561 0.000000 + 0 0 -1 8 3 0.000746 0.000000 + 0 0 -1 9 3 0.002086 0.000000 + 0 0 -1 10 3 -0.004567 -0.000000 + 0 0 -1 11 3 0.003255 -0.000000 + 0 0 -1 12 3 -0.000284 0.000000 + 0 0 -1 1 4 -0.029678 0.000000 + 0 0 -1 2 4 -0.114958 -0.000000 + 0 0 -1 3 4 0.080588 0.000000 + 0 0 -1 4 4 0.010240 -0.000000 + 0 0 -1 5 4 0.006634 0.000000 + 0 0 -1 6 4 0.002203 0.000000 + 0 0 -1 7 4 0.053346 -0.000000 + 0 0 -1 8 4 -0.023372 0.000000 + 0 0 -1 9 4 -0.001648 0.000000 + 0 0 -1 10 4 -0.000480 0.000000 + 0 0 -1 11 4 0.000572 0.000000 + 0 0 -1 12 4 -0.000746 0.000000 + 0 0 -1 1 5 0.117955 -0.000000 + 0 0 -1 2 5 0.131177 -0.000000 + 0 0 -1 3 5 -0.042312 0.000000 + 0 0 -1 4 5 0.006634 -0.000000 + 0 0 -1 5 5 -0.008104 0.000000 + 0 0 -1 6 5 -0.003940 0.000000 + 0 0 -1 7 5 0.020930 -0.000000 + 0 0 -1 8 5 -0.021525 0.000000 + 0 0 -1 9 5 0.002735 0.000000 + 0 0 -1 10 5 0.000633 -0.000000 + 0 0 -1 11 5 -0.001131 0.000000 + 0 0 -1 12 5 0.000561 0.000000 + 0 0 -1 1 6 -0.021868 -0.000000 + 0 0 -1 2 6 -0.031897 -0.000000 + 0 0 -1 3 6 -0.191389 -0.000000 + 0 0 -1 4 6 0.002203 -0.000000 + 0 0 -1 5 6 -0.003940 -0.000000 + 0 0 -1 6 6 -0.054625 -0.000000 + 0 0 -1 7 6 0.003970 0.000000 + 0 0 -1 8 6 0.008426 -0.000000 + 0 0 -1 9 6 0.001823 0.000000 + 0 0 -1 10 6 -0.002537 0.000000 + 0 0 -1 11 6 -0.000060 -0.000000 + 0 0 -1 12 6 0.002086 -0.000000 + 0 0 -1 1 7 0.000656 -0.000000 + 0 0 -1 2 7 -0.003898 -0.000000 + 0 0 -1 3 7 0.002035 -0.000000 + 0 0 -1 4 7 -0.000808 0.000000 + 0 0 -1 5 7 -0.001067 -0.000000 + 0 0 -1 6 7 0.000143 0.000000 + 0 0 -1 7 7 -0.008104 -0.000000 + 0 0 -1 8 7 0.006634 -0.000000 + 0 0 -1 9 7 0.003940 -0.000000 + 0 0 -1 10 7 -0.002049 0.000000 + 0 0 -1 11 7 -0.007888 -0.000000 + 0 0 -1 12 7 -0.000537 0.000000 + 0 0 -1 1 8 -0.000661 -0.000000 + 0 0 -1 2 8 -0.004057 -0.000000 + 0 0 -1 3 8 0.002825 0.000000 + 0 0 -1 4 8 -0.000289 0.000000 + 0 0 -1 5 8 -0.000059 -0.000000 + 0 0 -1 6 8 0.002151 -0.000000 + 0 0 -1 7 8 0.006634 0.000000 + 0 0 -1 8 8 0.010240 -0.000000 + 0 0 -1 9 8 -0.002203 -0.000000 + 0 0 -1 10 8 0.001565 -0.000000 + 0 0 -1 11 8 -0.002049 -0.000000 + 0 0 -1 12 8 -0.011447 0.000000 + 0 0 -1 1 9 -0.005132 -0.000000 + 0 0 -1 2 9 -0.005418 0.000000 + 0 0 -1 3 9 0.003373 0.000000 + 0 0 -1 4 9 0.004567 -0.000000 + 0 0 -1 5 9 -0.003255 0.000000 + 0 0 -1 6 9 -0.000284 0.000000 + 0 0 -1 7 9 0.003940 0.000000 + 0 0 -1 8 9 -0.002203 0.000000 + 0 0 -1 9 9 -0.054625 0.000000 + 0 0 -1 10 9 -0.011447 -0.000000 + 0 0 -1 11 9 -0.000537 0.000000 + 0 0 -1 12 9 0.017130 -0.000000 + 0 0 -1 1 10 0.053346 -0.000000 + 0 0 -1 2 10 -0.023372 0.000000 + 0 0 -1 3 10 0.001648 0.000000 + 0 0 -1 4 10 -0.004057 0.000000 + 0 0 -1 5 10 -0.003898 -0.000000 + 0 0 -1 6 10 0.005418 0.000000 + 0 0 -1 7 10 -0.001355 0.000000 + 0 0 -1 8 10 0.006074 0.000000 + 0 0 -1 9 10 -0.008388 0.000000 + 0 0 -1 10 10 0.010240 -0.000000 + 0 0 -1 11 10 0.006634 0.000000 + 0 0 -1 12 10 -0.002203 -0.000000 + 0 0 -1 1 11 0.020930 0.000000 + 0 0 -1 2 11 -0.021525 -0.000000 + 0 0 -1 3 11 -0.002735 -0.000000 + 0 0 -1 4 11 -0.000661 0.000000 + 0 0 -1 5 11 0.000656 0.000000 + 0 0 -1 6 11 0.005132 0.000000 + 0 0 -1 7 11 -0.001701 0.000000 + 0 0 -1 8 11 -0.001355 -0.000000 + 0 0 -1 9 11 -0.002485 -0.000000 + 0 0 -1 10 11 0.006634 -0.000000 + 0 0 -1 11 11 -0.008104 0.000000 + 0 0 -1 12 11 0.003940 -0.000000 + 0 0 -1 1 12 -0.003970 -0.000000 + 0 0 -1 2 12 -0.008426 0.000000 + 0 0 -1 3 12 0.001823 -0.000000 + 0 0 -1 4 12 -0.002825 0.000000 + 0 0 -1 5 12 -0.002035 -0.000000 + 0 0 -1 6 12 0.003373 -0.000000 + 0 0 -1 7 12 -0.002485 0.000000 + 0 0 -1 8 12 -0.008388 -0.000000 + 0 0 -1 9 12 -0.009679 -0.000000 + 0 0 -1 10 12 -0.002203 -0.000000 + 0 0 -1 11 12 0.003940 0.000000 + 0 0 -1 12 12 -0.054625 -0.000000 + 0 0 0 1 1 15.615711 0.000000 + 0 0 0 2 1 -0.003319 -0.000000 + 0 0 0 3 1 0.002152 0.000000 + 0 0 0 4 1 0.131177 0.000000 + 0 0 0 5 1 0.117955 0.000000 + 0 0 0 6 1 -0.042312 -0.000000 + 0 0 0 7 1 -0.009884 0.000000 + 0 0 0 8 1 -0.008855 0.000000 + 0 0 0 9 1 0.016241 0.000000 + 0 0 0 10 1 -0.018379 -0.000000 + 0 0 0 11 1 0.036873 -0.000000 + 0 0 0 12 1 0.012364 0.000000 + 0 0 0 1 2 -0.003319 0.000000 + 0 0 0 2 2 15.625243 -0.000000 + 0 0 0 3 2 0.022611 0.000000 + 0 0 0 4 2 -0.114958 0.000000 + 0 0 0 5 2 -0.029678 0.000000 + 0 0 0 6 2 0.080588 0.000000 + 0 0 0 7 2 0.001885 0.000000 + 0 0 0 8 2 -0.001053 -0.000000 + 0 0 0 9 2 -0.012679 0.000000 + 0 0 0 10 2 -0.023064 0.000000 + 0 0 0 11 2 0.042521 -0.000000 + 0 0 0 12 2 -0.003338 0.000000 + 0 0 0 1 3 0.002152 -0.000000 + 0 0 0 2 3 0.022611 -0.000000 + 0 0 0 3 3 15.645007 -0.000000 + 0 0 0 4 3 -0.031897 -0.000000 + 0 0 0 5 3 -0.021868 -0.000000 + 0 0 0 6 3 -0.191389 0.000000 + 0 0 0 7 3 -0.003898 0.000000 + 0 0 0 8 3 -0.005382 0.000000 + 0 0 0 9 3 -0.006667 -0.000000 + 0 0 0 10 3 -0.002867 0.000000 + 0 0 0 11 3 0.001922 0.000000 + 0 0 0 12 3 0.001533 0.000000 + 0 0 0 1 4 0.131177 -0.000000 + 0 0 0 2 4 -0.114958 -0.000000 + 0 0 0 3 4 -0.031897 0.000000 + 0 0 0 4 4 15.625243 -0.000000 + 0 0 0 5 4 -0.003319 -0.000000 + 0 0 0 6 4 0.022611 0.000000 + 0 0 0 7 4 -0.018379 0.000000 + 0 0 0 8 4 -0.023064 -0.000000 + 0 0 0 9 4 0.002867 0.000000 + 0 0 0 10 4 -0.001053 -0.000000 + 0 0 0 11 4 -0.008855 0.000000 + 0 0 0 12 4 0.005382 0.000000 + 0 0 0 1 5 0.117955 -0.000000 + 0 0 0 2 5 -0.029678 -0.000000 + 0 0 0 3 5 -0.021868 0.000000 + 0 0 0 4 5 -0.003319 0.000000 + 0 0 0 5 5 15.615711 -0.000000 + 0 0 0 6 5 0.002152 0.000000 + 0 0 0 7 5 0.036873 -0.000000 + 0 0 0 8 5 0.042521 0.000000 + 0 0 0 9 5 -0.001922 0.000000 + 0 0 0 10 5 0.001885 0.000000 + 0 0 0 11 5 -0.009884 0.000000 + 0 0 0 12 5 0.003898 0.000000 + 0 0 0 1 6 -0.042312 0.000000 + 0 0 0 2 6 0.080588 -0.000000 + 0 0 0 3 6 -0.191389 -0.000000 + 0 0 0 4 6 0.022611 -0.000000 + 0 0 0 5 6 0.002152 -0.000000 + 0 0 0 6 6 15.645007 0.000000 + 0 0 0 7 6 -0.012364 0.000000 + 0 0 0 8 6 0.003338 0.000000 + 0 0 0 9 6 0.001533 -0.000000 + 0 0 0 10 6 0.012679 0.000000 + 0 0 0 11 6 -0.016241 0.000000 + 0 0 0 12 6 -0.006667 0.000000 + 0 0 0 1 7 -0.009884 -0.000000 + 0 0 0 2 7 0.001885 -0.000000 + 0 0 0 3 7 -0.003898 -0.000000 + 0 0 0 4 7 -0.018379 -0.000000 + 0 0 0 5 7 0.036873 0.000000 + 0 0 0 6 7 -0.012364 -0.000000 + 0 0 0 7 7 15.615711 -0.000000 + 0 0 0 8 7 -0.003319 -0.000000 + 0 0 0 9 7 -0.002152 -0.000000 + 0 0 0 10 7 -0.001355 -0.000000 + 0 0 0 11 7 -0.001701 -0.000000 + 0 0 0 12 7 -0.002485 -0.000000 + 0 0 0 1 8 -0.008855 -0.000000 + 0 0 0 2 8 -0.001053 0.000000 + 0 0 0 3 8 -0.005382 -0.000000 + 0 0 0 4 8 -0.023064 0.000000 + 0 0 0 5 8 0.042521 -0.000000 + 0 0 0 6 8 0.003338 -0.000000 + 0 0 0 7 8 -0.003319 0.000000 + 0 0 0 8 8 15.625243 -0.000000 + 0 0 0 9 8 -0.022611 -0.000000 + 0 0 0 10 8 0.006074 -0.000000 + 0 0 0 11 8 -0.001355 0.000000 + 0 0 0 12 8 -0.008388 0.000000 + 0 0 0 1 9 0.016241 -0.000000 + 0 0 0 2 9 -0.012679 -0.000000 + 0 0 0 3 9 -0.006667 0.000000 + 0 0 0 4 9 0.002867 -0.000000 + 0 0 0 5 9 -0.001922 -0.000000 + 0 0 0 6 9 0.001533 0.000000 + 0 0 0 7 9 -0.002152 0.000000 + 0 0 0 8 9 -0.022611 0.000000 + 0 0 0 9 9 15.645007 -0.000000 + 0 0 0 10 9 -0.008388 -0.000000 + 0 0 0 11 9 -0.002485 0.000000 + 0 0 0 12 9 -0.009679 0.000000 + 0 0 0 1 10 -0.018379 0.000000 + 0 0 0 2 10 -0.023064 -0.000000 + 0 0 0 3 10 -0.002867 -0.000000 + 0 0 0 4 10 -0.001053 0.000000 + 0 0 0 5 10 0.001885 -0.000000 + 0 0 0 6 10 0.012679 -0.000000 + 0 0 0 7 10 -0.001355 0.000000 + 0 0 0 8 10 0.006074 0.000000 + 0 0 0 9 10 -0.008388 0.000000 + 0 0 0 10 10 15.625243 0.000000 + 0 0 0 11 10 -0.003319 0.000000 + 0 0 0 12 10 -0.022611 -0.000000 + 0 0 0 1 11 0.036873 0.000000 + 0 0 0 2 11 0.042521 0.000000 + 0 0 0 3 11 0.001922 -0.000000 + 0 0 0 4 11 -0.008855 -0.000000 + 0 0 0 5 11 -0.009884 -0.000000 + 0 0 0 6 11 -0.016241 -0.000000 + 0 0 0 7 11 -0.001701 0.000000 + 0 0 0 8 11 -0.001355 -0.000000 + 0 0 0 9 11 -0.002485 -0.000000 + 0 0 0 10 11 -0.003319 -0.000000 + 0 0 0 11 11 15.615711 0.000000 + 0 0 0 12 11 -0.002152 -0.000000 + 0 0 0 1 12 0.012364 -0.000000 + 0 0 0 2 12 -0.003338 -0.000000 + 0 0 0 3 12 0.001533 -0.000000 + 0 0 0 4 12 0.005382 -0.000000 + 0 0 0 5 12 0.003898 -0.000000 + 0 0 0 6 12 -0.006667 -0.000000 + 0 0 0 7 12 -0.002485 0.000000 + 0 0 0 8 12 -0.008388 -0.000000 + 0 0 0 9 12 -0.009679 -0.000000 + 0 0 0 10 12 -0.022611 0.000000 + 0 0 0 11 12 -0.002152 0.000000 + 0 0 0 12 12 15.645007 -0.000000 + 0 0 1 1 1 -0.008104 -0.000000 + 0 0 1 2 1 0.006634 0.000000 + 0 0 1 3 1 -0.003940 0.000000 + 0 0 1 4 1 -0.029678 -0.000000 + 0 0 1 5 1 0.117955 0.000000 + 0 0 1 6 1 -0.021868 0.000000 + 0 0 1 7 1 0.000656 0.000000 + 0 0 1 8 1 -0.000661 0.000000 + 0 0 1 9 1 -0.005132 0.000000 + 0 0 1 10 1 0.053346 0.000000 + 0 0 1 11 1 0.020930 -0.000000 + 0 0 1 12 1 -0.003970 0.000000 + 0 0 1 1 2 0.006634 -0.000000 + 0 0 1 2 2 0.010240 0.000000 + 0 0 1 3 2 0.002203 0.000000 + 0 0 1 4 2 -0.114958 0.000000 + 0 0 1 5 2 0.131177 0.000000 + 0 0 1 6 2 -0.031897 0.000000 + 0 0 1 7 2 -0.003898 0.000000 + 0 0 1 8 2 -0.004057 0.000000 + 0 0 1 9 2 -0.005418 -0.000000 + 0 0 1 10 2 -0.023372 -0.000000 + 0 0 1 11 2 -0.021525 0.000000 + 0 0 1 12 2 -0.008426 -0.000000 + 0 0 1 1 3 -0.003940 -0.000000 + 0 0 1 2 3 0.002203 -0.000000 + 0 0 1 3 3 -0.054625 0.000000 + 0 0 1 4 3 0.080588 -0.000000 + 0 0 1 5 3 -0.042312 -0.000000 + 0 0 1 6 3 -0.191389 0.000000 + 0 0 1 7 3 0.002035 0.000000 + 0 0 1 8 3 0.002825 -0.000000 + 0 0 1 9 3 0.003373 -0.000000 + 0 0 1 10 3 0.001648 -0.000000 + 0 0 1 11 3 -0.002735 0.000000 + 0 0 1 12 3 0.001823 0.000000 + 0 0 1 1 4 0.000046 -0.000000 + 0 0 1 2 4 0.004160 -0.000000 + 0 0 1 3 4 0.003257 0.000000 + 0 0 1 4 4 0.010240 0.000000 + 0 0 1 5 4 0.006634 0.000000 + 0 0 1 6 4 0.002203 0.000000 + 0 0 1 7 4 -0.000808 -0.000000 + 0 0 1 8 4 -0.000289 -0.000000 + 0 0 1 9 4 0.004567 0.000000 + 0 0 1 10 4 -0.004057 -0.000000 + 0 0 1 11 4 -0.000661 -0.000000 + 0 0 1 12 4 -0.002825 -0.000000 + 0 0 1 1 5 -0.000356 -0.000000 + 0 0 1 2 5 0.000046 -0.000000 + 0 0 1 3 5 -0.007908 0.000000 + 0 0 1 4 5 0.006634 -0.000000 + 0 0 1 5 5 -0.008104 -0.000000 + 0 0 1 6 5 -0.003940 0.000000 + 0 0 1 7 5 -0.001067 0.000000 + 0 0 1 8 5 -0.000059 0.000000 + 0 0 1 9 5 -0.003255 -0.000000 + 0 0 1 10 5 -0.003898 0.000000 + 0 0 1 11 5 0.000656 -0.000000 + 0 0 1 12 5 -0.002035 0.000000 + 0 0 1 1 6 -0.007908 -0.000000 + 0 0 1 2 6 0.003257 -0.000000 + 0 0 1 3 6 -0.001138 -0.000000 + 0 0 1 4 6 0.002203 -0.000000 + 0 0 1 5 6 -0.003940 -0.000000 + 0 0 1 6 6 -0.054625 0.000000 + 0 0 1 7 6 0.000143 -0.000000 + 0 0 1 8 6 0.002151 0.000000 + 0 0 1 9 6 -0.000284 -0.000000 + 0 0 1 10 6 0.005418 -0.000000 + 0 0 1 11 6 0.005132 -0.000000 + 0 0 1 12 6 0.003373 0.000000 + 0 0 1 1 7 -0.001131 0.000000 + 0 0 1 2 7 0.000633 -0.000000 + 0 0 1 3 7 -0.000561 -0.000000 + 0 0 1 4 7 0.053346 0.000000 + 0 0 1 5 7 0.020930 0.000000 + 0 0 1 6 7 0.003970 -0.000000 + 0 0 1 7 7 -0.008104 0.000000 + 0 0 1 8 7 0.006634 -0.000000 + 0 0 1 9 7 0.003940 -0.000000 + 0 0 1 10 7 -0.001355 -0.000000 + 0 0 1 11 7 -0.001701 -0.000000 + 0 0 1 12 7 -0.002485 -0.000000 + 0 0 1 1 8 0.000572 0.000000 + 0 0 1 2 8 -0.000480 -0.000000 + 0 0 1 3 8 0.000746 -0.000000 + 0 0 1 4 8 -0.023372 -0.000000 + 0 0 1 5 8 -0.021525 -0.000000 + 0 0 1 6 8 0.008426 0.000000 + 0 0 1 7 8 0.006634 0.000000 + 0 0 1 8 8 0.010240 0.000000 + 0 0 1 9 8 -0.002203 -0.000000 + 0 0 1 10 8 0.006074 -0.000000 + 0 0 1 11 8 -0.001355 0.000000 + 0 0 1 12 8 -0.008388 0.000000 + 0 0 1 1 9 0.000060 -0.000000 + 0 0 1 2 9 0.002537 -0.000000 + 0 0 1 3 9 0.002086 -0.000000 + 0 0 1 4 9 -0.001648 -0.000000 + 0 0 1 5 9 0.002735 -0.000000 + 0 0 1 6 9 0.001823 -0.000000 + 0 0 1 7 9 0.003940 0.000000 + 0 0 1 8 9 -0.002203 0.000000 + 0 0 1 9 9 -0.054625 -0.000000 + 0 0 1 10 9 -0.008388 -0.000000 + 0 0 1 11 9 -0.002485 0.000000 + 0 0 1 12 9 -0.009679 0.000000 + 0 0 1 1 10 -0.000808 -0.000000 + 0 0 1 2 10 -0.000289 -0.000000 + 0 0 1 3 10 -0.004567 0.000000 + 0 0 1 4 10 -0.000480 -0.000000 + 0 0 1 5 10 0.000633 0.000000 + 0 0 1 6 10 -0.002537 -0.000000 + 0 0 1 7 10 -0.002049 -0.000000 + 0 0 1 8 10 0.001565 0.000000 + 0 0 1 9 10 -0.011447 0.000000 + 0 0 1 10 10 0.010240 0.000000 + 0 0 1 11 10 0.006634 0.000000 + 0 0 1 12 10 -0.002203 0.000000 + 0 0 1 1 11 -0.001067 0.000000 + 0 0 1 2 11 -0.000059 -0.000000 + 0 0 1 3 11 0.003255 0.000000 + 0 0 1 4 11 0.000572 -0.000000 + 0 0 1 5 11 -0.001131 -0.000000 + 0 0 1 6 11 -0.000060 0.000000 + 0 0 1 7 11 -0.007888 0.000000 + 0 0 1 8 11 -0.002049 0.000000 + 0 0 1 9 11 -0.000537 -0.000000 + 0 0 1 10 11 0.006634 -0.000000 + 0 0 1 11 11 -0.008104 -0.000000 + 0 0 1 12 11 0.003940 -0.000000 + 0 0 1 1 12 -0.000143 -0.000000 + 0 0 1 2 12 -0.002151 -0.000000 + 0 0 1 3 12 -0.000284 -0.000000 + 0 0 1 4 12 -0.000746 -0.000000 + 0 0 1 5 12 0.000561 -0.000000 + 0 0 1 6 12 0.002086 0.000000 + 0 0 1 7 12 -0.000537 -0.000000 + 0 0 1 8 12 -0.011447 -0.000000 + 0 0 1 9 12 0.017130 0.000000 + 0 0 1 10 12 -0.002203 0.000000 + 0 0 1 11 12 0.003940 0.000000 + 0 0 1 12 12 -0.054625 0.000000 + 0 1 -1 1 1 0.001281 0.000000 + 0 1 -1 2 1 0.000516 0.000000 + 0 1 -1 3 1 0.000711 -0.000000 + 0 1 -1 4 1 -0.000117 0.000000 + 0 1 -1 5 1 0.001789 -0.000000 + 0 1 -1 6 1 0.001063 0.000000 + 0 1 -1 7 1 -0.001131 0.000000 + 0 1 -1 8 1 0.000633 -0.000000 + 0 1 -1 9 1 0.000561 0.000000 + 0 1 -1 10 1 -0.000059 0.000000 + 0 1 -1 11 1 -0.001067 -0.000000 + 0 1 -1 12 1 -0.003255 -0.000000 + 0 1 -1 1 2 0.000516 -0.000000 + 0 1 -1 2 2 -0.005886 -0.000000 + 0 1 -1 3 2 -0.000662 0.000000 + 0 1 -1 4 2 -0.002085 0.000000 + 0 1 -1 5 2 -0.000117 0.000000 + 0 1 -1 6 2 -0.000794 -0.000000 + 0 1 -1 7 2 0.000572 0.000000 + 0 1 -1 8 2 -0.000480 0.000000 + 0 1 -1 9 2 -0.000746 0.000000 + 0 1 -1 10 2 -0.000289 0.000000 + 0 1 -1 11 2 -0.000808 0.000000 + 0 1 -1 12 2 0.004567 0.000000 + 0 1 -1 1 3 0.000711 0.000000 + 0 1 -1 2 3 -0.000662 0.000000 + 0 1 -1 3 3 0.000793 -0.000000 + 0 1 -1 4 3 -0.000794 -0.000000 + 0 1 -1 5 3 0.001063 0.000000 + 0 1 -1 6 3 0.000522 0.000000 + 0 1 -1 7 3 -0.000060 0.000000 + 0 1 -1 8 3 -0.002537 0.000000 + 0 1 -1 9 3 0.002086 0.000000 + 0 1 -1 10 3 0.002151 -0.000000 + 0 1 -1 11 3 0.000143 0.000000 + 0 1 -1 12 3 -0.000284 0.000000 + 0 1 -1 1 4 -0.010651 0.000000 + 0 1 -1 2 4 -0.004731 0.000000 + 0 1 -1 3 4 -0.000487 0.000000 + 0 1 -1 4 4 -0.005886 0.000000 + 0 1 -1 5 4 0.000516 -0.000000 + 0 1 -1 6 4 -0.000662 0.000000 + 0 1 -1 7 4 0.042521 -0.000000 + 0 1 -1 8 4 -0.023064 0.000000 + 0 1 -1 9 4 -0.003338 0.000000 + 0 1 -1 10 4 -0.000480 0.000000 + 0 1 -1 11 4 0.000633 0.000000 + 0 1 -1 12 4 0.002537 0.000000 + 0 1 -1 1 5 -0.003540 0.000000 + 0 1 -1 2 5 0.011154 0.000000 + 0 1 -1 3 5 -0.003444 0.000000 + 0 1 -1 4 5 0.000516 0.000000 + 0 1 -1 5 5 0.001281 0.000000 + 0 1 -1 6 5 0.000711 -0.000000 + 0 1 -1 7 5 0.036873 -0.000000 + 0 1 -1 8 5 -0.018379 -0.000000 + 0 1 -1 9 5 0.012364 0.000000 + 0 1 -1 10 5 0.000572 -0.000000 + 0 1 -1 11 5 -0.001131 -0.000000 + 0 1 -1 12 5 0.000060 -0.000000 + 0 1 -1 1 6 0.000453 -0.000000 + 0 1 -1 2 6 0.004392 0.000000 + 0 1 -1 3 6 -0.000782 0.000000 + 0 1 -1 4 6 -0.000662 -0.000000 + 0 1 -1 5 6 0.000711 0.000000 + 0 1 -1 6 6 0.000793 0.000000 + 0 1 -1 7 6 0.001922 0.000000 + 0 1 -1 8 6 -0.002867 -0.000000 + 0 1 -1 9 6 0.001533 0.000000 + 0 1 -1 10 6 0.000746 0.000000 + 0 1 -1 11 6 -0.000561 0.000000 + 0 1 -1 12 6 0.002086 -0.000000 + 0 1 -1 1 7 0.000656 -0.000000 + 0 1 -1 2 7 -0.000661 0.000000 + 0 1 -1 3 7 0.005132 0.000000 + 0 1 -1 4 7 -0.000059 0.000000 + 0 1 -1 5 7 -0.001067 -0.000000 + 0 1 -1 6 7 0.003255 0.000000 + 0 1 -1 7 7 0.001281 -0.000000 + 0 1 -1 8 7 0.000516 0.000000 + 0 1 -1 9 7 -0.000711 0.000000 + 0 1 -1 10 7 -0.000136 -0.000000 + 0 1 -1 11 7 -0.000898 0.000000 + 0 1 -1 12 7 0.000411 -0.000000 + 0 1 -1 1 8 -0.003898 0.000000 + 0 1 -1 2 8 -0.004057 -0.000000 + 0 1 -1 3 8 0.005418 0.000000 + 0 1 -1 4 8 -0.000289 -0.000000 + 0 1 -1 5 8 -0.000808 -0.000000 + 0 1 -1 6 8 -0.004567 -0.000000 + 0 1 -1 7 8 0.000516 -0.000000 + 0 1 -1 8 8 -0.005886 0.000000 + 0 1 -1 9 8 0.000662 -0.000000 + 0 1 -1 10 8 -0.000701 -0.000000 + 0 1 -1 11 8 -0.000136 0.000000 + 0 1 -1 12 8 0.000218 0.000000 + 0 1 -1 1 9 -0.002035 -0.000000 + 0 1 -1 2 9 -0.002825 0.000000 + 0 1 -1 3 9 0.003373 -0.000000 + 0 1 -1 4 9 -0.002151 0.000000 + 0 1 -1 5 9 -0.000143 0.000000 + 0 1 -1 6 9 -0.000284 -0.000000 + 0 1 -1 7 9 -0.000711 0.000000 + 0 1 -1 8 9 0.000662 0.000000 + 0 1 -1 9 9 0.000793 0.000000 + 0 1 -1 10 9 0.000218 -0.000000 + 0 1 -1 11 9 0.000411 0.000000 + 0 1 -1 12 9 0.000726 -0.000000 + 0 1 -1 1 10 0.042521 -0.000000 + 0 1 -1 2 10 -0.023064 0.000000 + 0 1 -1 3 10 0.003338 -0.000000 + 0 1 -1 4 10 -0.004057 0.000000 + 0 1 -1 5 10 -0.000661 -0.000000 + 0 1 -1 6 10 0.002825 0.000000 + 0 1 -1 7 10 0.001100 0.000000 + 0 1 -1 8 10 -0.001519 0.000000 + 0 1 -1 9 10 -0.000143 -0.000000 + 0 1 -1 10 10 -0.005886 -0.000000 + 0 1 -1 11 10 0.000516 -0.000000 + 0 1 -1 12 10 0.000662 -0.000000 + 0 1 -1 1 11 0.036873 -0.000000 + 0 1 -1 2 11 -0.018379 -0.000000 + 0 1 -1 3 11 -0.012364 -0.000000 + 0 1 -1 4 11 -0.003898 0.000000 + 0 1 -1 5 11 0.000656 -0.000000 + 0 1 -1 6 11 0.002035 0.000000 + 0 1 -1 7 11 0.003927 -0.000000 + 0 1 -1 8 11 0.001100 -0.000000 + 0 1 -1 9 11 -0.001020 -0.000000 + 0 1 -1 10 11 0.000516 0.000000 + 0 1 -1 11 11 0.001281 0.000000 + 0 1 -1 12 11 -0.000711 0.000000 + 0 1 -1 1 12 -0.001922 -0.000000 + 0 1 -1 2 12 0.002867 0.000000 + 0 1 -1 3 12 0.001533 -0.000000 + 0 1 -1 4 12 -0.005418 0.000000 + 0 1 -1 5 12 -0.005132 -0.000000 + 0 1 -1 6 12 0.003373 0.000000 + 0 1 -1 7 12 -0.001020 0.000000 + 0 1 -1 8 12 -0.000143 0.000000 + 0 1 -1 9 12 0.000617 -0.000000 + 0 1 -1 10 12 0.000662 0.000000 + 0 1 -1 11 12 -0.000711 -0.000000 + 0 1 -1 12 12 0.000793 -0.000000 + 0 1 0 1 1 -0.033978 -0.000000 + 0 1 0 2 1 -0.011489 -0.000000 + 0 1 0 3 1 0.002081 0.000000 + 0 1 0 4 1 0.011154 -0.000000 + 0 1 0 5 1 -0.003540 -0.000000 + 0 1 0 6 1 -0.003444 0.000000 + 0 1 0 7 1 -0.009884 0.000000 + 0 1 0 8 1 0.001885 0.000000 + 0 1 0 9 1 0.003898 0.000000 + 0 1 0 10 1 -0.021525 -0.000000 + 0 1 0 11 1 0.020930 -0.000000 + 0 1 0 12 1 0.002735 0.000000 + 0 1 0 1 2 -0.011489 0.000000 + 0 1 0 2 2 0.026358 -0.000000 + 0 1 0 3 2 -0.005567 0.000000 + 0 1 0 4 2 -0.004731 -0.000000 + 0 1 0 5 2 -0.010651 0.000000 + 0 1 0 6 2 -0.000487 0.000000 + 0 1 0 7 2 -0.008855 0.000000 + 0 1 0 8 2 -0.001053 -0.000000 + 0 1 0 9 2 0.005382 0.000000 + 0 1 0 10 2 -0.023372 0.000000 + 0 1 0 11 2 0.053346 -0.000000 + 0 1 0 12 2 -0.001648 0.000000 + 0 1 0 1 3 0.002081 -0.000000 + 0 1 0 2 3 -0.005567 -0.000000 + 0 1 0 3 3 0.003402 -0.000000 + 0 1 0 4 3 0.004392 -0.000000 + 0 1 0 5 3 0.000453 -0.000000 + 0 1 0 6 3 -0.000782 -0.000000 + 0 1 0 7 3 -0.016241 0.000000 + 0 1 0 8 3 0.012679 0.000000 + 0 1 0 9 3 -0.006667 0.000000 + 0 1 0 10 3 0.008426 0.000000 + 0 1 0 11 3 0.003970 0.000000 + 0 1 0 12 3 0.001823 0.000000 + 0 1 0 1 4 0.011154 0.000000 + 0 1 0 2 4 -0.004731 0.000000 + 0 1 0 3 4 0.004392 0.000000 + 0 1 0 4 4 0.026358 -0.000000 + 0 1 0 5 4 -0.011489 0.000000 + 0 1 0 6 4 -0.005567 0.000000 + 0 1 0 7 4 -0.021525 0.000000 + 0 1 0 8 4 -0.023372 -0.000000 + 0 1 0 9 4 -0.008426 0.000000 + 0 1 0 10 4 -0.001053 0.000000 + 0 1 0 11 4 0.001885 0.000000 + 0 1 0 12 4 -0.012679 0.000000 + 0 1 0 1 5 -0.003540 0.000000 + 0 1 0 2 5 -0.010651 -0.000000 + 0 1 0 3 5 0.000453 0.000000 + 0 1 0 4 5 -0.011489 -0.000000 + 0 1 0 5 5 -0.033978 -0.000000 + 0 1 0 6 5 0.002081 -0.000000 + 0 1 0 7 5 0.020930 0.000000 + 0 1 0 8 5 0.053346 0.000000 + 0 1 0 9 5 -0.003970 0.000000 + 0 1 0 10 5 -0.008855 0.000000 + 0 1 0 11 5 -0.009884 -0.000000 + 0 1 0 12 5 0.016241 0.000000 + 0 1 0 1 6 -0.003444 -0.000000 + 0 1 0 2 6 -0.000487 -0.000000 + 0 1 0 3 6 -0.000782 0.000000 + 0 1 0 4 6 -0.005567 -0.000000 + 0 1 0 5 6 0.002081 0.000000 + 0 1 0 6 6 0.003402 -0.000000 + 0 1 0 7 6 -0.002735 0.000000 + 0 1 0 8 6 0.001648 0.000000 + 0 1 0 9 6 0.001823 -0.000000 + 0 1 0 10 6 -0.005382 0.000000 + 0 1 0 11 6 -0.003898 0.000000 + 0 1 0 12 6 -0.006667 0.000000 + 0 1 0 1 7 -0.009884 -0.000000 + 0 1 0 2 7 -0.008855 -0.000000 + 0 1 0 3 7 -0.016241 -0.000000 + 0 1 0 4 7 -0.021525 -0.000000 + 0 1 0 5 7 0.020930 -0.000000 + 0 1 0 6 7 -0.002735 -0.000000 + 0 1 0 7 7 -0.033978 -0.000000 + 0 1 0 8 7 -0.011489 -0.000000 + 0 1 0 9 7 -0.002081 -0.000000 + 0 1 0 10 7 0.001100 -0.000000 + 0 1 0 11 7 0.003927 0.000000 + 0 1 0 12 7 -0.001020 -0.000000 + 0 1 0 1 8 0.001885 -0.000000 + 0 1 0 2 8 -0.001053 0.000000 + 0 1 0 3 8 0.012679 -0.000000 + 0 1 0 4 8 -0.023372 0.000000 + 0 1 0 5 8 0.053346 -0.000000 + 0 1 0 6 8 0.001648 -0.000000 + 0 1 0 7 8 -0.011489 0.000000 + 0 1 0 8 8 0.026358 -0.000000 + 0 1 0 9 8 0.005567 -0.000000 + 0 1 0 10 8 -0.001519 0.000000 + 0 1 0 11 8 0.001100 0.000000 + 0 1 0 12 8 -0.000143 -0.000000 + 0 1 0 1 9 0.003898 -0.000000 + 0 1 0 2 9 0.005382 -0.000000 + 0 1 0 3 9 -0.006667 -0.000000 + 0 1 0 4 9 -0.008426 -0.000000 + 0 1 0 5 9 -0.003970 -0.000000 + 0 1 0 6 9 0.001823 0.000000 + 0 1 0 7 9 -0.002081 0.000000 + 0 1 0 8 9 0.005567 0.000000 + 0 1 0 9 9 0.003402 -0.000000 + 0 1 0 10 9 -0.000143 0.000000 + 0 1 0 11 9 -0.001020 0.000000 + 0 1 0 12 9 0.000617 -0.000000 + 0 1 0 1 10 -0.021525 0.000000 + 0 1 0 2 10 -0.023372 -0.000000 + 0 1 0 3 10 0.008426 -0.000000 + 0 1 0 4 10 -0.001053 -0.000000 + 0 1 0 5 10 -0.008855 -0.000000 + 0 1 0 6 10 -0.005382 -0.000000 + 0 1 0 7 10 0.001100 0.000000 + 0 1 0 8 10 -0.001519 -0.000000 + 0 1 0 9 10 -0.000143 -0.000000 + 0 1 0 10 10 0.026358 -0.000000 + 0 1 0 11 10 -0.011489 -0.000000 + 0 1 0 12 10 0.005567 -0.000000 + 0 1 0 1 11 0.020930 0.000000 + 0 1 0 2 11 0.053346 0.000000 + 0 1 0 3 11 0.003970 -0.000000 + 0 1 0 4 11 0.001885 -0.000000 + 0 1 0 5 11 -0.009884 0.000000 + 0 1 0 6 11 -0.003898 -0.000000 + 0 1 0 7 11 0.003927 -0.000000 + 0 1 0 8 11 0.001100 -0.000000 + 0 1 0 9 11 -0.001020 -0.000000 + 0 1 0 10 11 -0.011489 0.000000 + 0 1 0 11 11 -0.033978 -0.000000 + 0 1 0 12 11 -0.002081 -0.000000 + 0 1 0 1 12 0.002735 -0.000000 + 0 1 0 2 12 -0.001648 -0.000000 + 0 1 0 3 12 0.001823 -0.000000 + 0 1 0 4 12 -0.012679 -0.000000 + 0 1 0 5 12 0.016241 -0.000000 + 0 1 0 6 12 -0.006667 -0.000000 + 0 1 0 7 12 -0.001020 0.000000 + 0 1 0 8 12 -0.000143 0.000000 + 0 1 0 9 12 0.000617 0.000000 + 0 1 0 10 12 0.005567 0.000000 + 0 1 0 11 12 -0.002081 0.000000 + 0 1 0 12 12 0.003402 -0.000000 + 0 1 1 1 1 0.001281 -0.000000 + 0 1 1 2 1 0.000516 0.000000 + 0 1 1 3 1 0.000711 -0.000000 + 0 1 1 4 1 -0.010651 -0.000000 + 0 1 1 5 1 -0.003540 -0.000000 + 0 1 1 6 1 0.000453 0.000000 + 0 1 1 7 1 0.000656 0.000000 + 0 1 1 8 1 -0.003898 -0.000000 + 0 1 1 9 1 -0.002035 0.000000 + 0 1 1 10 1 0.042521 0.000000 + 0 1 1 11 1 0.036873 0.000000 + 0 1 1 12 1 -0.001922 0.000000 + 0 1 1 1 2 0.000516 -0.000000 + 0 1 1 2 2 -0.005886 0.000000 + 0 1 1 3 2 -0.000662 -0.000000 + 0 1 1 4 2 -0.004731 -0.000000 + 0 1 1 5 2 0.011154 -0.000000 + 0 1 1 6 2 0.004392 -0.000000 + 0 1 1 7 2 -0.000661 -0.000000 + 0 1 1 8 2 -0.004057 0.000000 + 0 1 1 9 2 -0.002825 -0.000000 + 0 1 1 10 2 -0.023064 -0.000000 + 0 1 1 11 2 -0.018379 0.000000 + 0 1 1 12 2 0.002867 -0.000000 + 0 1 1 1 3 0.000711 0.000000 + 0 1 1 2 3 -0.000662 -0.000000 + 0 1 1 3 3 0.000793 0.000000 + 0 1 1 4 3 -0.000487 -0.000000 + 0 1 1 5 3 -0.003444 -0.000000 + 0 1 1 6 3 -0.000782 -0.000000 + 0 1 1 7 3 0.005132 -0.000000 + 0 1 1 8 3 0.005418 -0.000000 + 0 1 1 9 3 0.003373 0.000000 + 0 1 1 10 3 0.003338 0.000000 + 0 1 1 11 3 -0.012364 0.000000 + 0 1 1 12 3 0.001533 0.000000 + 0 1 1 1 4 -0.000117 -0.000000 + 0 1 1 2 4 -0.002085 -0.000000 + 0 1 1 3 4 -0.000794 0.000000 + 0 1 1 4 4 -0.005886 -0.000000 + 0 1 1 5 4 0.000516 -0.000000 + 0 1 1 6 4 -0.000662 0.000000 + 0 1 1 7 4 -0.000059 -0.000000 + 0 1 1 8 4 -0.000289 0.000000 + 0 1 1 9 4 -0.002151 -0.000000 + 0 1 1 10 4 -0.004057 -0.000000 + 0 1 1 11 4 -0.003898 -0.000000 + 0 1 1 12 4 -0.005418 -0.000000 + 0 1 1 1 5 0.001789 0.000000 + 0 1 1 2 5 -0.000117 -0.000000 + 0 1 1 3 5 0.001063 -0.000000 + 0 1 1 4 5 0.000516 0.000000 + 0 1 1 5 5 0.001281 -0.000000 + 0 1 1 6 5 0.000711 -0.000000 + 0 1 1 7 5 -0.001067 0.000000 + 0 1 1 8 5 -0.000808 0.000000 + 0 1 1 9 5 -0.000143 -0.000000 + 0 1 1 10 5 -0.000661 0.000000 + 0 1 1 11 5 0.000656 0.000000 + 0 1 1 12 5 -0.005132 0.000000 + 0 1 1 1 6 0.001063 -0.000000 + 0 1 1 2 6 -0.000794 0.000000 + 0 1 1 3 6 0.000522 -0.000000 + 0 1 1 4 6 -0.000662 -0.000000 + 0 1 1 5 6 0.000711 0.000000 + 0 1 1 6 6 0.000793 -0.000000 + 0 1 1 7 6 0.003255 -0.000000 + 0 1 1 8 6 -0.004567 0.000000 + 0 1 1 9 6 -0.000284 0.000000 + 0 1 1 10 6 0.002825 -0.000000 + 0 1 1 11 6 0.002035 -0.000000 + 0 1 1 12 6 0.003373 -0.000000 + 0 1 1 1 7 -0.001131 -0.000000 + 0 1 1 2 7 0.000572 -0.000000 + 0 1 1 3 7 -0.000060 -0.000000 + 0 1 1 4 7 0.042521 0.000000 + 0 1 1 5 7 0.036873 0.000000 + 0 1 1 6 7 0.001922 -0.000000 + 0 1 1 7 7 0.001281 0.000000 + 0 1 1 8 7 0.000516 0.000000 + 0 1 1 9 7 -0.000711 -0.000000 + 0 1 1 10 7 0.001100 -0.000000 + 0 1 1 11 7 0.003927 0.000000 + 0 1 1 12 7 -0.001020 -0.000000 + 0 1 1 1 8 0.000633 0.000000 + 0 1 1 2 8 -0.000480 -0.000000 + 0 1 1 3 8 -0.002537 -0.000000 + 0 1 1 4 8 -0.023064 -0.000000 + 0 1 1 5 8 -0.018379 0.000000 + 0 1 1 6 8 -0.002867 0.000000 + 0 1 1 7 8 0.000516 -0.000000 + 0 1 1 8 8 -0.005886 -0.000000 + 0 1 1 9 8 0.000662 -0.000000 + 0 1 1 10 8 -0.001519 -0.000000 + 0 1 1 11 8 0.001100 0.000000 + 0 1 1 12 8 -0.000143 -0.000000 + 0 1 1 1 9 0.000561 -0.000000 + 0 1 1 2 9 -0.000746 -0.000000 + 0 1 1 3 9 0.002086 -0.000000 + 0 1 1 4 9 -0.003338 -0.000000 + 0 1 1 5 9 0.012364 -0.000000 + 0 1 1 6 9 0.001533 -0.000000 + 0 1 1 7 9 -0.000711 -0.000000 + 0 1 1 8 9 0.000662 0.000000 + 0 1 1 9 9 0.000793 -0.000000 + 0 1 1 10 9 -0.000143 0.000000 + 0 1 1 11 9 -0.001020 0.000000 + 0 1 1 12 9 0.000617 0.000000 + 0 1 1 1 10 -0.000059 -0.000000 + 0 1 1 2 10 -0.000289 -0.000000 + 0 1 1 3 10 0.002151 0.000000 + 0 1 1 4 10 -0.000480 -0.000000 + 0 1 1 5 10 0.000572 0.000000 + 0 1 1 6 10 0.000746 -0.000000 + 0 1 1 7 10 -0.000136 0.000000 + 0 1 1 8 10 -0.000701 0.000000 + 0 1 1 9 10 0.000218 0.000000 + 0 1 1 10 10 -0.005886 0.000000 + 0 1 1 11 10 0.000516 -0.000000 + 0 1 1 12 10 0.000662 -0.000000 + 0 1 1 1 11 -0.001067 0.000000 + 0 1 1 2 11 -0.000808 -0.000000 + 0 1 1 3 11 0.000143 -0.000000 + 0 1 1 4 11 0.000633 -0.000000 + 0 1 1 5 11 -0.001131 0.000000 + 0 1 1 6 11 -0.000561 -0.000000 + 0 1 1 7 11 -0.000898 -0.000000 + 0 1 1 8 11 -0.000136 -0.000000 + 0 1 1 9 11 0.000411 -0.000000 + 0 1 1 10 11 0.000516 0.000000 + 0 1 1 11 11 0.001281 -0.000000 + 0 1 1 12 11 -0.000711 0.000000 + 0 1 1 1 12 -0.003255 0.000000 + 0 1 1 2 12 0.004567 -0.000000 + 0 1 1 3 12 -0.000284 -0.000000 + 0 1 1 4 12 0.002537 -0.000000 + 0 1 1 5 12 0.000060 0.000000 + 0 1 1 6 12 0.002086 0.000000 + 0 1 1 7 12 0.000411 0.000000 + 0 1 1 8 12 0.000218 -0.000000 + 0 1 1 9 12 0.000726 0.000000 + 0 1 1 10 12 0.000662 0.000000 + 0 1 1 11 12 -0.000711 -0.000000 + 0 1 1 12 12 0.000793 0.000000 + 1 -1 -1 1 1 -0.006576 0.000000 + 1 -1 -1 2 1 0.003360 0.000000 + 1 -1 -1 3 1 0.000661 0.000000 + 1 -1 -1 4 1 -0.000136 -0.000000 + 1 -1 -1 5 1 -0.000898 0.000000 + 1 -1 -1 6 1 -0.000411 -0.000000 + 1 -1 -1 7 1 0.000656 0.000000 + 1 -1 -1 8 1 -0.000661 0.000000 + 1 -1 -1 9 1 -0.005132 0.000000 + 1 -1 -1 10 1 -0.000808 0.000000 + 1 -1 -1 11 1 -0.001067 0.000000 + 1 -1 -1 12 1 -0.000143 -0.000000 + 1 -1 -1 1 2 0.003360 -0.000000 + 1 -1 -1 2 2 -0.002725 -0.000000 + 1 -1 -1 3 2 0.002175 0.000000 + 1 -1 -1 4 2 -0.000701 0.000000 + 1 -1 -1 5 2 -0.000136 -0.000000 + 1 -1 -1 6 2 -0.000218 0.000000 + 1 -1 -1 7 2 -0.003898 0.000000 + 1 -1 -1 8 2 -0.004057 -0.000000 + 1 -1 -1 9 2 -0.005418 -0.000000 + 1 -1 -1 10 2 -0.000289 -0.000000 + 1 -1 -1 11 2 -0.000059 0.000000 + 1 -1 -1 12 2 -0.002151 0.000000 + 1 -1 -1 1 3 0.000661 0.000000 + 1 -1 -1 2 3 0.002175 0.000000 + 1 -1 -1 3 3 -0.001782 -0.000000 + 1 -1 -1 4 3 -0.000218 -0.000000 + 1 -1 -1 5 3 -0.000411 -0.000000 + 1 -1 -1 6 3 0.000726 0.000000 + 1 -1 -1 7 3 0.002035 0.000000 + 1 -1 -1 8 3 0.002825 -0.000000 + 1 -1 -1 9 3 0.003373 0.000000 + 1 -1 -1 10 3 -0.004567 -0.000000 + 1 -1 -1 11 3 0.003255 -0.000000 + 1 -1 -1 12 3 -0.000284 -0.000000 + 1 -1 -1 1 4 0.011154 -0.000000 + 1 -1 -1 2 4 -0.004731 0.000000 + 1 -1 -1 3 4 0.004392 0.000000 + 1 -1 -1 4 4 -0.005524 0.000000 + 1 -1 -1 5 4 -0.005064 -0.000000 + 1 -1 -1 6 4 -0.000745 0.000000 + 1 -1 -1 7 4 0.001463 0.000000 + 1 -1 -1 8 4 0.002999 0.000000 + 1 -1 -1 9 4 -0.000263 0.000000 + 1 -1 -1 10 4 -0.008805 -0.000000 + 1 -1 -1 11 4 0.004941 0.000000 + 1 -1 -1 12 4 -0.001717 0.000000 + 1 -1 -1 1 5 -0.003540 0.000000 + 1 -1 -1 2 5 -0.010651 -0.000000 + 1 -1 -1 3 5 0.000453 0.000000 + 1 -1 -1 4 5 -0.005064 0.000000 + 1 -1 -1 5 5 -0.004024 -0.000000 + 1 -1 -1 6 5 -0.001761 0.000000 + 1 -1 -1 7 5 0.005262 -0.000000 + 1 -1 -1 8 5 0.001463 -0.000000 + 1 -1 -1 9 5 0.004782 0.000000 + 1 -1 -1 10 5 0.001251 -0.000000 + 1 -1 -1 11 5 0.000182 -0.000000 + 1 -1 -1 12 5 0.000792 0.000000 + 1 -1 -1 1 6 -0.003444 -0.000000 + 1 -1 -1 2 6 -0.000487 -0.000000 + 1 -1 -1 3 6 -0.000782 -0.000000 + 1 -1 -1 4 6 -0.000745 -0.000000 + 1 -1 -1 5 6 -0.001761 -0.000000 + 1 -1 -1 6 6 -0.001184 0.000000 + 1 -1 -1 7 6 -0.004782 -0.000000 + 1 -1 -1 8 6 0.000263 0.000000 + 1 -1 -1 9 6 -0.004078 0.000000 + 1 -1 -1 10 6 -0.003121 0.000000 + 1 -1 -1 11 6 -0.014966 0.000000 + 1 -1 -1 12 6 -0.004089 0.000000 + 1 -1 -1 1 7 0.000182 0.000000 + 1 -1 -1 2 7 0.004941 0.000000 + 1 -1 -1 3 7 -0.014966 0.000000 + 1 -1 -1 4 7 -0.000808 0.000000 + 1 -1 -1 5 7 -0.001067 0.000000 + 1 -1 -1 6 7 0.000143 0.000000 + 1 -1 -1 7 7 -0.006576 -0.000000 + 1 -1 -1 8 7 0.003360 0.000000 + 1 -1 -1 9 7 -0.000661 -0.000000 + 1 -1 -1 10 7 -0.000117 -0.000000 + 1 -1 -1 11 7 0.001789 0.000000 + 1 -1 -1 12 7 -0.001063 -0.000000 + 1 -1 -1 1 8 0.001251 -0.000000 + 1 -1 -1 2 8 -0.008805 -0.000000 + 1 -1 -1 3 8 -0.003121 -0.000000 + 1 -1 -1 4 8 -0.000289 0.000000 + 1 -1 -1 5 8 -0.000059 -0.000000 + 1 -1 -1 6 8 0.002151 -0.000000 + 1 -1 -1 7 8 0.003360 0.000000 + 1 -1 -1 8 8 -0.002725 0.000000 + 1 -1 -1 9 8 -0.002175 -0.000000 + 1 -1 -1 10 8 -0.002085 0.000000 + 1 -1 -1 11 8 -0.000117 0.000000 + 1 -1 -1 12 8 0.000794 0.000000 + 1 -1 -1 1 9 0.000792 0.000000 + 1 -1 -1 2 9 -0.001717 -0.000000 + 1 -1 -1 3 9 -0.004089 -0.000000 + 1 -1 -1 4 9 0.004567 0.000000 + 1 -1 -1 5 9 -0.003255 0.000000 + 1 -1 -1 6 9 -0.000284 -0.000000 + 1 -1 -1 7 9 -0.000661 0.000000 + 1 -1 -1 8 9 -0.002175 0.000000 + 1 -1 -1 9 9 -0.001782 0.000000 + 1 -1 -1 10 9 0.000794 0.000000 + 1 -1 -1 11 9 -0.001063 -0.000000 + 1 -1 -1 12 9 0.000522 0.000000 + 1 -1 -1 1 10 0.001463 0.000000 + 1 -1 -1 2 10 0.002999 0.000000 + 1 -1 -1 3 10 0.000263 0.000000 + 1 -1 -1 4 10 -0.000480 0.000000 + 1 -1 -1 5 10 0.000633 0.000000 + 1 -1 -1 6 10 -0.002537 -0.000000 + 1 -1 -1 7 10 -0.010651 0.000000 + 1 -1 -1 8 10 -0.004731 0.000000 + 1 -1 -1 9 10 0.000487 0.000000 + 1 -1 -1 10 10 -0.005524 0.000000 + 1 -1 -1 11 10 -0.005064 -0.000000 + 1 -1 -1 12 10 0.000745 -0.000000 + 1 -1 -1 1 11 0.005262 0.000000 + 1 -1 -1 2 11 0.001463 -0.000000 + 1 -1 -1 3 11 -0.004782 0.000000 + 1 -1 -1 4 11 0.000572 -0.000000 + 1 -1 -1 5 11 -0.001131 0.000000 + 1 -1 -1 6 11 -0.000060 -0.000000 + 1 -1 -1 7 11 -0.003540 0.000000 + 1 -1 -1 8 11 0.011154 0.000000 + 1 -1 -1 9 11 0.003444 0.000000 + 1 -1 -1 10 11 -0.005064 0.000000 + 1 -1 -1 11 11 -0.004024 0.000000 + 1 -1 -1 12 11 0.001761 -0.000000 + 1 -1 -1 1 12 0.004782 -0.000000 + 1 -1 -1 2 12 -0.000263 -0.000000 + 1 -1 -1 3 12 -0.004078 0.000000 + 1 -1 -1 4 12 -0.000746 -0.000000 + 1 -1 -1 5 12 0.000561 0.000000 + 1 -1 -1 6 12 0.002086 0.000000 + 1 -1 -1 7 12 -0.000453 0.000000 + 1 -1 -1 8 12 -0.004392 0.000000 + 1 -1 -1 9 12 -0.000782 0.000000 + 1 -1 -1 10 12 0.000745 0.000000 + 1 -1 -1 11 12 0.001761 -0.000000 + 1 -1 -1 12 12 -0.001184 -0.000000 + 1 -1 0 1 1 -0.006750 0.000000 + 1 -1 0 2 1 -0.003264 0.000000 + 1 -1 0 3 1 -0.003360 0.000000 + 1 -1 0 4 1 0.001100 -0.000000 + 1 -1 0 5 1 0.003927 0.000000 + 1 -1 0 6 1 0.001020 0.000000 + 1 -1 0 7 1 -0.009884 0.000000 + 1 -1 0 8 1 -0.008855 0.000000 + 1 -1 0 9 1 0.016241 0.000000 + 1 -1 0 10 1 0.053346 0.000000 + 1 -1 0 11 1 0.020930 -0.000000 + 1 -1 0 12 1 -0.003970 0.000000 + 1 -1 0 1 2 -0.003264 0.000000 + 1 -1 0 2 2 0.003393 0.000000 + 1 -1 0 3 2 -0.003295 -0.000000 + 1 -1 0 4 2 -0.001519 0.000000 + 1 -1 0 5 2 0.001100 0.000000 + 1 -1 0 6 2 0.000143 0.000000 + 1 -1 0 7 2 0.001885 0.000000 + 1 -1 0 8 2 -0.001053 -0.000000 + 1 -1 0 9 2 -0.012679 0.000000 + 1 -1 0 10 2 -0.023372 -0.000000 + 1 -1 0 11 2 -0.021525 0.000000 + 1 -1 0 12 2 -0.008426 -0.000000 + 1 -1 0 1 3 -0.003360 0.000000 + 1 -1 0 2 3 -0.003295 0.000000 + 1 -1 0 3 3 0.000512 -0.000000 + 1 -1 0 4 3 0.000143 -0.000000 + 1 -1 0 5 3 0.001020 -0.000000 + 1 -1 0 6 3 0.000617 -0.000000 + 1 -1 0 7 3 -0.003898 0.000000 + 1 -1 0 8 3 -0.005382 0.000000 + 1 -1 0 9 3 -0.006667 -0.000000 + 1 -1 0 10 3 0.001648 0.000000 + 1 -1 0 11 3 -0.002735 0.000000 + 1 -1 0 12 3 0.001823 -0.000000 + 1 -1 0 1 4 -0.010651 0.000000 + 1 -1 0 2 4 -0.004731 0.000000 + 1 -1 0 3 4 -0.000487 0.000000 + 1 -1 0 4 4 0.003393 -0.000000 + 1 -1 0 5 4 -0.003264 -0.000000 + 1 -1 0 6 4 -0.003295 0.000000 + 1 -1 0 7 4 -0.002409 -0.000000 + 1 -1 0 8 4 -0.003521 -0.000000 + 1 -1 0 9 4 -0.003296 -0.000000 + 1 -1 0 10 4 -0.223461 -0.000000 + 1 -1 0 11 4 0.021015 -0.000000 + 1 -1 0 12 4 0.045911 -0.000000 + 1 -1 0 1 5 -0.003540 0.000000 + 1 -1 0 2 5 0.011154 0.000000 + 1 -1 0 3 5 -0.003444 0.000000 + 1 -1 0 4 5 -0.003264 -0.000000 + 1 -1 0 5 5 -0.006750 0.000000 + 1 -1 0 6 5 -0.003360 0.000000 + 1 -1 0 7 5 -0.000864 -0.000000 + 1 -1 0 8 5 -0.002409 -0.000000 + 1 -1 0 9 5 -0.000583 -0.000000 + 1 -1 0 10 5 0.021015 0.000000 + 1 -1 0 11 5 -0.177076 0.000000 + 1 -1 0 12 5 0.019597 -0.000000 + 1 -1 0 1 6 0.000453 -0.000000 + 1 -1 0 2 6 0.004392 -0.000000 + 1 -1 0 3 6 -0.000782 -0.000000 + 1 -1 0 4 6 -0.003295 -0.000000 + 1 -1 0 5 6 -0.003360 -0.000000 + 1 -1 0 6 6 0.000512 0.000000 + 1 -1 0 7 6 0.000583 -0.000000 + 1 -1 0 8 6 0.003296 0.000000 + 1 -1 0 9 6 -0.002678 0.000000 + 1 -1 0 10 6 -0.045911 -0.000000 + 1 -1 0 11 6 -0.019597 -0.000000 + 1 -1 0 12 6 -0.039538 -0.000000 + 1 -1 0 1 7 -0.177076 -0.000000 + 1 -1 0 2 7 0.021015 0.000000 + 1 -1 0 3 7 -0.019597 -0.000000 + 1 -1 0 4 7 0.053346 0.000000 + 1 -1 0 5 7 0.020930 0.000000 + 1 -1 0 6 7 0.003970 -0.000000 + 1 -1 0 7 7 -0.006750 -0.000000 + 1 -1 0 8 7 -0.003264 -0.000000 + 1 -1 0 9 7 0.003360 -0.000000 + 1 -1 0 10 7 -0.010651 -0.000000 + 1 -1 0 11 7 -0.003540 -0.000000 + 1 -1 0 12 7 -0.000453 -0.000000 + 1 -1 0 1 8 0.021015 0.000000 + 1 -1 0 2 8 -0.223461 0.000000 + 1 -1 0 3 8 -0.045911 0.000000 + 1 -1 0 4 8 -0.023372 -0.000000 + 1 -1 0 5 8 -0.021525 -0.000000 + 1 -1 0 6 8 0.008426 -0.000000 + 1 -1 0 7 8 -0.003264 -0.000000 + 1 -1 0 8 8 0.003393 -0.000000 + 1 -1 0 9 8 0.003295 0.000000 + 1 -1 0 10 8 -0.004731 -0.000000 + 1 -1 0 11 8 0.011154 -0.000000 + 1 -1 0 12 8 -0.004392 -0.000000 + 1 -1 0 1 9 0.019597 0.000000 + 1 -1 0 2 9 0.045911 -0.000000 + 1 -1 0 3 9 -0.039538 0.000000 + 1 -1 0 4 9 -0.001648 -0.000000 + 1 -1 0 5 9 0.002735 -0.000000 + 1 -1 0 6 9 0.001823 0.000000 + 1 -1 0 7 9 0.003360 0.000000 + 1 -1 0 8 9 0.003295 -0.000000 + 1 -1 0 9 9 0.000512 0.000000 + 1 -1 0 10 9 0.000487 -0.000000 + 1 -1 0 11 9 0.003444 -0.000000 + 1 -1 0 12 9 -0.000782 -0.000000 + 1 -1 0 1 10 -0.002409 0.000000 + 1 -1 0 2 10 -0.003521 0.000000 + 1 -1 0 3 10 0.003296 0.000000 + 1 -1 0 4 10 -0.001053 0.000000 + 1 -1 0 5 10 0.001885 -0.000000 + 1 -1 0 6 10 0.012679 -0.000000 + 1 -1 0 7 10 0.011154 -0.000000 + 1 -1 0 8 10 -0.004731 0.000000 + 1 -1 0 9 10 -0.004392 -0.000000 + 1 -1 0 10 10 0.003393 0.000000 + 1 -1 0 11 10 -0.003264 -0.000000 + 1 -1 0 12 10 0.003295 -0.000000 + 1 -1 0 1 11 -0.000864 0.000000 + 1 -1 0 2 11 -0.002409 -0.000000 + 1 -1 0 3 11 0.000583 0.000000 + 1 -1 0 4 11 -0.008855 -0.000000 + 1 -1 0 5 11 -0.009884 -0.000000 + 1 -1 0 6 11 -0.016241 -0.000000 + 1 -1 0 7 11 -0.003540 0.000000 + 1 -1 0 8 11 -0.010651 -0.000000 + 1 -1 0 9 11 -0.000453 -0.000000 + 1 -1 0 10 11 -0.003264 0.000000 + 1 -1 0 11 11 -0.006750 0.000000 + 1 -1 0 12 11 0.003360 -0.000000 + 1 -1 0 1 12 -0.000583 0.000000 + 1 -1 0 2 12 -0.003296 -0.000000 + 1 -1 0 3 12 -0.002678 0.000000 + 1 -1 0 4 12 0.005382 -0.000000 + 1 -1 0 5 12 0.003898 -0.000000 + 1 -1 0 6 12 -0.006667 0.000000 + 1 -1 0 7 12 0.003444 0.000000 + 1 -1 0 8 12 0.000487 0.000000 + 1 -1 0 9 12 -0.000782 -0.000000 + 1 -1 0 10 12 0.003295 0.000000 + 1 -1 0 11 12 0.003360 0.000000 + 1 -1 0 12 12 0.000512 -0.000000 + 1 -1 1 1 1 -0.004024 0.000000 + 1 -1 1 2 1 -0.005064 -0.000000 + 1 -1 1 3 1 -0.001761 0.000000 + 1 -1 1 4 1 0.001100 -0.000000 + 1 -1 1 5 1 0.003927 -0.000000 + 1 -1 1 6 1 0.001020 0.000000 + 1 -1 1 7 1 -0.001131 0.000000 + 1 -1 1 8 1 0.000572 -0.000000 + 1 -1 1 9 1 0.000060 0.000000 + 1 -1 1 10 1 -0.018379 0.000000 + 1 -1 1 11 1 0.036873 -0.000000 + 1 -1 1 12 1 0.012364 0.000000 + 1 -1 1 1 2 -0.005064 -0.000000 + 1 -1 1 2 2 -0.005524 0.000000 + 1 -1 1 3 2 -0.000745 0.000000 + 1 -1 1 4 2 -0.001519 0.000000 + 1 -1 1 5 2 0.001100 0.000000 + 1 -1 1 6 2 0.000143 0.000000 + 1 -1 1 7 2 0.000633 0.000000 + 1 -1 1 8 2 -0.000480 0.000000 + 1 -1 1 9 2 0.002537 -0.000000 + 1 -1 1 10 2 -0.023064 0.000000 + 1 -1 1 11 2 0.042521 -0.000000 + 1 -1 1 12 2 -0.003338 0.000000 + 1 -1 1 1 3 -0.001761 -0.000000 + 1 -1 1 2 3 -0.000745 -0.000000 + 1 -1 1 3 3 -0.001184 0.000000 + 1 -1 1 4 3 0.000143 -0.000000 + 1 -1 1 5 3 0.001020 -0.000000 + 1 -1 1 6 3 0.000617 -0.000000 + 1 -1 1 7 3 -0.000561 0.000000 + 1 -1 1 8 3 0.000746 0.000000 + 1 -1 1 9 3 0.002086 0.000000 + 1 -1 1 10 3 -0.002867 0.000000 + 1 -1 1 11 3 0.001922 0.000000 + 1 -1 1 12 3 0.001533 0.000000 + 1 -1 1 1 4 -0.000117 -0.000000 + 1 -1 1 2 4 -0.002085 -0.000000 + 1 -1 1 3 4 -0.000794 0.000000 + 1 -1 1 4 4 -0.002725 -0.000000 + 1 -1 1 5 4 0.003360 0.000000 + 1 -1 1 6 4 0.002175 0.000000 + 1 -1 1 7 4 0.001052 0.000000 + 1 -1 1 8 4 -0.000692 -0.000000 + 1 -1 1 9 4 0.000790 0.000000 + 1 -1 1 10 4 -0.008805 -0.000000 + 1 -1 1 11 4 0.001251 0.000000 + 1 -1 1 12 4 0.003121 0.000000 + 1 -1 1 1 5 0.001789 -0.000000 + 1 -1 1 2 5 -0.000117 -0.000000 + 1 -1 1 3 5 0.001063 -0.000000 + 1 -1 1 4 5 0.003360 0.000000 + 1 -1 1 5 5 -0.006576 -0.000000 + 1 -1 1 6 5 0.000661 0.000000 + 1 -1 1 7 5 0.004249 -0.000000 + 1 -1 1 8 5 0.001052 -0.000000 + 1 -1 1 9 5 0.001055 0.000000 + 1 -1 1 10 5 0.004941 -0.000000 + 1 -1 1 11 5 0.000182 -0.000000 + 1 -1 1 12 5 0.014966 0.000000 + 1 -1 1 1 6 0.001063 -0.000000 + 1 -1 1 2 6 -0.000794 0.000000 + 1 -1 1 3 6 0.000522 -0.000000 + 1 -1 1 4 6 0.002175 -0.000000 + 1 -1 1 5 6 0.000661 -0.000000 + 1 -1 1 6 6 -0.001782 -0.000000 + 1 -1 1 7 6 -0.001055 -0.000000 + 1 -1 1 8 6 -0.000790 -0.000000 + 1 -1 1 9 6 0.001687 0.000000 + 1 -1 1 10 6 0.001717 0.000000 + 1 -1 1 11 6 -0.000792 0.000000 + 1 -1 1 12 6 -0.004089 -0.000000 + 1 -1 1 1 7 0.000182 -0.000000 + 1 -1 1 2 7 0.001251 0.000000 + 1 -1 1 3 7 -0.000792 -0.000000 + 1 -1 1 4 7 -0.018379 -0.000000 + 1 -1 1 5 7 0.036873 -0.000000 + 1 -1 1 6 7 -0.012364 -0.000000 + 1 -1 1 7 7 -0.004024 0.000000 + 1 -1 1 8 7 -0.005064 -0.000000 + 1 -1 1 9 7 0.001761 -0.000000 + 1 -1 1 10 7 0.011154 0.000000 + 1 -1 1 11 7 -0.003540 -0.000000 + 1 -1 1 12 7 0.003444 -0.000000 + 1 -1 1 1 8 0.004941 -0.000000 + 1 -1 1 2 8 -0.008805 0.000000 + 1 -1 1 3 8 0.001717 -0.000000 + 1 -1 1 4 8 -0.023064 0.000000 + 1 -1 1 5 8 0.042521 -0.000000 + 1 -1 1 6 8 0.003338 -0.000000 + 1 -1 1 7 8 -0.005064 -0.000000 + 1 -1 1 8 8 -0.005524 0.000000 + 1 -1 1 9 8 0.000745 -0.000000 + 1 -1 1 10 8 -0.004731 -0.000000 + 1 -1 1 11 8 -0.010651 0.000000 + 1 -1 1 12 8 0.000487 -0.000000 + 1 -1 1 1 9 0.014966 -0.000000 + 1 -1 1 2 9 0.003121 -0.000000 + 1 -1 1 3 9 -0.004089 0.000000 + 1 -1 1 4 9 0.002867 -0.000000 + 1 -1 1 5 9 -0.001922 -0.000000 + 1 -1 1 6 9 0.001533 0.000000 + 1 -1 1 7 9 0.001761 0.000000 + 1 -1 1 8 9 0.000745 0.000000 + 1 -1 1 9 9 -0.001184 0.000000 + 1 -1 1 10 9 -0.004392 0.000000 + 1 -1 1 11 9 -0.000453 0.000000 + 1 -1 1 12 9 -0.000782 0.000000 + 1 -1 1 1 10 0.001052 -0.000000 + 1 -1 1 2 10 -0.000692 0.000000 + 1 -1 1 3 10 -0.000790 -0.000000 + 1 -1 1 4 10 -0.004057 0.000000 + 1 -1 1 5 10 -0.003898 -0.000000 + 1 -1 1 6 10 0.005418 0.000000 + 1 -1 1 7 10 -0.000117 -0.000000 + 1 -1 1 8 10 -0.002085 0.000000 + 1 -1 1 9 10 0.000794 -0.000000 + 1 -1 1 10 10 -0.002725 -0.000000 + 1 -1 1 11 10 0.003360 0.000000 + 1 -1 1 12 10 -0.002175 -0.000000 + 1 -1 1 1 11 0.004249 -0.000000 + 1 -1 1 2 11 0.001052 0.000000 + 1 -1 1 3 11 -0.001055 0.000000 + 1 -1 1 4 11 -0.000661 0.000000 + 1 -1 1 5 11 0.000656 0.000000 + 1 -1 1 6 11 0.005132 -0.000000 + 1 -1 1 7 11 0.001789 -0.000000 + 1 -1 1 8 11 -0.000117 -0.000000 + 1 -1 1 9 11 -0.001063 0.000000 + 1 -1 1 10 11 0.003360 -0.000000 + 1 -1 1 11 11 -0.006576 -0.000000 + 1 -1 1 12 11 -0.000661 -0.000000 + 1 -1 1 1 12 0.001055 0.000000 + 1 -1 1 2 12 0.000790 -0.000000 + 1 -1 1 3 12 0.001687 0.000000 + 1 -1 1 4 12 -0.002825 -0.000000 + 1 -1 1 5 12 -0.002035 0.000000 + 1 -1 1 6 12 0.003373 0.000000 + 1 -1 1 7 12 -0.001063 0.000000 + 1 -1 1 8 12 0.000794 -0.000000 + 1 -1 1 9 12 0.000522 0.000000 + 1 -1 1 10 12 -0.002175 0.000000 + 1 -1 1 11 12 -0.000661 0.000000 + 1 -1 1 12 12 -0.001782 -0.000000 + 1 0 -1 1 1 -0.002576 -0.000000 + 1 0 -1 2 1 -0.002479 -0.000000 + 1 0 -1 3 1 0.012014 0.000000 + 1 0 -1 4 1 -0.002049 -0.000000 + 1 0 -1 5 1 -0.007888 -0.000000 + 1 0 -1 6 1 0.000537 -0.000000 + 1 0 -1 7 1 0.000656 -0.000000 + 1 0 -1 8 1 -0.003898 0.000000 + 1 0 -1 9 1 -0.002035 0.000000 + 1 0 -1 10 1 -0.000059 0.000000 + 1 0 -1 11 1 -0.001067 0.000000 + 1 0 -1 12 1 -0.003255 0.000000 + 1 0 -1 1 2 -0.002479 0.000000 + 1 0 -1 2 2 0.005370 0.000000 + 1 0 -1 3 2 -0.013477 0.000000 + 1 0 -1 4 2 0.001565 0.000000 + 1 0 -1 5 2 -0.002049 -0.000000 + 1 0 -1 6 2 0.011447 -0.000000 + 1 0 -1 7 2 -0.000661 0.000000 + 1 0 -1 8 2 -0.004057 0.000000 + 1 0 -1 9 2 -0.002825 -0.000000 + 1 0 -1 10 2 -0.000289 -0.000000 + 1 0 -1 11 2 -0.000808 0.000000 + 1 0 -1 12 2 0.004567 0.000000 + 1 0 -1 1 3 0.012014 -0.000000 + 1 0 -1 2 3 -0.013477 0.000000 + 1 0 -1 3 3 -0.011804 0.000000 + 1 0 -1 4 3 0.011447 0.000000 + 1 0 -1 5 3 0.000537 -0.000000 + 1 0 -1 6 3 0.017130 0.000000 + 1 0 -1 7 3 0.005132 -0.000000 + 1 0 -1 8 3 0.005418 -0.000000 + 1 0 -1 9 3 0.003373 0.000000 + 1 0 -1 10 3 0.002151 -0.000000 + 1 0 -1 11 3 0.000143 0.000000 + 1 0 -1 12 3 -0.000284 0.000000 + 1 0 -1 1 4 0.131177 -0.000000 + 1 0 -1 2 4 -0.114958 -0.000000 + 1 0 -1 3 4 -0.031897 -0.000000 + 1 0 -1 4 4 0.000971 -0.000000 + 1 0 -1 5 4 -0.001875 -0.000000 + 1 0 -1 6 4 -0.016089 0.000000 + 1 0 -1 7 4 -0.002409 0.000000 + 1 0 -1 8 4 -0.003521 -0.000000 + 1 0 -1 9 4 -0.003296 0.000000 + 1 0 -1 10 4 -0.008805 -0.000000 + 1 0 -1 11 4 0.001251 0.000000 + 1 0 -1 12 4 0.003121 0.000000 + 1 0 -1 1 5 0.117955 -0.000000 + 1 0 -1 2 5 -0.029678 -0.000000 + 1 0 -1 3 5 -0.021868 0.000000 + 1 0 -1 4 5 -0.001875 0.000000 + 1 0 -1 5 5 -0.003709 0.000000 + 1 0 -1 6 5 -0.010883 0.000000 + 1 0 -1 7 5 -0.000864 0.000000 + 1 0 -1 8 5 -0.002409 -0.000000 + 1 0 -1 9 5 -0.000583 -0.000000 + 1 0 -1 10 5 0.004941 -0.000000 + 1 0 -1 11 5 0.000182 0.000000 + 1 0 -1 12 5 0.014966 0.000000 + 1 0 -1 1 6 -0.042312 -0.000000 + 1 0 -1 2 6 0.080588 -0.000000 + 1 0 -1 3 6 -0.191389 -0.000000 + 1 0 -1 4 6 -0.016089 -0.000000 + 1 0 -1 5 6 -0.010883 -0.000000 + 1 0 -1 6 6 -0.005433 0.000000 + 1 0 -1 7 6 0.000583 -0.000000 + 1 0 -1 8 6 0.003296 -0.000000 + 1 0 -1 9 6 -0.002678 0.000000 + 1 0 -1 10 6 0.001717 0.000000 + 1 0 -1 11 6 -0.000792 -0.000000 + 1 0 -1 12 6 -0.004089 -0.000000 + 1 0 -1 1 7 0.000182 0.000000 + 1 0 -1 2 7 0.001251 0.000000 + 1 0 -1 3 7 -0.000792 0.000000 + 1 0 -1 4 7 -0.000059 0.000000 + 1 0 -1 5 7 -0.001067 -0.000000 + 1 0 -1 6 7 0.003255 -0.000000 + 1 0 -1 7 7 -0.002576 -0.000000 + 1 0 -1 8 7 -0.002479 -0.000000 + 1 0 -1 9 7 -0.012014 -0.000000 + 1 0 -1 10 7 0.000046 0.000000 + 1 0 -1 11 7 -0.000356 -0.000000 + 1 0 -1 12 7 0.007908 -0.000000 + 1 0 -1 1 8 0.004941 -0.000000 + 1 0 -1 2 8 -0.008805 0.000000 + 1 0 -1 3 8 0.001717 -0.000000 + 1 0 -1 4 8 -0.000289 0.000000 + 1 0 -1 5 8 -0.000808 -0.000000 + 1 0 -1 6 8 -0.004567 -0.000000 + 1 0 -1 7 8 -0.002479 0.000000 + 1 0 -1 8 8 0.005370 0.000000 + 1 0 -1 9 8 0.013477 0.000000 + 1 0 -1 10 8 0.004160 -0.000000 + 1 0 -1 11 8 0.000046 0.000000 + 1 0 -1 12 8 -0.003257 -0.000000 + 1 0 -1 1 9 0.014966 -0.000000 + 1 0 -1 2 9 0.003121 -0.000000 + 1 0 -1 3 9 -0.004089 0.000000 + 1 0 -1 4 9 -0.002151 0.000000 + 1 0 -1 5 9 -0.000143 0.000000 + 1 0 -1 6 9 -0.000284 0.000000 + 1 0 -1 7 9 -0.012014 0.000000 + 1 0 -1 8 9 0.013477 -0.000000 + 1 0 -1 9 9 -0.011804 0.000000 + 1 0 -1 10 9 -0.003257 0.000000 + 1 0 -1 11 9 0.007908 0.000000 + 1 0 -1 12 9 -0.001138 -0.000000 + 1 0 -1 1 10 -0.002409 -0.000000 + 1 0 -1 2 10 -0.003521 0.000000 + 1 0 -1 3 10 0.003296 0.000000 + 1 0 -1 4 10 -0.000480 -0.000000 + 1 0 -1 5 10 0.000572 0.000000 + 1 0 -1 6 10 0.000746 -0.000000 + 1 0 -1 7 10 -0.029678 0.000000 + 1 0 -1 8 10 -0.114958 -0.000000 + 1 0 -1 9 10 -0.080588 0.000000 + 1 0 -1 10 10 0.000971 -0.000000 + 1 0 -1 11 10 -0.001875 -0.000000 + 1 0 -1 12 10 0.016089 -0.000000 + 1 0 -1 1 11 -0.000864 0.000000 + 1 0 -1 2 11 -0.002409 0.000000 + 1 0 -1 3 11 0.000583 0.000000 + 1 0 -1 4 11 0.000633 -0.000000 + 1 0 -1 5 11 -0.001131 0.000000 + 1 0 -1 6 11 -0.000561 0.000000 + 1 0 -1 7 11 0.117955 0.000000 + 1 0 -1 8 11 0.131177 0.000000 + 1 0 -1 9 11 0.042312 0.000000 + 1 0 -1 10 11 -0.001875 0.000000 + 1 0 -1 11 11 -0.003709 0.000000 + 1 0 -1 12 11 0.010883 -0.000000 + 1 0 -1 1 12 -0.000583 0.000000 + 1 0 -1 2 12 -0.003296 0.000000 + 1 0 -1 3 12 -0.002678 -0.000000 + 1 0 -1 4 12 0.002537 -0.000000 + 1 0 -1 5 12 0.000060 -0.000000 + 1 0 -1 6 12 0.002086 -0.000000 + 1 0 -1 7 12 0.021868 -0.000000 + 1 0 -1 8 12 0.031897 0.000000 + 1 0 -1 9 12 -0.191389 -0.000000 + 1 0 -1 10 12 0.016089 0.000000 + 1 0 -1 11 12 0.010883 0.000000 + 1 0 -1 12 12 -0.005433 -0.000000 + 1 0 0 1 1 0.001945 -0.000000 + 1 0 0 2 1 0.005620 0.000000 + 1 0 0 3 1 0.009668 0.000000 + 1 0 0 4 1 -0.001355 -0.000000 + 1 0 0 5 1 -0.001701 -0.000000 + 1 0 0 6 1 0.002485 0.000000 + 1 0 0 7 1 -0.009884 0.000000 + 1 0 0 8 1 0.001885 0.000000 + 1 0 0 9 1 0.003898 0.000000 + 1 0 0 10 1 0.042521 0.000000 + 1 0 0 11 1 0.036873 0.000000 + 1 0 0 12 1 -0.001922 0.000000 + 1 0 0 1 2 0.005620 -0.000000 + 1 0 0 2 2 -0.000637 0.000000 + 1 0 0 3 2 0.014431 0.000000 + 1 0 0 4 2 0.006074 -0.000000 + 1 0 0 5 2 -0.001355 0.000000 + 1 0 0 6 2 0.008388 0.000000 + 1 0 0 7 2 -0.008855 0.000000 + 1 0 0 8 2 -0.001053 -0.000000 + 1 0 0 9 2 0.005382 0.000000 + 1 0 0 10 2 -0.023064 -0.000000 + 1 0 0 11 2 -0.018379 0.000000 + 1 0 0 12 2 0.002867 -0.000000 + 1 0 0 1 3 0.009668 -0.000000 + 1 0 0 2 3 0.014431 -0.000000 + 1 0 0 3 3 -0.073208 0.000000 + 1 0 0 4 3 0.008388 -0.000000 + 1 0 0 5 3 0.002485 -0.000000 + 1 0 0 6 3 -0.009679 0.000000 + 1 0 0 7 3 -0.016241 0.000000 + 1 0 0 8 3 0.012679 0.000000 + 1 0 0 9 3 -0.006667 -0.000000 + 1 0 0 10 3 0.003338 0.000000 + 1 0 0 11 3 -0.012364 0.000000 + 1 0 0 12 3 0.001533 -0.000000 + 1 0 0 1 4 -0.029678 -0.000000 + 1 0 0 2 4 -0.114958 -0.000000 + 1 0 0 3 4 0.080588 0.000000 + 1 0 0 4 4 -0.000637 -0.000000 + 1 0 0 5 4 0.005620 0.000000 + 1 0 0 6 4 0.014431 -0.000000 + 1 0 0 7 4 0.001463 -0.000000 + 1 0 0 8 4 0.002999 0.000000 + 1 0 0 9 4 -0.000263 -0.000000 + 1 0 0 10 4 -0.223461 -0.000000 + 1 0 0 11 4 0.021015 -0.000000 + 1 0 0 12 4 0.045911 -0.000000 + 1 0 0 1 5 0.117955 -0.000000 + 1 0 0 2 5 0.131177 0.000000 + 1 0 0 3 5 -0.042312 0.000000 + 1 0 0 4 5 0.005620 -0.000000 + 1 0 0 5 5 0.001945 0.000000 + 1 0 0 6 5 0.009668 0.000000 + 1 0 0 7 5 0.005262 -0.000000 + 1 0 0 8 5 0.001463 0.000000 + 1 0 0 9 5 0.004782 -0.000000 + 1 0 0 10 5 0.021015 0.000000 + 1 0 0 11 5 -0.177076 0.000000 + 1 0 0 12 5 0.019597 -0.000000 + 1 0 0 1 6 -0.021868 -0.000000 + 1 0 0 2 6 -0.031897 -0.000000 + 1 0 0 3 6 -0.191389 -0.000000 + 1 0 0 4 6 0.014431 -0.000000 + 1 0 0 5 6 0.009668 -0.000000 + 1 0 0 6 6 -0.073208 -0.000000 + 1 0 0 7 6 -0.004782 -0.000000 + 1 0 0 8 6 0.000263 0.000000 + 1 0 0 9 6 -0.004078 -0.000000 + 1 0 0 10 6 -0.045911 -0.000000 + 1 0 0 11 6 -0.019597 -0.000000 + 1 0 0 12 6 -0.039538 0.000000 + 1 0 0 1 7 -0.177076 -0.000000 + 1 0 0 2 7 0.021015 0.000000 + 1 0 0 3 7 -0.019597 0.000000 + 1 0 0 4 7 0.042521 0.000000 + 1 0 0 5 7 0.036873 0.000000 + 1 0 0 6 7 0.001922 -0.000000 + 1 0 0 7 7 0.001945 -0.000000 + 1 0 0 8 7 0.005620 0.000000 + 1 0 0 9 7 -0.009668 -0.000000 + 1 0 0 10 7 -0.029678 -0.000000 + 1 0 0 11 7 0.117955 -0.000000 + 1 0 0 12 7 0.021868 0.000000 + 1 0 0 1 8 0.021015 0.000000 + 1 0 0 2 8 -0.223461 0.000000 + 1 0 0 3 8 -0.045911 0.000000 + 1 0 0 4 8 -0.023064 -0.000000 + 1 0 0 5 8 -0.018379 -0.000000 + 1 0 0 6 8 -0.002867 -0.000000 + 1 0 0 7 8 0.005620 -0.000000 + 1 0 0 8 8 -0.000637 -0.000000 + 1 0 0 9 8 -0.014431 -0.000000 + 1 0 0 10 8 -0.114958 0.000000 + 1 0 0 11 8 0.131177 -0.000000 + 1 0 0 12 8 0.031897 -0.000000 + 1 0 0 1 9 0.019597 0.000000 + 1 0 0 2 9 0.045911 -0.000000 + 1 0 0 3 9 -0.039538 0.000000 + 1 0 0 4 9 -0.003338 -0.000000 + 1 0 0 5 9 0.012364 -0.000000 + 1 0 0 6 9 0.001533 0.000000 + 1 0 0 7 9 -0.009668 0.000000 + 1 0 0 8 9 -0.014431 0.000000 + 1 0 0 9 9 -0.073208 0.000000 + 1 0 0 10 9 -0.080588 -0.000000 + 1 0 0 11 9 0.042312 -0.000000 + 1 0 0 12 9 -0.191389 0.000000 + 1 0 0 1 10 0.001463 0.000000 + 1 0 0 2 10 0.002999 0.000000 + 1 0 0 3 10 0.000263 0.000000 + 1 0 0 4 10 -0.001053 -0.000000 + 1 0 0 5 10 -0.008855 -0.000000 + 1 0 0 6 10 -0.005382 -0.000000 + 1 0 0 7 10 0.131177 -0.000000 + 1 0 0 8 10 -0.114958 0.000000 + 1 0 0 9 10 0.031897 0.000000 + 1 0 0 10 10 -0.000637 0.000000 + 1 0 0 11 10 0.005620 0.000000 + 1 0 0 12 10 -0.014431 -0.000000 + 1 0 0 1 11 0.005262 0.000000 + 1 0 0 2 11 0.001463 -0.000000 + 1 0 0 3 11 -0.004782 0.000000 + 1 0 0 4 11 0.001885 -0.000000 + 1 0 0 5 11 -0.009884 0.000000 + 1 0 0 6 11 -0.003898 -0.000000 + 1 0 0 7 11 0.117955 -0.000000 + 1 0 0 8 11 -0.029678 -0.000000 + 1 0 0 9 11 0.021868 -0.000000 + 1 0 0 10 11 0.005620 -0.000000 + 1 0 0 11 11 0.001945 0.000000 + 1 0 0 12 11 -0.009668 -0.000000 + 1 0 0 1 12 0.004782 0.000000 + 1 0 0 2 12 -0.000263 -0.000000 + 1 0 0 3 12 -0.004078 0.000000 + 1 0 0 4 12 -0.012679 -0.000000 + 1 0 0 5 12 0.016241 -0.000000 + 1 0 0 6 12 -0.006667 -0.000000 + 1 0 0 7 12 0.042312 -0.000000 + 1 0 0 8 12 -0.080588 0.000000 + 1 0 0 9 12 -0.191389 -0.000000 + 1 0 0 10 12 -0.014431 0.000000 + 1 0 0 11 12 -0.009668 0.000000 + 1 0 0 12 12 -0.073208 -0.000000 + 1 0 1 1 1 -0.003709 -0.000000 + 1 0 1 2 1 -0.001875 -0.000000 + 1 0 1 3 1 -0.010883 0.000000 + 1 0 1 4 1 -0.001355 -0.000000 + 1 0 1 5 1 -0.001701 -0.000000 + 1 0 1 6 1 0.002485 0.000000 + 1 0 1 7 1 -0.001131 -0.000000 + 1 0 1 8 1 0.000633 -0.000000 + 1 0 1 9 1 0.000561 0.000000 + 1 0 1 10 1 -0.021525 0.000000 + 1 0 1 11 1 0.020930 -0.000000 + 1 0 1 12 1 0.002735 0.000000 + 1 0 1 1 2 -0.001875 -0.000000 + 1 0 1 2 2 0.000971 -0.000000 + 1 0 1 3 2 -0.016089 0.000000 + 1 0 1 4 2 0.006074 -0.000000 + 1 0 1 5 2 -0.001355 0.000000 + 1 0 1 6 2 0.008388 0.000000 + 1 0 1 7 2 0.000572 0.000000 + 1 0 1 8 2 -0.000480 0.000000 + 1 0 1 9 2 -0.000746 0.000000 + 1 0 1 10 2 -0.023372 0.000000 + 1 0 1 11 2 0.053346 -0.000000 + 1 0 1 12 2 -0.001648 0.000000 + 1 0 1 1 3 -0.010883 -0.000000 + 1 0 1 2 3 -0.016089 -0.000000 + 1 0 1 3 3 -0.005433 0.000000 + 1 0 1 4 3 0.008388 -0.000000 + 1 0 1 5 3 0.002485 -0.000000 + 1 0 1 6 3 -0.009679 0.000000 + 1 0 1 7 3 -0.000060 0.000000 + 1 0 1 8 3 -0.002537 0.000000 + 1 0 1 9 3 0.002086 -0.000000 + 1 0 1 10 3 0.008426 0.000000 + 1 0 1 11 3 0.003970 0.000000 + 1 0 1 12 3 0.001823 0.000000 + 1 0 1 1 4 0.000046 -0.000000 + 1 0 1 2 4 0.004160 -0.000000 + 1 0 1 3 4 0.003257 0.000000 + 1 0 1 4 4 0.005370 -0.000000 + 1 0 1 5 4 -0.002479 0.000000 + 1 0 1 6 4 -0.013477 -0.000000 + 1 0 1 7 4 0.001052 0.000000 + 1 0 1 8 4 -0.000692 -0.000000 + 1 0 1 9 4 0.000790 -0.000000 + 1 0 1 10 4 -0.008805 -0.000000 + 1 0 1 11 4 0.004941 0.000000 + 1 0 1 12 4 -0.001717 0.000000 + 1 0 1 1 5 -0.000356 -0.000000 + 1 0 1 2 5 0.000046 0.000000 + 1 0 1 3 5 -0.007908 0.000000 + 1 0 1 4 5 -0.002479 0.000000 + 1 0 1 5 5 -0.002576 0.000000 + 1 0 1 6 5 0.012014 0.000000 + 1 0 1 7 5 0.004249 -0.000000 + 1 0 1 8 5 0.001052 -0.000000 + 1 0 1 9 5 0.001055 0.000000 + 1 0 1 10 5 0.001251 0.000000 + 1 0 1 11 5 0.000182 -0.000000 + 1 0 1 12 5 0.000792 0.000000 + 1 0 1 1 6 -0.007908 -0.000000 + 1 0 1 2 6 0.003257 -0.000000 + 1 0 1 3 6 -0.001138 -0.000000 + 1 0 1 4 6 -0.013477 0.000000 + 1 0 1 5 6 0.012014 -0.000000 + 1 0 1 6 6 -0.011804 -0.000000 + 1 0 1 7 6 -0.001055 -0.000000 + 1 0 1 8 6 -0.000790 -0.000000 + 1 0 1 9 6 0.001687 0.000000 + 1 0 1 10 6 -0.003121 0.000000 + 1 0 1 11 6 -0.014966 -0.000000 + 1 0 1 12 6 -0.004089 0.000000 + 1 0 1 1 7 0.000182 0.000000 + 1 0 1 2 7 0.004941 0.000000 + 1 0 1 3 7 -0.014966 0.000000 + 1 0 1 4 7 -0.021525 -0.000000 + 1 0 1 5 7 0.020930 -0.000000 + 1 0 1 6 7 -0.002735 0.000000 + 1 0 1 7 7 -0.003709 0.000000 + 1 0 1 8 7 -0.001875 -0.000000 + 1 0 1 9 7 0.010883 -0.000000 + 1 0 1 10 7 0.131177 0.000000 + 1 0 1 11 7 0.117955 0.000000 + 1 0 1 12 7 0.042312 0.000000 + 1 0 1 1 8 0.001251 -0.000000 + 1 0 1 2 8 -0.008805 0.000000 + 1 0 1 3 8 -0.003121 -0.000000 + 1 0 1 4 8 -0.023372 0.000000 + 1 0 1 5 8 0.053346 -0.000000 + 1 0 1 6 8 0.001648 -0.000000 + 1 0 1 7 8 -0.001875 -0.000000 + 1 0 1 8 8 0.000971 -0.000000 + 1 0 1 9 8 0.016089 -0.000000 + 1 0 1 10 8 -0.114958 -0.000000 + 1 0 1 11 8 -0.029678 0.000000 + 1 0 1 12 8 -0.080588 -0.000000 + 1 0 1 1 9 0.000792 -0.000000 + 1 0 1 2 9 -0.001717 -0.000000 + 1 0 1 3 9 -0.004089 -0.000000 + 1 0 1 4 9 -0.008426 -0.000000 + 1 0 1 5 9 -0.003970 -0.000000 + 1 0 1 6 9 0.001823 0.000000 + 1 0 1 7 9 0.010883 0.000000 + 1 0 1 8 9 0.016089 0.000000 + 1 0 1 9 9 -0.005433 -0.000000 + 1 0 1 10 9 0.031897 -0.000000 + 1 0 1 11 9 0.021868 0.000000 + 1 0 1 12 9 -0.191389 0.000000 + 1 0 1 1 10 0.001052 0.000000 + 1 0 1 2 10 -0.000692 -0.000000 + 1 0 1 3 10 -0.000790 -0.000000 + 1 0 1 4 10 -0.004057 0.000000 + 1 0 1 5 10 -0.000661 -0.000000 + 1 0 1 6 10 0.002825 0.000000 + 1 0 1 7 10 0.000046 -0.000000 + 1 0 1 8 10 0.004160 0.000000 + 1 0 1 9 10 -0.003257 -0.000000 + 1 0 1 10 10 0.005370 -0.000000 + 1 0 1 11 10 -0.002479 0.000000 + 1 0 1 12 10 0.013477 0.000000 + 1 0 1 1 11 0.004249 -0.000000 + 1 0 1 2 11 0.001052 0.000000 + 1 0 1 3 11 -0.001055 -0.000000 + 1 0 1 4 11 -0.003898 0.000000 + 1 0 1 5 11 0.000656 -0.000000 + 1 0 1 6 11 0.002035 0.000000 + 1 0 1 7 11 -0.000356 -0.000000 + 1 0 1 8 11 0.000046 0.000000 + 1 0 1 9 11 0.007908 -0.000000 + 1 0 1 10 11 -0.002479 -0.000000 + 1 0 1 11 11 -0.002576 -0.000000 + 1 0 1 12 11 -0.012014 -0.000000 + 1 0 1 1 12 0.001055 -0.000000 + 1 0 1 2 12 0.000790 -0.000000 + 1 0 1 3 12 0.001687 0.000000 + 1 0 1 4 12 -0.005418 0.000000 + 1 0 1 5 12 -0.005132 -0.000000 + 1 0 1 6 12 0.003373 0.000000 + 1 0 1 7 12 0.007908 0.000000 + 1 0 1 8 12 -0.003257 0.000000 + 1 0 1 9 12 -0.001138 -0.000000 + 1 0 1 10 12 0.013477 -0.000000 + 1 0 1 11 12 -0.012014 0.000000 + 1 0 1 12 12 -0.011804 0.000000 + 1 1 -1 1 1 -0.006576 0.000000 + 1 1 -1 2 1 0.003360 0.000000 + 1 1 -1 3 1 0.000661 0.000000 + 1 1 -1 4 1 -0.000136 -0.000000 + 1 1 -1 5 1 -0.000898 0.000000 + 1 1 -1 6 1 -0.000411 -0.000000 + 1 1 -1 7 1 0.000656 0.000000 + 1 1 -1 8 1 -0.000661 0.000000 + 1 1 -1 9 1 -0.005132 0.000000 + 1 1 -1 10 1 -0.000808 0.000000 + 1 1 -1 11 1 -0.001067 0.000000 + 1 1 -1 12 1 -0.000143 -0.000000 + 1 1 -1 1 2 0.003360 -0.000000 + 1 1 -1 2 2 -0.002725 -0.000000 + 1 1 -1 3 2 0.002175 0.000000 + 1 1 -1 4 2 -0.000701 0.000000 + 1 1 -1 5 2 -0.000136 -0.000000 + 1 1 -1 6 2 -0.000218 0.000000 + 1 1 -1 7 2 -0.003898 0.000000 + 1 1 -1 8 2 -0.004057 -0.000000 + 1 1 -1 9 2 -0.005418 -0.000000 + 1 1 -1 10 2 -0.000289 -0.000000 + 1 1 -1 11 2 -0.000059 0.000000 + 1 1 -1 12 2 -0.002151 0.000000 + 1 1 -1 1 3 0.000661 0.000000 + 1 1 -1 2 3 0.002175 0.000000 + 1 1 -1 3 3 -0.001782 -0.000000 + 1 1 -1 4 3 -0.000218 -0.000000 + 1 1 -1 5 3 -0.000411 -0.000000 + 1 1 -1 6 3 0.000726 0.000000 + 1 1 -1 7 3 0.002035 0.000000 + 1 1 -1 8 3 0.002825 -0.000000 + 1 1 -1 9 3 0.003373 0.000000 + 1 1 -1 10 3 -0.004567 -0.000000 + 1 1 -1 11 3 0.003255 -0.000000 + 1 1 -1 12 3 -0.000284 -0.000000 + 1 1 -1 1 4 0.011154 -0.000000 + 1 1 -1 2 4 -0.004731 0.000000 + 1 1 -1 3 4 0.004392 0.000000 + 1 1 -1 4 4 -0.005524 0.000000 + 1 1 -1 5 4 -0.005064 -0.000000 + 1 1 -1 6 4 -0.000745 0.000000 + 1 1 -1 7 4 0.001463 0.000000 + 1 1 -1 8 4 0.002999 0.000000 + 1 1 -1 9 4 -0.000263 0.000000 + 1 1 -1 10 4 -0.008805 -0.000000 + 1 1 -1 11 4 0.004941 0.000000 + 1 1 -1 12 4 -0.001717 0.000000 + 1 1 -1 1 5 -0.003540 0.000000 + 1 1 -1 2 5 -0.010651 -0.000000 + 1 1 -1 3 5 0.000453 0.000000 + 1 1 -1 4 5 -0.005064 0.000000 + 1 1 -1 5 5 -0.004024 -0.000000 + 1 1 -1 6 5 -0.001761 0.000000 + 1 1 -1 7 5 0.005262 -0.000000 + 1 1 -1 8 5 0.001463 -0.000000 + 1 1 -1 9 5 0.004782 0.000000 + 1 1 -1 10 5 0.001251 -0.000000 + 1 1 -1 11 5 0.000182 -0.000000 + 1 1 -1 12 5 0.000792 0.000000 + 1 1 -1 1 6 -0.003444 -0.000000 + 1 1 -1 2 6 -0.000487 -0.000000 + 1 1 -1 3 6 -0.000782 -0.000000 + 1 1 -1 4 6 -0.000745 -0.000000 + 1 1 -1 5 6 -0.001761 -0.000000 + 1 1 -1 6 6 -0.001184 0.000000 + 1 1 -1 7 6 -0.004782 -0.000000 + 1 1 -1 8 6 0.000263 0.000000 + 1 1 -1 9 6 -0.004078 0.000000 + 1 1 -1 10 6 -0.003121 0.000000 + 1 1 -1 11 6 -0.014966 0.000000 + 1 1 -1 12 6 -0.004089 0.000000 + 1 1 -1 1 7 0.000182 0.000000 + 1 1 -1 2 7 0.004941 0.000000 + 1 1 -1 3 7 -0.014966 0.000000 + 1 1 -1 4 7 -0.000808 0.000000 + 1 1 -1 5 7 -0.001067 0.000000 + 1 1 -1 6 7 0.000143 0.000000 + 1 1 -1 7 7 -0.006576 -0.000000 + 1 1 -1 8 7 0.003360 0.000000 + 1 1 -1 9 7 -0.000661 -0.000000 + 1 1 -1 10 7 -0.000117 -0.000000 + 1 1 -1 11 7 0.001789 0.000000 + 1 1 -1 12 7 -0.001063 -0.000000 + 1 1 -1 1 8 0.001251 -0.000000 + 1 1 -1 2 8 -0.008805 -0.000000 + 1 1 -1 3 8 -0.003121 -0.000000 + 1 1 -1 4 8 -0.000289 0.000000 + 1 1 -1 5 8 -0.000059 -0.000000 + 1 1 -1 6 8 0.002151 -0.000000 + 1 1 -1 7 8 0.003360 0.000000 + 1 1 -1 8 8 -0.002725 0.000000 + 1 1 -1 9 8 -0.002175 -0.000000 + 1 1 -1 10 8 -0.002085 0.000000 + 1 1 -1 11 8 -0.000117 0.000000 + 1 1 -1 12 8 0.000794 0.000000 + 1 1 -1 1 9 0.000792 0.000000 + 1 1 -1 2 9 -0.001717 -0.000000 + 1 1 -1 3 9 -0.004089 -0.000000 + 1 1 -1 4 9 0.004567 0.000000 + 1 1 -1 5 9 -0.003255 0.000000 + 1 1 -1 6 9 -0.000284 -0.000000 + 1 1 -1 7 9 -0.000661 0.000000 + 1 1 -1 8 9 -0.002175 0.000000 + 1 1 -1 9 9 -0.001782 0.000000 + 1 1 -1 10 9 0.000794 0.000000 + 1 1 -1 11 9 -0.001063 -0.000000 + 1 1 -1 12 9 0.000522 0.000000 + 1 1 -1 1 10 0.001463 0.000000 + 1 1 -1 2 10 0.002999 0.000000 + 1 1 -1 3 10 0.000263 0.000000 + 1 1 -1 4 10 -0.000480 0.000000 + 1 1 -1 5 10 0.000633 0.000000 + 1 1 -1 6 10 -0.002537 -0.000000 + 1 1 -1 7 10 -0.010651 0.000000 + 1 1 -1 8 10 -0.004731 0.000000 + 1 1 -1 9 10 0.000487 0.000000 + 1 1 -1 10 10 -0.005524 0.000000 + 1 1 -1 11 10 -0.005064 -0.000000 + 1 1 -1 12 10 0.000745 -0.000000 + 1 1 -1 1 11 0.005262 0.000000 + 1 1 -1 2 11 0.001463 -0.000000 + 1 1 -1 3 11 -0.004782 0.000000 + 1 1 -1 4 11 0.000572 -0.000000 + 1 1 -1 5 11 -0.001131 0.000000 + 1 1 -1 6 11 -0.000060 -0.000000 + 1 1 -1 7 11 -0.003540 0.000000 + 1 1 -1 8 11 0.011154 0.000000 + 1 1 -1 9 11 0.003444 0.000000 + 1 1 -1 10 11 -0.005064 0.000000 + 1 1 -1 11 11 -0.004024 0.000000 + 1 1 -1 12 11 0.001761 -0.000000 + 1 1 -1 1 12 0.004782 -0.000000 + 1 1 -1 2 12 -0.000263 -0.000000 + 1 1 -1 3 12 -0.004078 0.000000 + 1 1 -1 4 12 -0.000746 -0.000000 + 1 1 -1 5 12 0.000561 0.000000 + 1 1 -1 6 12 0.002086 0.000000 + 1 1 -1 7 12 -0.000453 0.000000 + 1 1 -1 8 12 -0.004392 0.000000 + 1 1 -1 9 12 -0.000782 0.000000 + 1 1 -1 10 12 0.000745 0.000000 + 1 1 -1 11 12 0.001761 -0.000000 + 1 1 -1 12 12 -0.001184 -0.000000 + 1 1 0 1 1 -0.006750 0.000000 + 1 1 0 2 1 -0.003264 0.000000 + 1 1 0 3 1 -0.003360 0.000000 + 1 1 0 4 1 0.001100 -0.000000 + 1 1 0 5 1 0.003927 0.000000 + 1 1 0 6 1 0.001020 0.000000 + 1 1 0 7 1 -0.009884 0.000000 + 1 1 0 8 1 -0.008855 0.000000 + 1 1 0 9 1 0.016241 0.000000 + 1 1 0 10 1 0.053346 0.000000 + 1 1 0 11 1 0.020930 -0.000000 + 1 1 0 12 1 -0.003970 0.000000 + 1 1 0 1 2 -0.003264 0.000000 + 1 1 0 2 2 0.003393 0.000000 + 1 1 0 3 2 -0.003295 -0.000000 + 1 1 0 4 2 -0.001519 0.000000 + 1 1 0 5 2 0.001100 0.000000 + 1 1 0 6 2 0.000143 0.000000 + 1 1 0 7 2 0.001885 0.000000 + 1 1 0 8 2 -0.001053 -0.000000 + 1 1 0 9 2 -0.012679 0.000000 + 1 1 0 10 2 -0.023372 -0.000000 + 1 1 0 11 2 -0.021525 0.000000 + 1 1 0 12 2 -0.008426 -0.000000 + 1 1 0 1 3 -0.003360 0.000000 + 1 1 0 2 3 -0.003295 0.000000 + 1 1 0 3 3 0.000512 -0.000000 + 1 1 0 4 3 0.000143 -0.000000 + 1 1 0 5 3 0.001020 -0.000000 + 1 1 0 6 3 0.000617 -0.000000 + 1 1 0 7 3 -0.003898 0.000000 + 1 1 0 8 3 -0.005382 0.000000 + 1 1 0 9 3 -0.006667 -0.000000 + 1 1 0 10 3 0.001648 0.000000 + 1 1 0 11 3 -0.002735 0.000000 + 1 1 0 12 3 0.001823 -0.000000 + 1 1 0 1 4 -0.010651 0.000000 + 1 1 0 2 4 -0.004731 0.000000 + 1 1 0 3 4 -0.000487 0.000000 + 1 1 0 4 4 0.003393 -0.000000 + 1 1 0 5 4 -0.003264 -0.000000 + 1 1 0 6 4 -0.003295 0.000000 + 1 1 0 7 4 -0.002409 -0.000000 + 1 1 0 8 4 -0.003521 -0.000000 + 1 1 0 9 4 -0.003296 -0.000000 + 1 1 0 10 4 -0.223461 -0.000000 + 1 1 0 11 4 0.021015 -0.000000 + 1 1 0 12 4 0.045911 -0.000000 + 1 1 0 1 5 -0.003540 0.000000 + 1 1 0 2 5 0.011154 0.000000 + 1 1 0 3 5 -0.003444 0.000000 + 1 1 0 4 5 -0.003264 -0.000000 + 1 1 0 5 5 -0.006750 0.000000 + 1 1 0 6 5 -0.003360 0.000000 + 1 1 0 7 5 -0.000864 -0.000000 + 1 1 0 8 5 -0.002409 -0.000000 + 1 1 0 9 5 -0.000583 -0.000000 + 1 1 0 10 5 0.021015 0.000000 + 1 1 0 11 5 -0.177076 0.000000 + 1 1 0 12 5 0.019597 -0.000000 + 1 1 0 1 6 0.000453 -0.000000 + 1 1 0 2 6 0.004392 -0.000000 + 1 1 0 3 6 -0.000782 -0.000000 + 1 1 0 4 6 -0.003295 -0.000000 + 1 1 0 5 6 -0.003360 -0.000000 + 1 1 0 6 6 0.000512 0.000000 + 1 1 0 7 6 0.000583 -0.000000 + 1 1 0 8 6 0.003296 0.000000 + 1 1 0 9 6 -0.002678 0.000000 + 1 1 0 10 6 -0.045911 -0.000000 + 1 1 0 11 6 -0.019597 -0.000000 + 1 1 0 12 6 -0.039538 -0.000000 + 1 1 0 1 7 -0.177076 -0.000000 + 1 1 0 2 7 0.021015 0.000000 + 1 1 0 3 7 -0.019597 -0.000000 + 1 1 0 4 7 0.053346 0.000000 + 1 1 0 5 7 0.020930 0.000000 + 1 1 0 6 7 0.003970 -0.000000 + 1 1 0 7 7 -0.006750 -0.000000 + 1 1 0 8 7 -0.003264 -0.000000 + 1 1 0 9 7 0.003360 -0.000000 + 1 1 0 10 7 -0.010651 -0.000000 + 1 1 0 11 7 -0.003540 -0.000000 + 1 1 0 12 7 -0.000453 -0.000000 + 1 1 0 1 8 0.021015 0.000000 + 1 1 0 2 8 -0.223461 0.000000 + 1 1 0 3 8 -0.045911 0.000000 + 1 1 0 4 8 -0.023372 -0.000000 + 1 1 0 5 8 -0.021525 -0.000000 + 1 1 0 6 8 0.008426 -0.000000 + 1 1 0 7 8 -0.003264 -0.000000 + 1 1 0 8 8 0.003393 -0.000000 + 1 1 0 9 8 0.003295 0.000000 + 1 1 0 10 8 -0.004731 -0.000000 + 1 1 0 11 8 0.011154 -0.000000 + 1 1 0 12 8 -0.004392 -0.000000 + 1 1 0 1 9 0.019597 0.000000 + 1 1 0 2 9 0.045911 -0.000000 + 1 1 0 3 9 -0.039538 0.000000 + 1 1 0 4 9 -0.001648 -0.000000 + 1 1 0 5 9 0.002735 -0.000000 + 1 1 0 6 9 0.001823 0.000000 + 1 1 0 7 9 0.003360 0.000000 + 1 1 0 8 9 0.003295 -0.000000 + 1 1 0 9 9 0.000512 0.000000 + 1 1 0 10 9 0.000487 -0.000000 + 1 1 0 11 9 0.003444 -0.000000 + 1 1 0 12 9 -0.000782 -0.000000 + 1 1 0 1 10 -0.002409 0.000000 + 1 1 0 2 10 -0.003521 0.000000 + 1 1 0 3 10 0.003296 0.000000 + 1 1 0 4 10 -0.001053 0.000000 + 1 1 0 5 10 0.001885 -0.000000 + 1 1 0 6 10 0.012679 -0.000000 + 1 1 0 7 10 0.011154 -0.000000 + 1 1 0 8 10 -0.004731 0.000000 + 1 1 0 9 10 -0.004392 -0.000000 + 1 1 0 10 10 0.003393 0.000000 + 1 1 0 11 10 -0.003264 -0.000000 + 1 1 0 12 10 0.003295 -0.000000 + 1 1 0 1 11 -0.000864 0.000000 + 1 1 0 2 11 -0.002409 -0.000000 + 1 1 0 3 11 0.000583 0.000000 + 1 1 0 4 11 -0.008855 -0.000000 + 1 1 0 5 11 -0.009884 -0.000000 + 1 1 0 6 11 -0.016241 -0.000000 + 1 1 0 7 11 -0.003540 0.000000 + 1 1 0 8 11 -0.010651 -0.000000 + 1 1 0 9 11 -0.000453 -0.000000 + 1 1 0 10 11 -0.003264 0.000000 + 1 1 0 11 11 -0.006750 0.000000 + 1 1 0 12 11 0.003360 -0.000000 + 1 1 0 1 12 -0.000583 0.000000 + 1 1 0 2 12 -0.003296 -0.000000 + 1 1 0 3 12 -0.002678 0.000000 + 1 1 0 4 12 0.005382 -0.000000 + 1 1 0 5 12 0.003898 -0.000000 + 1 1 0 6 12 -0.006667 0.000000 + 1 1 0 7 12 0.003444 0.000000 + 1 1 0 8 12 0.000487 0.000000 + 1 1 0 9 12 -0.000782 -0.000000 + 1 1 0 10 12 0.003295 0.000000 + 1 1 0 11 12 0.003360 0.000000 + 1 1 0 12 12 0.000512 -0.000000 + 1 1 1 1 1 -0.004024 0.000000 + 1 1 1 2 1 -0.005064 -0.000000 + 1 1 1 3 1 -0.001761 0.000000 + 1 1 1 4 1 0.001100 -0.000000 + 1 1 1 5 1 0.003927 -0.000000 + 1 1 1 6 1 0.001020 0.000000 + 1 1 1 7 1 -0.001131 0.000000 + 1 1 1 8 1 0.000572 -0.000000 + 1 1 1 9 1 0.000060 0.000000 + 1 1 1 10 1 -0.018379 0.000000 + 1 1 1 11 1 0.036873 -0.000000 + 1 1 1 12 1 0.012364 0.000000 + 1 1 1 1 2 -0.005064 -0.000000 + 1 1 1 2 2 -0.005524 0.000000 + 1 1 1 3 2 -0.000745 0.000000 + 1 1 1 4 2 -0.001519 0.000000 + 1 1 1 5 2 0.001100 0.000000 + 1 1 1 6 2 0.000143 0.000000 + 1 1 1 7 2 0.000633 0.000000 + 1 1 1 8 2 -0.000480 0.000000 + 1 1 1 9 2 0.002537 -0.000000 + 1 1 1 10 2 -0.023064 0.000000 + 1 1 1 11 2 0.042521 -0.000000 + 1 1 1 12 2 -0.003338 0.000000 + 1 1 1 1 3 -0.001761 -0.000000 + 1 1 1 2 3 -0.000745 -0.000000 + 1 1 1 3 3 -0.001184 0.000000 + 1 1 1 4 3 0.000143 -0.000000 + 1 1 1 5 3 0.001020 -0.000000 + 1 1 1 6 3 0.000617 -0.000000 + 1 1 1 7 3 -0.000561 0.000000 + 1 1 1 8 3 0.000746 0.000000 + 1 1 1 9 3 0.002086 0.000000 + 1 1 1 10 3 -0.002867 0.000000 + 1 1 1 11 3 0.001922 0.000000 + 1 1 1 12 3 0.001533 0.000000 + 1 1 1 1 4 -0.000117 -0.000000 + 1 1 1 2 4 -0.002085 -0.000000 + 1 1 1 3 4 -0.000794 0.000000 + 1 1 1 4 4 -0.002725 -0.000000 + 1 1 1 5 4 0.003360 0.000000 + 1 1 1 6 4 0.002175 0.000000 + 1 1 1 7 4 0.001052 0.000000 + 1 1 1 8 4 -0.000692 -0.000000 + 1 1 1 9 4 0.000790 0.000000 + 1 1 1 10 4 -0.008805 -0.000000 + 1 1 1 11 4 0.001251 0.000000 + 1 1 1 12 4 0.003121 0.000000 + 1 1 1 1 5 0.001789 -0.000000 + 1 1 1 2 5 -0.000117 -0.000000 + 1 1 1 3 5 0.001063 -0.000000 + 1 1 1 4 5 0.003360 0.000000 + 1 1 1 5 5 -0.006576 -0.000000 + 1 1 1 6 5 0.000661 0.000000 + 1 1 1 7 5 0.004249 -0.000000 + 1 1 1 8 5 0.001052 -0.000000 + 1 1 1 9 5 0.001055 0.000000 + 1 1 1 10 5 0.004941 -0.000000 + 1 1 1 11 5 0.000182 -0.000000 + 1 1 1 12 5 0.014966 0.000000 + 1 1 1 1 6 0.001063 -0.000000 + 1 1 1 2 6 -0.000794 0.000000 + 1 1 1 3 6 0.000522 -0.000000 + 1 1 1 4 6 0.002175 -0.000000 + 1 1 1 5 6 0.000661 -0.000000 + 1 1 1 6 6 -0.001782 -0.000000 + 1 1 1 7 6 -0.001055 -0.000000 + 1 1 1 8 6 -0.000790 -0.000000 + 1 1 1 9 6 0.001687 0.000000 + 1 1 1 10 6 0.001717 0.000000 + 1 1 1 11 6 -0.000792 0.000000 + 1 1 1 12 6 -0.004089 -0.000000 + 1 1 1 1 7 0.000182 -0.000000 + 1 1 1 2 7 0.001251 0.000000 + 1 1 1 3 7 -0.000792 -0.000000 + 1 1 1 4 7 -0.018379 -0.000000 + 1 1 1 5 7 0.036873 -0.000000 + 1 1 1 6 7 -0.012364 -0.000000 + 1 1 1 7 7 -0.004024 0.000000 + 1 1 1 8 7 -0.005064 -0.000000 + 1 1 1 9 7 0.001761 -0.000000 + 1 1 1 10 7 0.011154 0.000000 + 1 1 1 11 7 -0.003540 -0.000000 + 1 1 1 12 7 0.003444 -0.000000 + 1 1 1 1 8 0.004941 -0.000000 + 1 1 1 2 8 -0.008805 0.000000 + 1 1 1 3 8 0.001717 -0.000000 + 1 1 1 4 8 -0.023064 0.000000 + 1 1 1 5 8 0.042521 -0.000000 + 1 1 1 6 8 0.003338 -0.000000 + 1 1 1 7 8 -0.005064 -0.000000 + 1 1 1 8 8 -0.005524 0.000000 + 1 1 1 9 8 0.000745 -0.000000 + 1 1 1 10 8 -0.004731 -0.000000 + 1 1 1 11 8 -0.010651 0.000000 + 1 1 1 12 8 0.000487 -0.000000 + 1 1 1 1 9 0.014966 -0.000000 + 1 1 1 2 9 0.003121 -0.000000 + 1 1 1 3 9 -0.004089 0.000000 + 1 1 1 4 9 0.002867 -0.000000 + 1 1 1 5 9 -0.001922 -0.000000 + 1 1 1 6 9 0.001533 0.000000 + 1 1 1 7 9 0.001761 0.000000 + 1 1 1 8 9 0.000745 0.000000 + 1 1 1 9 9 -0.001184 0.000000 + 1 1 1 10 9 -0.004392 0.000000 + 1 1 1 11 9 -0.000453 0.000000 + 1 1 1 12 9 -0.000782 0.000000 + 1 1 1 1 10 0.001052 -0.000000 + 1 1 1 2 10 -0.000692 0.000000 + 1 1 1 3 10 -0.000790 -0.000000 + 1 1 1 4 10 -0.004057 0.000000 + 1 1 1 5 10 -0.003898 -0.000000 + 1 1 1 6 10 0.005418 0.000000 + 1 1 1 7 10 -0.000117 -0.000000 + 1 1 1 8 10 -0.002085 0.000000 + 1 1 1 9 10 0.000794 -0.000000 + 1 1 1 10 10 -0.002725 -0.000000 + 1 1 1 11 10 0.003360 0.000000 + 1 1 1 12 10 -0.002175 -0.000000 + 1 1 1 1 11 0.004249 -0.000000 + 1 1 1 2 11 0.001052 0.000000 + 1 1 1 3 11 -0.001055 0.000000 + 1 1 1 4 11 -0.000661 0.000000 + 1 1 1 5 11 0.000656 0.000000 + 1 1 1 6 11 0.005132 -0.000000 + 1 1 1 7 11 0.001789 -0.000000 + 1 1 1 8 11 -0.000117 -0.000000 + 1 1 1 9 11 -0.001063 0.000000 + 1 1 1 10 11 0.003360 -0.000000 + 1 1 1 11 11 -0.006576 -0.000000 + 1 1 1 12 11 -0.000661 -0.000000 + 1 1 1 1 12 0.001055 0.000000 + 1 1 1 2 12 0.000790 -0.000000 + 1 1 1 3 12 0.001687 0.000000 + 1 1 1 4 12 -0.002825 -0.000000 + 1 1 1 5 12 -0.002035 0.000000 + 1 1 1 6 12 0.003373 0.000000 + 1 1 1 7 12 -0.001063 0.000000 + 1 1 1 8 12 0.000794 -0.000000 + 1 1 1 9 12 0.000522 0.000000 + 1 1 1 10 12 -0.002175 0.000000 + 1 1 1 11 12 -0.000661 0.000000 + 1 1 1 12 12 -0.001782 -0.000000 diff --git a/test/python/analyse_block_structure_from_gf.py b/test/python/analyse_block_structure_from_gf.py index d71d17b6..328425c4 100644 --- a/test/python/analyse_block_structure_from_gf.py +++ b/test/python/analyse_block_structure_from_gf.py @@ -26,7 +26,6 @@ G = SK.extract_G_loc() # the original block structure block_structure1 = SK.block_structure.copy() - G_new = SK.analyse_block_structure_from_gf(G) # the new block structure @@ -163,9 +162,9 @@ for conjugate in conjugate_values: G_new = SK.analyse_block_structure_from_gf(G, 1.e-7) # transform G_noisy etc. to the new block structure - G_noisy = SK.block_structure.convert_gf(G_noisy, block_structure1, beta = G_noisy.mesh.beta) - G_pre_transform = SK.block_structure.convert_gf(G_pre_transform, block_structure1, beta = G_noisy.mesh.beta) - G_noisy_pre_transform = SK.block_structure.convert_gf(G_noisy_pre_transform, block_structure1, beta = G_noisy.mesh.beta) + G_noisy = SK.block_structure.convert_gf(G_noisy, block_structure1, beta = G_noisy.mesh.beta, space_from='sumk') + G_pre_transform = SK.block_structure.convert_gf(G_pre_transform, block_structure1, beta = G_noisy.mesh.beta, space_from='sumk') + G_noisy_pre_transform = SK.block_structure.convert_gf(G_noisy_pre_transform, block_structure1, beta = G_noisy.mesh.beta, space_from='sumk') assert len(SK.deg_shells[0]) == 2, "wrong number of equivalent groups found" assert sorted([len(d) for d in SK.deg_shells[0]]) == [2,3], "wrong number of members in the equivalent groups found" diff --git a/test/python/analyse_block_structure_from_gf.ref.h5 b/test/python/analyse_block_structure_from_gf.ref.h5 index 7acea34d..e0468605 100644 Binary files a/test/python/analyse_block_structure_from_gf.ref.h5 and b/test/python/analyse_block_structure_from_gf.ref.h5 differ diff --git a/test/python/basis_transformation.py b/test/python/basis_transformation.py new file mode 100644 index 00000000..3821dd00 --- /dev/null +++ b/test/python/basis_transformation.py @@ -0,0 +1,99 @@ +from triqs.utility.comparison_tests import * +from triqs_dft_tools.sumk_dft import * +import numpy as np + +def is_diagonal_matrix(M): + return abs(np.sum(M-np.diag(np.diagonal(M)))) < 1e-10 + +def call_diagonalize(SK): + SK.block_structure.transformation = None + t_sumk_eal = SK.calculate_diagonalization_matrix(prop_to_be_diagonal='eal', calc_in_solver_blocks=False, write_to_blockstructure = True) + SK.block_structure.transformation = None + t_solver_eal = SK.calculate_diagonalization_matrix(prop_to_be_diagonal='eal', calc_in_solver_blocks=True, write_to_blockstructure = True) + SK.block_structure.transformation = None + t_solver_dm = SK.calculate_diagonalization_matrix(prop_to_be_diagonal='dm', calc_in_solver_blocks=False, write_to_blockstructure = True) + SK.block_structure.transformation = None + t_sumk_dm = SK.calculate_diagonalization_matrix(prop_to_be_diagonal='dm', calc_in_solver_blocks=True, write_to_blockstructure = True) + SK.block_structure.transformation = None + return t_sumk_eal, t_solver_eal, t_sumk_dm, t_solver_dm + +SK = SumkDFT(hdf_file = 'SrVO3.h5', use_dft_blocks=True) + +# only eal and dm are allowed +SK.block_structure.transformation = None +assert not SK.calculate_diagonalization_matrix(prop_to_be_diagonal='test') + +# check for shell index +assert not SK.calculate_diagonalization_matrix(shells = [15]) + +# calling the function twice leads to block_structure.transformation already being set +SK.calculate_diagonalization_matrix() +assert not SK.calculate_diagonalization_matrix() +SK.block_structure.transformation = None + +# Check writing to block_structure +SK.calculate_diagonalization_matrix(write_to_blockstructure=False) +assert SK.block_structure.transformation is None +SK.block_structure.transformation = None +SK.calculate_diagonalization_matrix(write_to_blockstructure=True) +assert SK.block_structure.transformation is not None +SK.block_structure.transformation = None + +t_sumk_eal, t_solver_eal, t_sumk_dm, t_solver_dm = call_diagonalize(SK) + +# All matrices should be identities +for orb in range(SK.n_corr_shells): + for block in t_solver_eal[orb]: + assert_arrays_are_close(t_sumk_eal[orb][block],np.identity(3), precision=1e-6) + assert_arrays_are_close(t_sumk_dm[orb][block],np.identity(3), precision=1e-6) + assert_arrays_are_close(t_solver_eal[orb][block],np.identity(3), precision=1e-6) + assert_arrays_are_close(t_solver_dm[orb][block],np.identity(3), precision=1e-6) + +SK = SumkDFT(hdf_file = 'w90_convert.ref.h5', use_dft_blocks=True) + +t_sumk_eal, t_solver_eal, t_sumk_dm, t_solver_dm = call_diagonalize(SK) + +# In this example solver and sumk should be the same +for orb in range(SK.n_corr_shells): + for block in t_solver_eal[orb]: + assert_arrays_are_close(t_sumk_eal[orb][block],t_solver_eal[orb][block], precision=1e-6) + assert_arrays_are_close(t_sumk_dm[orb][block],t_solver_dm[orb][block], precision=1e-6) + +# Check if transformations make eal and dm really diagonal +eal = SK.eff_atomic_levels()[0] +for e in eal: + assert is_diagonal_matrix(np.dot(np.dot(t_solver_eal[0][e], eal[e].conj().T),t_solver_eal[0][e].conj().T)) + +dm = SK.density_matrix(method='using_point_integration') +for dmi in dm: + for e in dmi: + assert is_diagonal_matrix(np.dot(np.dot(t_solver_dm[0][e], dmi[e].conj().T),t_solver_dm[0][e].conj().T)) + + +# Test convert_operator +SK = SumkDFT(hdf_file = 'SrVO3.h5', use_dft_blocks=True) +BS = SK.block_structure +from triqs.operators.util import h_int_slater, U_matrix, t2g_submatrix, transform_U_matrix + + +U3x3 = t2g_submatrix(U_matrix(2, U_int=2, J_hund=0.2, basis='spheric')) + +BS.transformation = [{'up':np.eye(3), 'down': np.eye(3)}] +H0 = h_int_slater(spin_names=['up','down'], orb_names=range(3), U_matrix=U3x3, off_diag=False) +H1 = h_int_slater(spin_names=['up','down'], orb_names=range(3), U_matrix=U3x3, off_diag=True) +assert( H0 == BS.convert_operator(H1) ) + +# Trafo Matrix switching index 1 & 2 +BS.transformation = [{'up':np.array([[1,0,0],[0,0,1],[0,1,0]]), 'down': np.array([[1,0,0],[0,0,1],[0,1,0]])}] +H2 = BS.convert_operator(h_int_slater(spin_names=['up','down'], orb_names=[0,2,1], U_matrix=U3x3, off_diag=True)) +assert( H0 == H2 ) + +BS.transformation = [{'up':np.array([[1,0,0],[0,1/np.sqrt(2),1/np.sqrt(2)],[0,1/np.sqrt(2),-1/np.sqrt(2)]]), 'down': np.array([[1,0,0],[0,1/np.sqrt(2),1/np.sqrt(2)],[0,1/np.sqrt(2),-1/np.sqrt(2)]])}] +H3 = BS.convert_operator(h_int_slater(spin_names=['up','down'], orb_names=[0,1,2], U_matrix=U3x3, off_diag=True)) +for op in H3: + for c_op in op[0]: + assert(BS.gf_struct_solver_dict[0][c_op[1][0]][c_op[1][1]] is not None) # This crashes with a key error if the operator structure is not the solver structure + +U_trafod = transform_U_matrix(U3x3, BS.transformation[0]['up'].conjugate()) # The notorious .conjugate() +H4 = h_int_slater(spin_names=['up','down'], orb_names=range(3), U_matrix=U_trafod, map_operator_structure=BS.sumk_to_solver[0]) +assert( H4 == H3 ) # check that convert_operator does the same as transform_U_matrix diff --git a/test/python/blockstructure.in.h5 b/test/python/blockstructure.in.h5 index 6e1bb469..f4d2cada 100644 Binary files a/test/python/blockstructure.in.h5 and b/test/python/blockstructure.in.h5 differ diff --git a/test/python/blockstructure.py b/test/python/blockstructure.py index 7ea45c82..34f2a808 100644 --- a/test/python/blockstructure.py +++ b/test/python/blockstructure.py @@ -1,68 +1,223 @@ from triqs_dft_tools.sumk_dft import * -from triqs.utility.h5diff import h5diff +from triqs.utility.h5diff import h5diff, compare, failures from triqs.gf import * from triqs.utility.comparison_tests import assert_block_gfs_are_close +from scipy.linalg import expm from triqs_dft_tools.block_structure import BlockStructure +import numpy as np -SK = SumkDFT('blockstructure.in.h5',use_dft_blocks=True) + +def cmp(a, b, precision=1.e-15): + compare('', a, b, 0, precision) + if failures: + raise AssertionError('\n'.join(failures)) + +SK = SumkDFT('blockstructure.in.h5', use_dft_blocks=True) original_bs = SK.block_structure +cmp(original_bs.effective_transformation_sumk, + [{'up': np.array([[1., 0., 0.], + [0., 1., 0.], + [0., 0., 1.]]), + 'down': np.array([[1., 0., 0.], + [0., 1., 0.], + [0., 0., 1.]])}]) +cmp(original_bs.effective_transformation_solver, + [{'up_0': np.array([[1., 0., 0.], + [0., 1., 0.]]), + 'up_1': np.array([[0., 0., 1.]]), + 'down_0': np.array([[1., 0., 0.], + [0., 1., 0.]]), + 'down_1': np.array([[0., 0., 1.]])}]) + +created_matrix = original_bs.create_matrix() +cmp(created_matrix, + {'up_0': np.array([[0. + 0.j, 0. + 0.j], + [0. + 0.j, 0. + 0.j]]), + 'up_1': np.array([[0. + 0.j]]), + 'down_0': np.array([[0. + 0.j, 0. + 0.j], + [0. + 0.j, 0. + 0.j]]), + 'down_1': np.array([[0. + 0.j]])}) + # check pick_gf_struct_solver pick1 = original_bs.copy() pick1.pick_gf_struct_solver([{'up_0': [1], 'up_1': [0], 'down_1': [0]}]) +cmp(pick1.effective_transformation_sumk, + [{'up': np.array([[0., 0., 0.], + [0., 1., 0.], + [0., 0., 1.]]), + 'down': np.array([[0., 0., 0.], + [0., 0., 0.], + [0., 0., 1.]])}]) + +cmp(pick1.effective_transformation_solver, + [{'up_0': np.array([[0., 1., 0.]]), + 'up_1': np.array([[0., 0., 1.]]), + 'down_1': np.array([[0., 0., 1.]])}]) + # check loading a block_structure from file -SK.block_structure = SK.load(['block_structure'],'mod')[0] +SK.block_structure = SK.load(['block_structure'], 'mod')[0] assert SK.block_structure == pick1, 'loading SK block structure from file failed' # check SumkDFT backward compatibility -sk_pick1 = BlockStructure(gf_struct_sumk = SK.gf_struct_sumk, - gf_struct_solver = SK.gf_struct_solver, - solver_to_sumk = SK.solver_to_sumk, - sumk_to_solver = SK.sumk_to_solver, - solver_to_sumk_block = SK.solver_to_sumk_block, - deg_shells = SK.deg_shells) +sk_pick1 = BlockStructure(gf_struct_sumk=SK.gf_struct_sumk, + gf_struct_solver=SK.gf_struct_solver, + solver_to_sumk=SK.solver_to_sumk, + sumk_to_solver=SK.sumk_to_solver, + solver_to_sumk_block=SK.solver_to_sumk_block, + deg_shells=SK.deg_shells, + corr_to_inequiv=SK.corr_to_inequiv) assert sk_pick1 == pick1, 'constructing block structure from SumkDFT properties failed' +cmp(pick1.effective_transformation_sumk, + [{'up': np.array([[0., 0., 0.], + [0., 1., 0.], + [0., 0., 1.]]), + 'down': np.array([[0., 0., 0.], + [0., 0., 0.], + [0., 0., 1.]])}]) + +cmp(pick1.effective_transformation_solver, + [{'up_0': np.array([[0., 1., 0.]]), + 'up_1': np.array([[0., 0., 1.]]), + 'down_1': np.array([[0., 0., 1.]])}]) + # check pick_gf_struct_sumk pick2 = original_bs.copy() -pick2.pick_gf_struct_sumk([{'up': [1, 2], 'down': [0,1]}]) +pick2.pick_gf_struct_sumk([{'up': [1, 2], 'down': [0, 1]}]) + +cmp(pick2.effective_transformation_sumk, + [{'up': np.array([[0., 0., 0.], + [0., 1., 0.], + [0., 0., 1.]]), + 'down': np.array([[1., 0., 0.], + [0., 1., 0.], + [0., 0., 0.]])}]) + +cmp(pick2.effective_transformation_solver, + [{'up_0': np.array([[0., 1., 0.]]), + 'up_1': np.array([[0., 0., 1.]]), + 'down_0': np.array([[1., 0., 0.], + [0., 1., 0.]])}]) + +pick3 = pick2.copy() +pick3.transformation = [np.reshape(range(9), (3, 3))] +cmp(pick3.effective_transformation_sumk, + [{'up': np.array([[0, 0, 0], + [3, 4, 5], + [6, 7, 8]]), + 'down': np.array([[0, 1, 2], + [3, 4, 5], + [0, 0, 0]])}]) + +cmp(pick3.effective_transformation_solver, + [{'up_0': np.array([[3, 4, 5]]), + 'up_1': np.array([[6, 7, 8]]), + 'down_0': np.array([[0, 1, 2], + [3, 4, 5]])}]) + +pick4 = original_bs.copy() +pick4.transformation = [np.array([[0, 1, 0], [1, 0, 0], [0, 0, 1]])] +pick4.pick_gf_struct_sumk([{'up': [1, 2], 'down': [0, 1]}]) +cmp(pick2.gf_struct_sumk, pick4.gf_struct_sumk) +cmp(pick2.gf_struct_solver, pick4.gf_struct_solver) +assert pick4.sumk_to_solver == [{('up', 0): ('up_0', 0), + ('up', 1): (None, None), + ('up', 2): ('up_1', 0), + ('down', 2): (None, None), + ('down', 1): ('down_0', 1), + ('down', 0): ('down_0', 0)}] +assert pick4.solver_to_sumk == [{('up_1', 0): ('up', 2), + ('up_0', 0): ('up', 0), + ('down_0', 0): ('down', 0), + ('down_0', 1): ('down', 1)}] # check map_gf_struct_solver -mapping = [{ ('down_0', 0):('down', 0), - ('down_0', 1):('down', 2), - ('down_1', 0):('down', 1), - ('up_0', 0) :('down_1', 0), - ('up_0', 1) :('up_0', 0) }] +mapping = [{('down_0', 0): ('down', 0), + ('down_0', 1): ('down', 2), + ('down_1', 0): ('down', 1), + ('up_0', 0): ('down_1', 0), + ('up_0', 1): ('up_0', 0)}] map1 = original_bs.copy() map1.map_gf_struct_solver(mapping) # check create_gf -G1 = original_bs.create_gf(beta=40,n_points=3) -i = 1 -for block,gf in G1: - gf << SemiCircular(i) - i+=1 +G1 = original_bs.create_gf(beta=40, n_points=3) +widths = dict(up_0=1, up_1=2, down_0=4, down_1=3) +for block, gf in G1: + gf << SemiCircular(widths[block]) +original_bs.check_gf(G1) +original_bs.check_gf([G1]) # check approximate_as_diagonal offd = original_bs.copy() offd.approximate_as_diagonal() # check map_gf_struct_solver -G2 = map1.convert_gf(G1,original_bs,beta=40,n_points=3,show_warnings=False) +import warnings +with warnings.catch_warnings(record=True) as w: + G2 = map1.convert_gf(G1, original_bs, beta=40, n_points=3, + show_warnings=True) + assert len(w) == 1 + assert issubclass(w[-1].category, UserWarning) + assert "Block up_1 maximum difference" in str(w[-1].message) + +m2 = map1.convert_matrix(created_matrix, original_bs, show_warnings=True) +cmp(m2, + {'down': np.array([[0. + 0.j, 0. + 0.j, 0. + 0.j], + [0. + 0.j, 0. + 0.j, 0. + 0.j], + [0. + 0.j, 0. + 0.j, 0. + 0.j]]), + 'down_1': np.array([[0. + 0.j]]), + 'up_0': np.array([[0. + 0.j]])}) # check full_structure -full = BlockStructure.full_structure([{'up_0': [0, 1], 'up_1': [0], 'down_1': [0], 'down_0': [0, 1]}],None) +full = BlockStructure.full_structure( + [{'up_0': [0, 1], 'up_1': [0], 'down_1': [0], 'down_0': [0, 1]}], None) + +G_sumk = BlockGf(mesh=G1.mesh, gf_struct=original_bs.gf_struct_sumk[0]) +for i in range(3): + G_sumk['up'][i, i] << SemiCircular(1 if i < 2 else 2) + G_sumk['down'][i, i] << SemiCircular(4 if i < 2 else 3) +G3 = original_bs.convert_gf(G_sumk, + None, + space_from='sumk', + beta=40, + n_points=3) +assert_block_gfs_are_close(G1, G3) + +# check convert_gf with transformation +# np.random.seed(894892309) +H = np.random.rand(3, 3) + 1.0j * np.random.rand(3, 3) +H = H + H.conjugate().transpose() +T = expm(1.0j * H) +G_T = G_sumk.copy() +for block, gf in G_T: + gf.from_L_G_R(T.conjugate().transpose(), gf, T) +transformed_bs = original_bs.copy() +transformed_bs.transformation = [T] +G_bT = transformed_bs.convert_gf(G_T, None, space_from='sumk', + beta=40, n_points=3) +assert_block_gfs_are_close(G1, G_bT) + +assert original_bs.gf_struct_sumk_list ==\ + [[('up', [0, 1, 2]), ('down', [0, 1, 2])]] +assert original_bs.gf_struct_solver_dict ==\ + [{'up_0': [0, 1], 'up_1': [0], 'down_1': [0], 'down_0': [0, 1]}] +assert original_bs.gf_struct_sumk_dict ==\ + [{'down': [0, 1, 2], 'up': [0, 1, 2]}] +assert original_bs.gf_struct_solver_list ==\ + [[('down_0', [0, 1]), ('down_1', [0]), ('up_0', [0, 1]), ('up_1', [0])]] # check __eq__ -assert full==full, 'equality not correct (equal structures not equal)' -assert pick1==pick1, 'equality not correct (equal structures not equal)' -assert pick1!=pick2, 'equality not correct (different structures not different)' -assert original_bs!=offd, 'equality not correct (different structures not different)' +assert full == full, 'equality not correct (equal structures not equal)' +assert pick1 == pick1, 'equality not correct (equal structures not equal)' +assert pick1 != pick2, 'equality not correct (different structures not different)' +assert original_bs != offd, 'equality not correct (different structures not different)' if mpi.is_master_node(): - with HDFArchive('blockstructure.out.h5','w') as ar: + with HDFArchive('blockstructure.out.h5', 'w') as ar: ar['original_bs'] = original_bs ar['pick1'] = pick1 ar['pick2'] = pick2 @@ -75,10 +230,11 @@ if mpi.is_master_node(): # cannot use h5diff because BlockStructure testing is not implemented # there (and seems difficult to implement because it would mix triqs # and dft_tools) - with HDFArchive('blockstructure.out.h5','r') as ar,\ - HDFArchive('blockstructure.ref.h5','r') as ar2: - for k in ar2: - if isinstance(ar[k],BlockGf): - assert_block_gfs_are_close(ar[k],ar2[k],1.e-6) - else: - assert ar[k]==ar2[k], '{} not equal'.format(k) + with HDFArchive('blockstructure.out.h5', 'r') as ar,\ + HDFArchive('blockstructure.ref.h5', 'r') as ar2: + for k in ar2: + print(k) + if isinstance(ar[k], BlockGf): + assert_block_gfs_are_close(ar[k], ar2[k], 1.e-6) + else: + assert ar[k] == ar2[k], '{} not equal'.format(k) diff --git a/test/python/blockstructure.ref.h5 b/test/python/blockstructure.ref.h5 index 49b34d93..b0df2c0e 100644 Binary files a/test/python/blockstructure.ref.h5 and b/test/python/blockstructure.ref.h5 differ diff --git a/test/python/srvo3_Gloc.py b/test/python/srvo3_Gloc.py index 8daa5fed..1062ec9e 100644 --- a/test/python/srvo3_Gloc.py +++ b/test/python/srvo3_Gloc.py @@ -41,7 +41,6 @@ orb_hybridized = False gf_struct = set_operator_structure(spin_names,orb_names,orb_hybridized) glist = [ GfImFreq(indices=inner,beta=beta) for block,inner in gf_struct] -print(gf_struct) Sigma_iw = BlockGf(name_list = [block for block,inner in gf_struct], block_list = glist, make_copies = False) SK.set_Sigma([Sigma_iw]) diff --git a/test/python/test_w90_ef.py b/test/python/test_w90_ef.py new file mode 100644 index 00000000..7a490992 --- /dev/null +++ b/test/python/test_w90_ef.py @@ -0,0 +1,25 @@ +import unittest +import numpy as np +import sys +sys.path.insert(1, '../python/converters/') +from triqs_dft_tools.converters.wannier90_converter import Wannier90Converter +from triqs_dft_tools import SumkDFT + +class test_w90_conv(unittest.TestCase): + + def test_hopping(self): + + conv1 = Wannier90Converter(seedname='LaVO3-Pnma') + conv1.convert_dft_input() + SK1 = SumkDFT(hdf_file='LaVO3-Pnma.h5') + + conv2 = Wannier90Converter(seedname='LaVO3-Pnma_ef') + conv2.convert_dft_input() + SK2 = SumkDFT(hdf_file='LaVO3-Pnma_ef.h5') + + for ik in range(SK1.n_k): + self.assertTrue(np.all(SK1.hopping[ik,0] - conv2.fermi_energy*np.identity(SK1.n_orbitals[ik][0]) - SK2.hopping[ik,0] < 1e-12)) + +if __name__ == '__main__': + unittest.main() +